test-address.cc 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. /*************************************************************************
  2. *
  3. * Copyright (C) 2018-2024 Ruilin Peng (Nick) <[email protected]>.
  4. *
  5. * smartdns is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * smartdns is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #include "client.h"
  19. #include "dns.h"
  20. #include "include/utils.h"
  21. #include "server.h"
  22. #include "util.h"
  23. #include "gtest/gtest.h"
  24. #include <fstream>
  25. class Address : public ::testing::Test
  26. {
  27. protected:
  28. virtual void SetUp() {}
  29. virtual void TearDown() {}
  30. };
  31. TEST_F(Address, soa)
  32. {
  33. smartdns::MockServer server_upstream;
  34. smartdns::Server server;
  35. server_upstream.Start("udp://0.0.0.0:61053", [&](struct smartdns::ServerRequestContext *request) {
  36. if (request->qtype == DNS_T_A) {
  37. smartdns::MockServer::AddIP(request, request->domain.c_str(), "1.2.3.4", 700);
  38. return smartdns::SERVER_REQUEST_OK;
  39. } else if (request->qtype == DNS_T_AAAA) {
  40. smartdns::MockServer::AddIP(request, request->domain.c_str(), "64:ff9b::102:304", 700);
  41. return smartdns::SERVER_REQUEST_OK;
  42. }
  43. return smartdns::SERVER_REQUEST_SOA;
  44. });
  45. server.Start(R"""(bind [::]:60053
  46. server 127.0.0.1:61053
  47. speed-check-mode none
  48. address /a.com/#4
  49. address /b.com/#6
  50. address /c.com/#
  51. )""");
  52. smartdns::Client client;
  53. ASSERT_TRUE(client.Query("a.com A", 60053));
  54. std::cout << client.GetResult() << std::endl;
  55. ASSERT_EQ(client.GetAuthorityNum(), 1);
  56. EXPECT_EQ(client.GetStatus(), "NOERROR");
  57. EXPECT_EQ(client.GetAuthority()[0].GetName(), "a.com");
  58. EXPECT_EQ(client.GetAuthority()[0].GetTTL(), 30);
  59. EXPECT_EQ(client.GetAuthority()[0].GetType(), "SOA");
  60. EXPECT_EQ(client.GetAuthority()[0].GetData(),
  61. "a.gtld-servers.net. nstld.verisign-grs.com. 1800 1800 900 604800 86400");
  62. ASSERT_TRUE(client.Query("a.com AAAA", 60053));
  63. std::cout << client.GetResult() << std::endl;
  64. ASSERT_EQ(client.GetAnswerNum(), 1);
  65. EXPECT_EQ(client.GetStatus(), "NOERROR");
  66. EXPECT_EQ(client.GetAnswer()[0].GetName(), "a.com");
  67. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 700);
  68. EXPECT_EQ(client.GetAnswer()[0].GetType(), "AAAA");
  69. EXPECT_EQ(client.GetAnswer()[0].GetData(), "64:ff9b::102:304");
  70. ASSERT_TRUE(client.Query("b.com A", 60053));
  71. std::cout << client.GetResult() << std::endl;
  72. ASSERT_EQ(client.GetAnswerNum(), 1);
  73. EXPECT_EQ(client.GetStatus(), "NOERROR");
  74. EXPECT_EQ(client.GetAnswer()[0].GetName(), "b.com");
  75. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 700);
  76. EXPECT_EQ(client.GetAnswer()[0].GetType(), "A");
  77. EXPECT_EQ(client.GetAnswer()[0].GetData(), "1.2.3.4");
  78. ASSERT_TRUE(client.Query("b.com AAAA", 60053));
  79. std::cout << client.GetResult() << std::endl;
  80. ASSERT_EQ(client.GetAnswerNum(), 0);
  81. EXPECT_EQ(client.GetStatus(), "NOERROR");
  82. EXPECT_EQ(client.GetAuthority()[0].GetName(), "b.com");
  83. EXPECT_EQ(client.GetAuthority()[0].GetTTL(), 30);
  84. EXPECT_EQ(client.GetAuthority()[0].GetType(), "SOA");
  85. EXPECT_EQ(client.GetAuthority()[0].GetData(),
  86. "a.gtld-servers.net. nstld.verisign-grs.com. 1800 1800 900 604800 86400");
  87. ASSERT_TRUE(client.Query("c.com A", 60053));
  88. std::cout << client.GetResult() << std::endl;
  89. ASSERT_EQ(client.GetAnswerNum(), 0);
  90. EXPECT_EQ(client.GetStatus(), "NXDOMAIN");
  91. EXPECT_EQ(client.GetAuthority()[0].GetName(), "c.com");
  92. EXPECT_EQ(client.GetAuthority()[0].GetTTL(), 30);
  93. EXPECT_EQ(client.GetAuthority()[0].GetType(), "SOA");
  94. EXPECT_EQ(client.GetAuthority()[0].GetData(),
  95. "a.gtld-servers.net. nstld.verisign-grs.com. 1800 1800 900 604800 86400");
  96. ASSERT_TRUE(client.Query("c.com AAAA", 60053));
  97. std::cout << client.GetResult() << std::endl;
  98. ASSERT_EQ(client.GetAnswerNum(), 0);
  99. EXPECT_EQ(client.GetStatus(), "NXDOMAIN");
  100. EXPECT_EQ(client.GetAuthority()[0].GetName(), "c.com");
  101. EXPECT_EQ(client.GetAuthority()[0].GetTTL(), 30);
  102. EXPECT_EQ(client.GetAuthority()[0].GetType(), "SOA");
  103. EXPECT_EQ(client.GetAuthority()[0].GetData(),
  104. "a.gtld-servers.net. nstld.verisign-grs.com. 1800 1800 900 604800 86400");
  105. }
  106. TEST_F(Address, ip)
  107. {
  108. smartdns::MockServer server_upstream;
  109. smartdns::Server server;
  110. server_upstream.Start("udp://0.0.0.0:61053", [&](struct smartdns::ServerRequestContext *request) {
  111. if (request->qtype == DNS_T_A) {
  112. smartdns::MockServer::AddIP(request, request->domain.c_str(), "1.2.3.4", 700);
  113. return smartdns::SERVER_REQUEST_OK;
  114. } else if (request->qtype == DNS_T_AAAA) {
  115. smartdns::MockServer::AddIP(request, request->domain.c_str(), "64:ff9b::102:304", 700);
  116. return smartdns::SERVER_REQUEST_OK;
  117. }
  118. return smartdns::SERVER_REQUEST_SOA;
  119. });
  120. server.Start(R"""(bind [::]:60053
  121. server 127.0.0.1:61053
  122. speed-check-mode none
  123. address /a.com/10.10.10.10
  124. address /a.com/64:ff9b::1010:1010
  125. )""");
  126. smartdns::Client client;
  127. ASSERT_TRUE(client.Query("a.com A", 60053));
  128. std::cout << client.GetResult() << std::endl;
  129. ASSERT_EQ(client.GetAnswerNum(), 1);
  130. EXPECT_EQ(client.GetStatus(), "NOERROR");
  131. EXPECT_EQ(client.GetAnswer()[0].GetName(), "a.com");
  132. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  133. EXPECT_EQ(client.GetAnswer()[0].GetType(), "A");
  134. EXPECT_EQ(client.GetAnswer()[0].GetData(), "10.10.10.10");
  135. ASSERT_TRUE(client.Query("a.com AAAA", 60053));
  136. std::cout << client.GetResult() << std::endl;
  137. ASSERT_EQ(client.GetAnswerNum(), 1);
  138. EXPECT_EQ(client.GetStatus(), "NOERROR");
  139. EXPECT_EQ(client.GetAnswer()[0].GetName(), "a.com");
  140. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  141. EXPECT_EQ(client.GetAnswer()[0].GetType(), "AAAA");
  142. EXPECT_EQ(client.GetAnswer()[0].GetData(), "64:ff9b::1010:1010");
  143. }
  144. TEST_F(Address, multiaddress)
  145. {
  146. smartdns::MockServer server_upstream;
  147. smartdns::Server server;
  148. server_upstream.Start("udp://0.0.0.0:61053", [&](struct smartdns::ServerRequestContext *request) {
  149. if (request->qtype == DNS_T_A) {
  150. smartdns::MockServer::AddIP(request, request->domain.c_str(), "1.2.3.4", 700);
  151. return smartdns::SERVER_REQUEST_OK;
  152. } else if (request->qtype == DNS_T_AAAA) {
  153. smartdns::MockServer::AddIP(request, request->domain.c_str(), "64:ff9b::102:304", 700);
  154. return smartdns::SERVER_REQUEST_OK;
  155. }
  156. return smartdns::SERVER_REQUEST_SOA;
  157. });
  158. server.Start(R"""(bind [::]:60053
  159. server 127.0.0.1:61053
  160. speed-check-mode none
  161. address /a.com/10.10.10.10,11.11.11.11,22.22.22.22
  162. address /a.com/64:ff9b::1010:1010,64:ff9b::1111:1111,64:ff9b::2222:2222
  163. )""");
  164. smartdns::Client client;
  165. ASSERT_TRUE(client.Query("a.com A", 60053));
  166. std::cout << client.GetResult() << std::endl;
  167. std::map<std::string, smartdns::DNSRecord *> result;
  168. ASSERT_EQ(client.GetAnswerNum(), 3);
  169. EXPECT_EQ(client.GetStatus(), "NOERROR");
  170. auto answers = client.GetAnswer();
  171. for (int i = 0; i < client.GetAnswerNum(); i++) {
  172. result[client.GetAnswer()[i].GetData()] = &answers[i];
  173. }
  174. ASSERT_NE(result.find("10.10.10.10"), result.end());
  175. auto check_result = result["10.10.10.10"];
  176. EXPECT_EQ(check_result->GetName(), "a.com");
  177. EXPECT_EQ(check_result->GetTTL(), 600);
  178. EXPECT_EQ(check_result->GetType(), "A");
  179. EXPECT_EQ(check_result->GetData(), "10.10.10.10");
  180. ASSERT_NE(result.find("11.11.11.11"), result.end());
  181. check_result = result["11.11.11.11"];
  182. EXPECT_EQ(check_result->GetName(), "a.com");
  183. EXPECT_EQ(check_result->GetTTL(), 600);
  184. EXPECT_EQ(check_result->GetType(), "A");
  185. EXPECT_EQ(check_result->GetData(), "11.11.11.11");
  186. ASSERT_NE(result.find("22.22.22.22"), result.end());
  187. check_result = result["22.22.22.22"];
  188. EXPECT_EQ(check_result->GetName(), "a.com");
  189. EXPECT_EQ(check_result->GetTTL(), 600);
  190. EXPECT_EQ(check_result->GetType(), "A");
  191. EXPECT_EQ(check_result->GetData(), "22.22.22.22");
  192. result.clear();
  193. ASSERT_TRUE(client.Query("a.com AAAA", 60053));
  194. std::cout << client.GetResult() << std::endl;
  195. ASSERT_EQ(client.GetAnswerNum(), 3);
  196. EXPECT_EQ(client.GetStatus(), "NOERROR");
  197. answers = client.GetAnswer();
  198. for (int i = 0; i < client.GetAnswerNum(); i++) {
  199. result[client.GetAnswer()[i].GetData()] = &answers[i];
  200. }
  201. ASSERT_NE(result.find("64:ff9b::1010:1010"), result.end());
  202. check_result = result["64:ff9b::1010:1010"];
  203. EXPECT_EQ(check_result->GetName(), "a.com");
  204. EXPECT_EQ(check_result->GetTTL(), 600);
  205. EXPECT_EQ(check_result->GetType(), "AAAA");
  206. EXPECT_EQ(check_result->GetData(), "64:ff9b::1010:1010");
  207. ASSERT_NE(result.find("64:ff9b::1111:1111"), result.end());
  208. check_result = result["64:ff9b::1111:1111"];
  209. EXPECT_EQ(check_result->GetName(), "a.com");
  210. EXPECT_EQ(check_result->GetTTL(), 600);
  211. EXPECT_EQ(check_result->GetType(), "AAAA");
  212. EXPECT_EQ(check_result->GetData(), "64:ff9b::1111:1111");
  213. ASSERT_NE(result.find("64:ff9b::2222:2222"), result.end());
  214. check_result = result["64:ff9b::2222:2222"];
  215. EXPECT_EQ(check_result->GetName(), "a.com");
  216. EXPECT_EQ(check_result->GetTTL(), 600);
  217. EXPECT_EQ(check_result->GetType(), "AAAA");
  218. EXPECT_EQ(check_result->GetData(), "64:ff9b::2222:2222");
  219. }
  220. TEST_F(Address, soa_sub_ip)
  221. {
  222. smartdns::MockServer server_upstream;
  223. smartdns::Server server;
  224. server_upstream.Start("udp://0.0.0.0:61053", [&](struct smartdns::ServerRequestContext *request) {
  225. if (request->qtype == DNS_T_A) {
  226. smartdns::MockServer::AddIP(request, request->domain.c_str(), "1.2.3.4", 700);
  227. return smartdns::SERVER_REQUEST_OK;
  228. } else if (request->qtype == DNS_T_AAAA) {
  229. smartdns::MockServer::AddIP(request, request->domain.c_str(), "64:ff9b::102:304", 700);
  230. return smartdns::SERVER_REQUEST_OK;
  231. }
  232. return smartdns::SERVER_REQUEST_SOA;
  233. });
  234. server.Start(R"""(bind [::]:60053
  235. server 127.0.0.1:61053
  236. speed-check-mode none
  237. address /a.com/192.168.1.1
  238. address /com/#
  239. )""");
  240. smartdns::Client client;
  241. ASSERT_TRUE(client.Query("a.com A", 60053));
  242. std::cout << client.GetResult() << std::endl;
  243. ASSERT_EQ(client.GetAnswerNum(), 1);
  244. EXPECT_EQ(client.GetStatus(), "NOERROR");
  245. EXPECT_EQ(client.GetAnswer()[0].GetName(), "a.com");
  246. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  247. EXPECT_EQ(client.GetAnswer()[0].GetType(), "A");
  248. EXPECT_EQ(client.GetAnswer()[0].GetData(), "192.168.1.1");
  249. ASSERT_TRUE(client.Query("a.com AAAA", 60053));
  250. std::cout << client.GetResult() << std::endl;
  251. ASSERT_EQ(client.GetAnswerNum(), 0);
  252. EXPECT_EQ(client.GetStatus(), "NOERROR");
  253. ASSERT_TRUE(client.Query("b.com A", 60053));
  254. std::cout << client.GetResult() << std::endl;
  255. ASSERT_EQ(client.GetAnswerNum(), 0);
  256. EXPECT_EQ(client.GetStatus(), "NXDOMAIN");
  257. }
  258. TEST_F(Address, set_ipv4_query_ipv6)
  259. {
  260. smartdns::MockServer server_upstream;
  261. smartdns::Server server;
  262. server_upstream.Start("udp://0.0.0.0:61053", [&](struct smartdns::ServerRequestContext *request) {
  263. if (request->qtype == DNS_T_A) {
  264. smartdns::MockServer::AddIP(request, request->domain.c_str(), "1.2.3.4", 700);
  265. return smartdns::SERVER_REQUEST_OK;
  266. } else if (request->qtype == DNS_T_AAAA) {
  267. smartdns::MockServer::AddIP(request, request->domain.c_str(), "64:ff9b::102:304", 700);
  268. return smartdns::SERVER_REQUEST_OK;
  269. }
  270. return smartdns::SERVER_REQUEST_SOA;
  271. });
  272. server.Start(R"""(bind [::]:60053
  273. server 127.0.0.1:61053
  274. speed-check-mode none
  275. address /a.com/192.168.1.1
  276. )""");
  277. smartdns::Client client;
  278. ASSERT_TRUE(client.Query("a.com A", 60053));
  279. std::cout << client.GetResult() << std::endl;
  280. ASSERT_EQ(client.GetAnswerNum(), 1);
  281. EXPECT_EQ(client.GetStatus(), "NOERROR");
  282. EXPECT_EQ(client.GetAnswer()[0].GetName(), "a.com");
  283. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  284. EXPECT_EQ(client.GetAnswer()[0].GetType(), "A");
  285. EXPECT_EQ(client.GetAnswer()[0].GetData(), "192.168.1.1");
  286. ASSERT_TRUE(client.Query("a.com AAAA", 60053));
  287. std::cout << client.GetResult() << std::endl;
  288. ASSERT_EQ(client.GetAnswerNum(), 0);
  289. EXPECT_EQ(client.GetStatus(), "NOERROR");
  290. }
  291. TEST_F(Address, set_ipv6_query_ipv4)
  292. {
  293. smartdns::MockServer server_upstream;
  294. smartdns::Server server;
  295. server_upstream.Start("udp://0.0.0.0:61053", [&](struct smartdns::ServerRequestContext *request) {
  296. if (request->qtype == DNS_T_A) {
  297. smartdns::MockServer::AddIP(request, request->domain.c_str(), "1.2.3.4", 700);
  298. return smartdns::SERVER_REQUEST_OK;
  299. } else if (request->qtype == DNS_T_AAAA) {
  300. smartdns::MockServer::AddIP(request, request->domain.c_str(), "64:ff9b::102:304", 700);
  301. return smartdns::SERVER_REQUEST_OK;
  302. }
  303. return smartdns::SERVER_REQUEST_SOA;
  304. });
  305. server.Start(R"""(bind [::]:60053
  306. server 127.0.0.1:61053
  307. speed-check-mode none
  308. address /a.com/64:ff9b::1010:1010
  309. )""");
  310. smartdns::Client client;
  311. ASSERT_TRUE(client.Query("a.com A", 60053));
  312. std::cout << client.GetResult() << std::endl;
  313. ASSERT_EQ(client.GetAnswerNum(), 0);
  314. EXPECT_EQ(client.GetStatus(), "NOERROR");
  315. ASSERT_TRUE(client.Query("a.com AAAA", 60053));
  316. std::cout << client.GetResult() << std::endl;
  317. ASSERT_EQ(client.GetAnswerNum(), 1);
  318. EXPECT_EQ(client.GetStatus(), "NOERROR");
  319. EXPECT_EQ(client.GetAnswer()[0].GetName(), "a.com");
  320. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  321. EXPECT_EQ(client.GetAnswer()[0].GetType(), "AAAA");
  322. EXPECT_EQ(client.GetAnswer()[0].GetData(), "64:ff9b::1010:1010");
  323. }
  324. TEST_F(Address, set_ipv4_allow_ipv6)
  325. {
  326. smartdns::MockServer server_upstream;
  327. smartdns::Server server;
  328. server_upstream.Start("udp://0.0.0.0:61053", [&](struct smartdns::ServerRequestContext *request) {
  329. if (request->qtype == DNS_T_A) {
  330. smartdns::MockServer::AddIP(request, request->domain.c_str(), "1.2.3.4", 700);
  331. return smartdns::SERVER_REQUEST_OK;
  332. } else if (request->qtype == DNS_T_AAAA) {
  333. smartdns::MockServer::AddIP(request, request->domain.c_str(), "64:ff9b::102:304", 700);
  334. return smartdns::SERVER_REQUEST_OK;
  335. }
  336. return smartdns::SERVER_REQUEST_SOA;
  337. });
  338. server.Start(R"""(bind [::]:60053
  339. server 127.0.0.1:61053
  340. speed-check-mode none
  341. address /a.com/192.168.1.1
  342. address /b.a.com/-6
  343. address /com/#
  344. )""");
  345. smartdns::Client client;
  346. ASSERT_TRUE(client.Query("a.com A", 60053));
  347. std::cout << client.GetResult() << std::endl;
  348. ASSERT_EQ(client.GetAnswerNum(), 1);
  349. EXPECT_EQ(client.GetStatus(), "NOERROR");
  350. EXPECT_EQ(client.GetAnswer()[0].GetName(), "a.com");
  351. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  352. EXPECT_EQ(client.GetAnswer()[0].GetType(), "A");
  353. EXPECT_EQ(client.GetAnswer()[0].GetData(), "192.168.1.1");
  354. ASSERT_TRUE(client.Query("a.com AAAA", 60053));
  355. std::cout << client.GetResult() << std::endl;
  356. ASSERT_EQ(client.GetAnswerNum(), 0);
  357. EXPECT_EQ(client.GetStatus(), "NOERROR");
  358. ASSERT_TRUE(client.Query("c.a.com AAAA", 60053));
  359. std::cout << client.GetResult() << std::endl;
  360. ASSERT_EQ(client.GetAnswerNum(), 0);
  361. EXPECT_EQ(client.GetStatus(), "NOERROR");
  362. ASSERT_TRUE(client.Query("b.a.com AAAA", 60053));
  363. std::cout << client.GetResult() << std::endl;
  364. ASSERT_EQ(client.GetAnswerNum(), 1);
  365. EXPECT_EQ(client.GetStatus(), "NOERROR");
  366. EXPECT_EQ(client.GetAnswer()[0].GetName(), "b.a.com");
  367. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 700);
  368. EXPECT_EQ(client.GetAnswer()[0].GetType(), "AAAA");
  369. EXPECT_EQ(client.GetAnswer()[0].GetData(), "64:ff9b::102:304");
  370. ASSERT_TRUE(client.Query("b.com AAAA", 60053));
  371. std::cout << client.GetResult() << std::endl;
  372. ASSERT_EQ(client.GetAnswerNum(), 0);
  373. EXPECT_EQ(client.GetStatus(), "NXDOMAIN");
  374. }
  375. TEST_F(Address, set_both_ipv4_ipv6)
  376. {
  377. smartdns::MockServer server_upstream;
  378. smartdns::Server server;
  379. server_upstream.Start("udp://0.0.0.0:61053", [&](struct smartdns::ServerRequestContext *request) {
  380. if (request->qtype == DNS_T_A) {
  381. smartdns::MockServer::AddIP(request, request->domain.c_str(), "1.2.3.4", 700);
  382. return smartdns::SERVER_REQUEST_OK;
  383. } else if (request->qtype == DNS_T_AAAA) {
  384. smartdns::MockServer::AddIP(request, request->domain.c_str(), "64:ff9b::102:304", 700);
  385. return smartdns::SERVER_REQUEST_OK;
  386. }
  387. return smartdns::SERVER_REQUEST_SOA;
  388. });
  389. server.Start(R"""(bind [::]:60053
  390. server 127.0.0.1:61053
  391. speed-check-mode none
  392. address /a.com/192.168.1.1
  393. address /b.a.com/64:ff9b::1010:1010
  394. address /com/#
  395. )""");
  396. smartdns::Client client;
  397. ASSERT_TRUE(client.Query("a.com A", 60053));
  398. std::cout << client.GetResult() << std::endl;
  399. ASSERT_EQ(client.GetAnswerNum(), 1);
  400. EXPECT_EQ(client.GetStatus(), "NOERROR");
  401. EXPECT_EQ(client.GetAnswer()[0].GetName(), "a.com");
  402. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  403. EXPECT_EQ(client.GetAnswer()[0].GetType(), "A");
  404. EXPECT_EQ(client.GetAnswer()[0].GetData(), "192.168.1.1");
  405. ASSERT_TRUE(client.Query("c.a.com AAAA", 60053));
  406. std::cout << client.GetResult() << std::endl;
  407. ASSERT_EQ(client.GetAnswerNum(), 0);
  408. EXPECT_EQ(client.GetStatus(), "NOERROR");
  409. ASSERT_TRUE(client.Query("b.a.com A", 60053));
  410. std::cout << client.GetResult() << std::endl;
  411. ASSERT_EQ(client.GetAnswerNum(), 1);
  412. EXPECT_EQ(client.GetStatus(), "NOERROR");
  413. EXPECT_EQ(client.GetAnswer()[0].GetName(), "b.a.com");
  414. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  415. EXPECT_EQ(client.GetAnswer()[0].GetType(), "A");
  416. EXPECT_EQ(client.GetAnswer()[0].GetData(), "192.168.1.1");
  417. ASSERT_TRUE(client.Query("b.a.com AAAA", 60053));
  418. std::cout << client.GetResult() << std::endl;
  419. ASSERT_EQ(client.GetAnswerNum(), 1);
  420. EXPECT_EQ(client.GetStatus(), "NOERROR");
  421. EXPECT_EQ(client.GetAnswer()[0].GetName(), "b.a.com");
  422. EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
  423. EXPECT_EQ(client.GetAnswer()[0].GetType(), "AAAA");
  424. EXPECT_EQ(client.GetAnswer()[0].GetData(), "64:ff9b::1010:1010");
  425. ASSERT_TRUE(client.Query("b.com AAAA", 60053));
  426. std::cout << client.GetResult() << std::endl;
  427. ASSERT_EQ(client.GetAnswerNum(), 0);
  428. EXPECT_EQ(client.GetStatus(), "NXDOMAIN");
  429. }