test-ddr.cc 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "client.h"
  2. #include "include/utils.h"
  3. #include "server.h"
  4. #include "smartdns/dns.h"
  5. #include "smartdns/util.h"
  6. #include "gtest/gtest.h"
  7. #include <fstream>
  8. class DDR : public ::testing::Test
  9. {
  10. protected:
  11. virtual void SetUp() {}
  12. virtual void TearDown() {}
  13. };
  14. TEST_F(DDR, DDR_RESPONSE)
  15. {
  16. smartdns::MockServer server_upstream;
  17. smartdns::Server server;
  18. server_upstream.Start("udp://0.0.0.0:61053",
  19. [&](struct smartdns::ServerRequestContext *request) { return smartdns::SERVER_REQUEST_SOA; });
  20. server.Start(R"""(bind [::]:60053 -ddr
  21. bind-tls [::]:60153 -ddr
  22. bind-https [::]:60253 -ddr -alpn h2
  23. bind-tcp [::]:60353
  24. server 127.0.0.1:61053
  25. log-console yes
  26. log-level debug
  27. cache-persist no)""");
  28. smartdns::Client client;
  29. ASSERT_TRUE(client.Query("_dns.resolver.arpa SVCB", 60053));
  30. std::cout << client.GetResult() << std::endl;
  31. ASSERT_EQ(client.GetAnswerNum(), 2);
  32. EXPECT_EQ(client.GetStatus(), "NOERROR");
  33. bool has_doq = false;
  34. bool has_dot = false;
  35. for (auto &ans : client.GetAnswer()) {
  36. EXPECT_EQ(ans.GetName(), "_dns.resolver.arpa");
  37. EXPECT_EQ(ans.GetType(), "SVCB");
  38. if (ans.GetData().find("alpn=\"h2\"") != std::string::npos) {
  39. has_doq = true;
  40. }
  41. if (ans.GetData().find("alpn=\"dot\"") != std::string::npos) {
  42. has_dot = true;
  43. }
  44. }
  45. EXPECT_TRUE(has_doq);
  46. EXPECT_TRUE(has_dot);
  47. }
  48. TEST_F(DDR, DDR_SOA)
  49. {
  50. smartdns::MockServer server_upstream;
  51. smartdns::Server server;
  52. server_upstream.Start("udp://0.0.0.0:61053",
  53. [&](struct smartdns::ServerRequestContext *request) { return smartdns::SERVER_REQUEST_SOA; });
  54. server.Start(R"""(bind [::]:60053
  55. bind-tls [::]:60053
  56. server 127.0.0.1:61053
  57. log-console yes
  58. log-level debug
  59. cache-persist no)""");
  60. smartdns::Client client;
  61. ASSERT_TRUE(client.Query("_dns.resolver.arpa SVCB", 60053));
  62. std::cout << client.GetResult() << std::endl;
  63. ASSERT_EQ(client.GetAuthorityNum(), 1);
  64. EXPECT_EQ(client.GetStatus(), "NOERROR");
  65. EXPECT_EQ(client.GetAuthority()[0].GetName(), "_dns.resolver.arpa");
  66. EXPECT_EQ(client.GetAuthority()[0].GetType(), "SOA");
  67. }