|
|
|
@ -67,7 +67,7 @@ TEST_F(LibraryTest, ParseAReplyOK) { |
|
|
|
|
struct hostent *host = nullptr; |
|
|
|
|
struct ares_addrttl info[5]; |
|
|
|
|
int count = 5; |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(1, count); |
|
|
|
|
EXPECT_EQ(0x01020304, info[0].ttl); |
|
|
|
@ -81,7 +81,7 @@ TEST_F(LibraryTest, ParseAReplyOK) { |
|
|
|
|
ares_free_hostent(host); |
|
|
|
|
|
|
|
|
|
// Repeat without providing a hostent
|
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
nullptr, info, &count)); |
|
|
|
|
EXPECT_EQ(1, count); |
|
|
|
|
EXPECT_EQ(0x01020304, info[0].ttl); |
|
|
|
@ -141,7 +141,7 @@ TEST_F(LibraryTest, ParseAReplyNoData) { |
|
|
|
|
struct hostent *host = nullptr; |
|
|
|
|
struct ares_addrttl info[2]; |
|
|
|
|
int count = 2; |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(0, count); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
@ -150,7 +150,7 @@ TEST_F(LibraryTest, ParseAReplyNoData) { |
|
|
|
|
pkt.add_answer(new DNSCnameRR("example.com", 200, "c.example.com")); |
|
|
|
|
data = pkt.data(); |
|
|
|
|
// Expect success as per https://github.com/c-ares/c-ares/commit/2c63440127feed70ccefb148b8f938a2df6c15f8
|
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(0, count); |
|
|
|
|
EXPECT_NE(nullptr, host); |
|
|
|
@ -173,7 +173,7 @@ TEST_F(LibraryTest, ParseAReplyVariantA) { |
|
|
|
|
struct ares_addrttl info[2]; |
|
|
|
|
int count = 2; |
|
|
|
|
std::vector<byte> data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(1, count); |
|
|
|
|
EXPECT_EQ("18.7.22.69", AddressToString(&(info[0].ipaddr), 4)); |
|
|
|
@ -190,7 +190,7 @@ TEST_F(LibraryTest, ParseAReplyJustCname) { |
|
|
|
|
struct ares_addrttl info[2]; |
|
|
|
|
int count = 2; |
|
|
|
|
std::vector<byte> data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(0, count); |
|
|
|
|
ASSERT_NE(nullptr, host); |
|
|
|
@ -218,7 +218,7 @@ TEST_F(LibraryTest, ParseAReplyVariantCname) { |
|
|
|
|
struct ares_addrttl info[2]; |
|
|
|
|
int count = 2; |
|
|
|
|
std::vector<byte> data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(1, count); |
|
|
|
|
EXPECT_EQ("129.97.123.22", AddressToString(&(info[0].ipaddr), 4)); |
|
|
|
@ -228,7 +228,7 @@ TEST_F(LibraryTest, ParseAReplyVariantCname) { |
|
|
|
|
|
|
|
|
|
// Repeat parsing without places to put the results.
|
|
|
|
|
count = 0; |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
nullptr, info, &count)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -249,7 +249,7 @@ TEST_F(LibraryTest, ParseAReplyVariantCnameChain) { |
|
|
|
|
struct ares_addrttl info[2]; |
|
|
|
|
int count = 2; |
|
|
|
|
std::vector<byte> data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(1, count); |
|
|
|
|
EXPECT_EQ("8.8.8.8", AddressToString(&(info[0].ipaddr), 4)); |
|
|
|
@ -271,7 +271,7 @@ TEST_F(LibraryTest, DISABLED_ParseAReplyVariantCnameLast) { |
|
|
|
|
struct ares_addrttl info[8]; |
|
|
|
|
int count = 8; |
|
|
|
|
std::vector<byte> data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(4, count); |
|
|
|
|
EXPECT_EQ("129.97.123.221", AddressToString(&(info[0].ipaddr), 4)); |
|
|
|
@ -299,7 +299,7 @@ TEST_F(LibraryTest, ParseAReplyErrors) { |
|
|
|
|
// No question.
|
|
|
|
|
pkt.questions_.clear(); |
|
|
|
|
data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
pkt.add_question(new DNSQuestion("example.com", T_A)); |
|
|
|
@ -308,7 +308,7 @@ TEST_F(LibraryTest, ParseAReplyErrors) { |
|
|
|
|
pkt.questions_.clear(); |
|
|
|
|
pkt.add_question(new DNSQuestion("Axample.com", T_A)); |
|
|
|
|
data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
pkt.questions_.clear(); |
|
|
|
@ -318,7 +318,7 @@ TEST_F(LibraryTest, ParseAReplyErrors) { |
|
|
|
|
// Not a response.
|
|
|
|
|
pkt.set_response(false); |
|
|
|
|
data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
pkt.set_response(true); |
|
|
|
@ -326,7 +326,7 @@ TEST_F(LibraryTest, ParseAReplyErrors) { |
|
|
|
|
// Bad return code.
|
|
|
|
|
pkt.set_rcode(FORMERR); |
|
|
|
|
data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
pkt.set_rcode(NOERROR); |
|
|
|
@ -335,7 +335,7 @@ TEST_F(LibraryTest, ParseAReplyErrors) { |
|
|
|
|
// Two questions
|
|
|
|
|
pkt.add_question(new DNSQuestion("example.com", T_A)); |
|
|
|
|
data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
pkt.questions_.clear(); |
|
|
|
@ -345,7 +345,7 @@ TEST_F(LibraryTest, ParseAReplyErrors) { |
|
|
|
|
pkt.answers_.clear(); |
|
|
|
|
pkt.add_answer(new DNSMxRR("example.com", 100, 100, "mx1.example.com")); |
|
|
|
|
data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
pkt.answers_.clear(); |
|
|
|
@ -354,7 +354,7 @@ TEST_F(LibraryTest, ParseAReplyErrors) { |
|
|
|
|
// No answer.
|
|
|
|
|
pkt.answers_.clear(); |
|
|
|
|
data = pkt.data(); |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_ENODATA, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
pkt.add_answer(new DNSARR("example.com", 100, {0x02, 0x03, 0x04, 0x05})); |
|
|
|
@ -362,10 +362,10 @@ TEST_F(LibraryTest, ParseAReplyErrors) { |
|
|
|
|
// Truncated packets.
|
|
|
|
|
data = pkt.data(); |
|
|
|
|
for (size_t len = 1; len < data.size(); len++) { |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), len, |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), (int)len, |
|
|
|
|
&host, info, &count)); |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), len, |
|
|
|
|
EXPECT_EQ(ARES_EBADRESP, ares_parse_a_reply(data.data(), (int)len, |
|
|
|
|
nullptr, info, &count)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -385,7 +385,7 @@ TEST_F(LibraryTest, ParseAReplyAllocFail) { |
|
|
|
|
for (int ii = 1; ii <= 8; ii++) { |
|
|
|
|
ClearFails(); |
|
|
|
|
SetAllocFail(ii); |
|
|
|
|
EXPECT_EQ(ARES_ENOMEM, ares_parse_a_reply(data.data(), data.size(), |
|
|
|
|
EXPECT_EQ(ARES_ENOMEM, ares_parse_a_reply(data.data(), (int)data.size(), |
|
|
|
|
&host, info, &count)) << ii; |
|
|
|
|
EXPECT_EQ(nullptr, host); |
|
|
|
|
} |
|
|
|
|