From: JINMEI Tatuya Date: Fri, 18 May 2012 20:40:19 +0000 (-0700) Subject: [1539] make sure the forwarder connection is closed on destruction of authsrv. X-Git-Tag: trac2351_base~226^2~85^2~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d8aee4ee79f801022b5d306316fea34423283b5c;p=thirdparty%2Fkea.git [1539] make sure the forwarder connection is closed on destruction of authsrv. --- diff --git a/src/bin/auth/auth_srv.cc b/src/bin/auth/auth_srv.cc index a48f9da8dd..609e572d68 100644 --- a/src/bin/auth/auth_srv.cc +++ b/src/bin/auth/auth_srv.cc @@ -117,7 +117,11 @@ public: SocketSessionForwarderHolder(BaseSocketSessionForwarder& forwarder) : forwarder_(forwarder), connected_(false) {} - ~SocketSessionForwarderHolder() {} + ~SocketSessionForwarderHolder() { + if (connected_) { + forwarder_.close(); + } + } void connect() { if (!connected_) { diff --git a/src/bin/auth/tests/auth_srv_unittest.cc b/src/bin/auth/tests/auth_srv_unittest.cc index 66c95ed777..199ce64eb7 100644 --- a/src/bin/auth/tests/auth_srv_unittest.cc +++ b/src/bin/auth/tests/auth_srv_unittest.cc @@ -14,10 +14,6 @@ #include -#include - -#include - #include #include @@ -45,6 +41,11 @@ #include #include +#include +#include + +#include + using namespace std; using namespace isc::cc; using namespace isc::dns; @@ -57,6 +58,7 @@ using namespace isc::asiolink; using namespace isc::testutils; using namespace isc::server_common::portconfig; using isc::UnitTestUtil; +using boost::scoped_ptr; namespace { const char* const CONFIG_TESTDB = @@ -1407,4 +1409,20 @@ TEST_F(AuthSrvTest, DDNSForward) { } } +TEST_F(AuthSrvTest, DDNSForwardClose) { + scoped_ptr tmp_server(new AuthSrv(true, xfrout, ddns_forwarder)); + UnitTestUtil::createRequestMessage(request_message, Opcode::UPDATE(), + default_qid, Name("example.com"), + RRClass::IN(), RRType::SOA()); + createRequestPacket(request_message, IPPROTO_UDP); + tmp_server->processMessage(*io_message, *parse_message, *response_obuffer, + &dnsserv); + EXPECT_FALSE(dnsserv.hasAnswer()); + EXPECT_TRUE(ddns_forwarder.isConnected()); + + // Destroy the server. The forwarder should close the connection. + tmp_server.reset(); + EXPECT_FALSE(ddns_forwarder.isConnected()); +} + } diff --git a/src/lib/testutils/mockups.h b/src/lib/testutils/mockups.h index 4f4c27b2ea..cbfa864e93 100644 --- a/src/lib/testutils/mockups.h +++ b/src/lib/testutils/mockups.h @@ -223,7 +223,9 @@ public: } is_connected_ = true; } - virtual void close() {} + virtual void close() { + is_connected_ = false; + } #if 0 virtual void push(int sock, int family, int type, int protocol, const struct sockaddr& local_end,