Browse Source

[1959] Test opening socket from remote broadcast address on Linux only.

In order to run this test interface detection is required. Since it is
right now implemented on Linux only it had to be disabled on every other
OS.
Marcin Siodelski 12 years ago
parent
commit
45ca30e42d
2 changed files with 11 additions and 0 deletions
  1. 5 0
      src/lib/dhcp/iface_mgr.cc
  2. 6 0
      src/lib/dhcp/tests/iface_mgr_unittest.cc

+ 5 - 0
src/lib/dhcp/iface_mgr.cc

@@ -513,6 +513,7 @@ IfaceMgr::getLocalAddress(const IOAddress& remote_addr, const uint16_t port) {
         }
         sock.set_option(asio::socket_base::broadcast(true), err_code);
         if (err_code) {
+            sock.close();
             isc_throw(Unexpected, "failed to enable broadcast on the socket");
         }
     }
@@ -520,6 +521,7 @@ IfaceMgr::getLocalAddress(const IOAddress& remote_addr, const uint16_t port) {
     // Try to connect to remote endpoint and check if attempt is successful.
     sock.connect(remote_endpoint->getASIOEndpoint(), err_code);
     if (err_code) {
+        sock.close();
         isc_throw(Unexpected,"failed to connect to remote endpoint.");
     }
 
@@ -528,6 +530,9 @@ IfaceMgr::getLocalAddress(const IOAddress& remote_addr, const uint16_t port) {
         sock.local_endpoint();
     asio::ip::address local_address(local_endpoint.address());
 
+    // Close the socket.
+    sock.close();
+
     // Return address of local endpoint.
     return IOAddress(local_address);
 }

+ 6 - 0
src/lib/dhcp/tests/iface_mgr_unittest.cc

@@ -407,6 +407,11 @@ TEST_F(IfaceMgrTest, socketsFromRemoteAddress) {
     EXPECT_GT(socket2, 0);
     close(socket2);
 
+    // The following test is currently disabled for OSes other than
+    // Linux because interface detection is not implemented on them.
+    // @todo enable this test for all OSes once interface detection
+    // is implemented.
+#if defined(OS_LINUX)
     // Open v4 socket to connect to broadcast address.
     int socket3  = 0;
     IOAddress bcastAddr("255.255.255.255");
@@ -415,6 +420,7 @@ TEST_F(IfaceMgrTest, socketsFromRemoteAddress) {
     );
     EXPECT_GT(socket3, 0);
     close(socket3);
+#endif
 }
 
 // TODO: disabled due to other naming on various systems