|
|
|
@ -53,6 +53,74 @@ TEST_F(LibraryTest, BasicChannelInit) { |
|
|
|
|
ares_library_cleanup(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(LibraryTest, OptionsChannelInit) { |
|
|
|
|
struct ares_options opts = {0}; |
|
|
|
|
int optmask = 0; |
|
|
|
|
opts.flags = ARES_FLAG_USEVC; |
|
|
|
|
optmask |= ARES_OPT_FLAGS; |
|
|
|
|
opts.timeout = 2000; |
|
|
|
|
optmask |= ARES_OPT_TIMEOUTMS; |
|
|
|
|
opts.tries = 2; |
|
|
|
|
optmask |= ARES_OPT_TRIES; |
|
|
|
|
opts.ndots = 4; |
|
|
|
|
optmask |= ARES_OPT_NDOTS; |
|
|
|
|
opts.udp_port = 54; |
|
|
|
|
optmask |= ARES_OPT_UDP_PORT; |
|
|
|
|
opts.tcp_port = 54; |
|
|
|
|
optmask |= ARES_OPT_TCP_PORT; |
|
|
|
|
opts.socket_send_buffer_size = 514; |
|
|
|
|
optmask |= ARES_OPT_SOCK_SNDBUF; |
|
|
|
|
opts.socket_receive_buffer_size = 514; |
|
|
|
|
optmask |= ARES_OPT_SOCK_RCVBUF; |
|
|
|
|
opts.ednspsz = 1280; |
|
|
|
|
optmask |= ARES_OPT_EDNSPSZ; |
|
|
|
|
opts.nservers = 2; |
|
|
|
|
opts.servers = (struct in_addr *)malloc(opts.nservers * sizeof(struct in_addr)); |
|
|
|
|
opts.servers[0].s_addr = htonl(0x01020304); |
|
|
|
|
opts.servers[1].s_addr = htonl(0x02030405); |
|
|
|
|
optmask |= ARES_OPT_SERVERS; |
|
|
|
|
opts.ndomains = 2; |
|
|
|
|
opts.domains = (char **)malloc(opts.ndomains * sizeof(char *)); |
|
|
|
|
opts.domains[0] = strdup("example.com"); |
|
|
|
|
opts.domains[1] = strdup("example2.com"); |
|
|
|
|
optmask |= ARES_OPT_DOMAINS; |
|
|
|
|
opts.lookups = strdup("b"); |
|
|
|
|
optmask |= ARES_OPT_LOOKUPS; |
|
|
|
|
optmask |= ARES_OPT_ROTATE; |
|
|
|
|
|
|
|
|
|
ares_channel channel = nullptr; |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_init_options(&channel, &opts, optmask)); |
|
|
|
|
EXPECT_NE(nullptr, channel); |
|
|
|
|
|
|
|
|
|
ares_channel channel2 = nullptr; |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, ares_dup(&channel2, channel)); |
|
|
|
|
|
|
|
|
|
struct ares_options opts2 = {0}; |
|
|
|
|
int optmask2 = 0; |
|
|
|
|
ares_save_options(channel2, &opts2, &optmask2); |
|
|
|
|
|
|
|
|
|
// Note that not all opts-settable fields are saved (e.g.
|
|
|
|
|
// ednspsz, socket_{send,receive}_buffer_size).
|
|
|
|
|
EXPECT_EQ(opts.flags, opts2.flags); |
|
|
|
|
EXPECT_EQ(opts.timeout, opts2.timeout); |
|
|
|
|
EXPECT_EQ(opts.tries, opts2.tries); |
|
|
|
|
EXPECT_EQ(opts.ndots, opts2.ndots); |
|
|
|
|
EXPECT_EQ(opts.udp_port, opts2.udp_port); |
|
|
|
|
EXPECT_EQ(opts.tcp_port, opts2.tcp_port); |
|
|
|
|
EXPECT_EQ(opts.nservers, opts2.nservers); |
|
|
|
|
EXPECT_EQ(opts.servers[0].s_addr, opts2.servers[0].s_addr); |
|
|
|
|
EXPECT_EQ(opts.servers[1].s_addr, opts2.servers[1].s_addr); |
|
|
|
|
EXPECT_EQ(opts.ndomains, opts2.ndomains); |
|
|
|
|
EXPECT_EQ(std::string(opts.domains[0]), std::string(opts2.domains[0])); |
|
|
|
|
EXPECT_EQ(std::string(opts.domains[1]), std::string(opts2.domains[1])); |
|
|
|
|
EXPECT_EQ(std::string(opts.lookups), std::string(opts2.lookups)); |
|
|
|
|
|
|
|
|
|
ares_destroy_options(&opts); |
|
|
|
|
ares_destroy_options(&opts2); |
|
|
|
|
ares_destroy(channel); |
|
|
|
|
ares_destroy(channel2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_F(LibraryTest, FailChannelInit) { |
|
|
|
|
EXPECT_EQ(ARES_SUCCESS, |
|
|
|
|
ares_library_init_mem(ARES_LIB_INIT_ALL, |
|
|
|
|