14 std::vector<byte> reply = {
24 0x06,
'g',
'o',
'o',
'g',
'l',
'e',
31 0x06,
'g',
'o',
'o',
'g',
'l',
'e',
36 0x00, 0x00, 0x01, 0x00,
38 0x01, 0x02, 0x03, 0x04
42 .WillByDefault(SetReplyData(&
server_, reply));
50 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str());
60 .WillByDefault(SetReply(&
server_, &rsp1));
66 .WillByDefault(SetReply(&
server_, &rsp2));
78 std::stringstream ss1;
80 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss1.str());
81 std::stringstream ss2;
83 EXPECT_EQ(
"{'www.example.com' aliases=[] addrs=[1.2.3.4]}", ss2.str());
84 std::stringstream ss3;
86 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss3.str());
99 .WillOnce(SetReply(&
server_, &rsptruncated))
100 .WillOnce(SetReply(&
server_, &rspok));
105 std::stringstream ss;
107 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str());
112 int rc = *(
int*)
data;
113 if (
verbose) std::cerr <<
"SocketConnectCallback(" << fd <<
") invoked" << std::endl;
124 .WillOnce(SetReply(&
server_, &rsp));
136 std::stringstream ss;
138 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
157 int rc = *(
int*)
data;
158 if (
verbose) std::cerr <<
"SocketConfigureCallback(" << fd <<
") invoked" << std::endl;
169 .WillOnce(SetReply(&
server_, &rsp));
181 std::stringstream ss;
183 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
202 std::vector<byte> one = {0x01};
204 .WillOnce(SetReplyData(&
server_, one));
219 .WillOnce(SetReply(&
server_, &rsp));
233 .WillOnce(SetReply(&
server_, &rsp));
248 .WillOnce(SetReply(&
server_, &rsp));
263 .WillOnce(SetReply(&
server_, &rsp));
278 .WillOnce(SetReply(&
server_, &rsp));
297 opts->socket_send_buffer_size = 514;
298 opts->socket_receive_buffer_size = 514;
307 byte addr6[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
308 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
317 .WillByDefault(SetReply(&
server_, &rsp));
323 std::stringstream ss;
325 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
355 .WillByDefault(SetReply(&
server_, &rsp));
369 .WillByDefault(SetReply(&
server_, &rsp));
383 .WillByDefault(SetReply(&
server_, &rsp));
405 .WillOnce(SetReply(&
server_, &rspfail))
406 .WillOnce(SetReply(&
server_, &rspok));
411 std::stringstream ss;
413 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str());
421 .WillByDefault(SetReply(&
server_, &nofirst));
426 .WillByDefault(SetReply(&
server_, &nosecond));
432 .WillByDefault(SetReply(&
server_, &yesthird));
438 std::stringstream ss;
440 EXPECT_EQ(
"{'www.third.gov' aliases=[] addrs=[2.3.4.5]}", ss.str());
449 .WillOnce(SetReply(&
server_, &nofirst));
454 .WillOnce(SetReply(&
server_, &nosecond));
470 std::stringstream ss;
472 EXPECT_EQ(
"{'www.third.gov' aliases=[] addrs=[2.3.4.5]}", ss.str());
480 .WillByDefault(SetReply(&
server_, &nofirst));
485 .WillByDefault(SetReply(&
server_, &nosecond));
490 .WillByDefault(SetReply(&
server_, ¬hird));
496 .WillByDefault(SetReply(&
server_, &yesbare));
502 std::stringstream ss;
504 EXPECT_EQ(
"{'www' aliases=[] addrs=[2.3.4.5]}", ss.str());
513 .WillByDefault(SetReply(&
server_, &nofirst));
518 .WillByDefault(SetReply(&
server_, &nosecond));
524 .WillByDefault(SetReply(&
server_, &yesthird));
530 std::stringstream ss;
532 EXPECT_EQ(
"{'www.third.gov' aliases=[] addrs=[2.3.4.5]}", ss.str());
541 .WillByDefault(SetReply(&
server_, &nofirst));
546 .WillByDefault(SetReply(&
server_, &nosecond));
551 .WillByDefault(SetReply(&
server_, ¬hird));
556 .WillByDefault(SetReply(&
server_, &nobare));
571 .WillByDefault(SetReply(&
server_, &nofirst));
576 .WillByDefault(SetReply(&
server_, &nosecond));
581 .WillByDefault(SetReply(&
server_, ¬hird));
586 .WillByDefault(SetReply(&
server_, &nobare));
609 .WillByDefault(SetReply(&
server_, &nobare));
615 .WillByDefault(SetReply(&
server_, &yesfirst));
622 std::stringstream ss;
624 EXPECT_EQ(
"RSP QRY AA NOERROR Q:{'a.b.c.w.w.w.first.com' IN A} "
625 "A:{'a.b.c.w.w.w.first.com' IN A TTL=512 2.3.4.5}",
634 {0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
635 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03}));
637 .WillByDefault(SetReply(&
server_, &rsp6));
643 std::stringstream ss;
646 EXPECT_EQ(
"{'example.com' aliases=[] addrs=[2121:0000:0000:0000:0000:0000:0000:0303]}", ss.str());
654 .WillByDefault(SetReply(&
server_, &rsp6));
660 .WillByDefault(SetReply(&
server_, &rsp4));
666 std::stringstream ss;
668 EXPECT_EQ(
"{'example.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
677 .WillByDefault(SetReply(&
server_, &rsp6));
682 .WillByDefault(SetReply(&
server_, &rsp4));
688 std::stringstream ss;
690 EXPECT_EQ(
"{'' aliases=[] addrs=[]}", ss.str());
699 .WillByDefault(SetReply(&
server_, &rsp6));
705 .WillByDefault(SetReply(&
server_, &rsp4));
711 std::stringstream ss;
713 EXPECT_EQ(
"{'example.com' aliases=[] addrs=[1.2.3.4]}", ss.str());
721 std::stringstream ss;
723 EXPECT_EQ(
"{'1.2.3.4' aliases=[] addrs=[1.2.3.4]}", ss.str());
728 SetAllocSizeFail(strlen(
"1.2.3.4") + 1);
742 .WillByDefault(SetReply(&
server_, &rsp));
750 std::stringstream ss;
752 EXPECT_EQ(
"{'example.com' aliases=[] addrs=[12.13.14.15, 22.23.24.25, 2.3.4.5]}", ss.str());
760 std::stringstream ss;
762 EXPECT_EQ(
"{'example.com' aliases=[] addrs=[2.3.4.5, 22.23.24.25, 12.13.14.15]}", ss.str());
777 {0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
778 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02}))
780 {0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03}));
783 .WillByDefault(SetReply(&
server_, &rsp));
791 std::stringstream ss;
793 EXPECT_EQ(
"{'example.com' aliases=[] addrs=[1111:0000:0000:0000:0000:0000:0000:0202, "
794 "2121:0000:0000:0000:0000:0000:0000:0303]}", ss.str());
802 std::stringstream ss;
804 EXPECT_EQ(
"{'example.com' aliases=[] addrs=[2121:0000:0000:0000:0000:0000:0000:0303, "
805 "1111:0000:0000:0000:0000:0000:0000:0202]}", ss.str());
815 .WillByDefault(SetReply(&
server_, &nofirst));
820 .WillByDefault(SetReply(&
server_, &nosecond));
826 .WillByDefault(SetReply(&
server_, &yesthird));
831 const int kCount = 34;
833 for (
int ii = 1; ii <= kCount; ii++) {
841 std::stringstream ss;
843 EXPECT_EQ(
"{'www.third.gov' aliases=[] addrs=[2.3.4.5]}", ss.str()) <<
" failed alloc #" << ii;
844 if (
verbose) std::cerr <<
"Succeeded despite failure of alloc #" << ii << std::endl;
856 std::vector<byte> nothing;
860 .
add_answer(
new DNSARR(
"www.google.com", 0x0100, {0x01, 0x02, 0x03, 0x04}));
863 .WillOnce(SetReplyData(&
server_, nothing))
864 .WillOnce(SetReplyData(&
server_, nothing))
865 .WillOnce(SetReply(&
server_, &reply));
872 std::stringstream ss;
874 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str());
889 addr.s_addr = htonl(0x08080808);
900 std::vector<byte> nothing;
904 .WillOnce(SetReplyData(&
server_, nothing))
943 .add_answer(
new DNSCnameRR(
"cname.first.com", 100,
"a.first.com"));
955 unsigned char gdns_addr4[4] = {0x08, 0x08, 0x08, 0x08};
972 .
add_answer(
new DNSARR(
"www.google.com", 0x0100, {0x01, 0x02, 0x03, 0x04}));
974 .WillByDefault(SetReply(&
server_, &reply));
976 TempFile aliases(
"\n\n# www commentedout\nwww www.google.com\n");
983 std::stringstream ss;
985 EXPECT_EQ(
"{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str());
994 .WillByDefault(SetReply(&
server_, &yesfirst));
996 TempFile aliases(
"\n\n# www commentedout\nww www.google.com\n");
1002 std::stringstream ss;
1004 EXPECT_EQ(
"{'www.first.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
1013 .WillByDefault(SetReply(&
server_, &yesfirst));
1015 EnvValue with_env(
"HOSTALIASES",
"bogus.mcfile");
1020 std::stringstream ss;
1022 EXPECT_EQ(
"{'www.first.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
1026 TempFile aliases(
"www www.google.com\n");
1049 std::stringstream ss;
1051 EXPECT_EQ(
"{'www.example.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
1085 .WillOnce(SetReply(
servers_[0].
get(), &servfailrsp));
1087 .WillOnce(SetReply(
servers_[1].
get(), ¬implrsp));
1094 .WillOnce(SetReply(
servers_[1].
get(), &servfailrsp));
1096 .WillOnce(SetReply(
servers_[2].
get(), ¬implrsp));
1103 .WillOnce(SetReply(
servers_[2].
get(), &servfailrsp));
1105 .WillOnce(SetReply(
servers_[0].
get(), ¬implrsp));
1130 .WillOnce(SetReply(
servers_[0].
get(), &servfailrsp));
1132 .WillOnce(SetReply(
servers_[1].
get(), ¬implrsp));
1139 .WillOnce(SetReply(
servers_[0].
get(), &servfailrsp));
1141 .WillOnce(SetReply(
servers_[1].
get(), ¬implrsp));
1148 .WillOnce(SetReply(
servers_[0].
get(), &servfailrsp));
1150 .WillOnce(SetReply(
servers_[1].
get(), ¬implrsp));