From 87d641a907b76b4a4102f441820e733ece2c97a4 Mon Sep 17 00:00:00 2001 From: David Drysdale Date: Tue, 9 Feb 2016 16:14:37 +0000 Subject: [PATCH] test: ares_set_socket_callback failure behaviour --- test/ares-test-mock.cc | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/test/ares-test-mock.cc b/test/ares-test-mock.cc index 15f0abc3..6b40fd72 100644 --- a/test/ares-test-mock.cc +++ b/test/ares-test-mock.cc @@ -109,10 +109,11 @@ TEST_P(MockUDPChannelTest, TruncationRetry) { } static int sock_cb_count = 0; -static int SocketCallback(ares_socket_t fd, int type, void *data) { - if (verbose) std::cerr << "SocketCallback(" << fd << ") invoked" << std::endl; +static int SocketConnectCallback(ares_socket_t fd, int type, void *data) { + int rc = *(int*)data; + if (verbose) std::cerr << "SocketConnectCallback(" << fd << ") invoked" << std::endl; sock_cb_count++; - return ARES_SUCCESS; + return rc; } TEST_P(MockChannelTest, SockCallback) { @@ -124,7 +125,8 @@ TEST_P(MockChannelTest, SockCallback) { .WillOnce(SetReply(&server_, &rsp)); // Get notified of new sockets - ares_set_socket_callback(channel_, SocketCallback, nullptr); + int rc = ARES_SUCCESS; + ares_set_socket_callback(channel_, SocketConnectCallback, &rc); HostResult result; sock_cb_count = 0; @@ -137,6 +139,20 @@ TEST_P(MockChannelTest, SockCallback) { EXPECT_EQ("{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss.str()); } +TEST_P(MockChannelTest, SockFailCallback) { + // Notification of new sockets gives an error. + int rc = -1; + ares_set_socket_callback(channel_, SocketConnectCallback, &rc); + + HostResult result; + sock_cb_count = 0; + ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result); + Process(); + EXPECT_LT(1, sock_cb_count); + EXPECT_TRUE(result.done_); + EXPECT_EQ(ARES_ECONNREFUSED, result.status_); +} + // TCP only to prevent retries TEST_P(MockTCPChannelTest, MalformedResponse) { std::vector one = {0x01};