Parcourir la source

[3902] Workaround for file descriptor 0 implemented.

Tomek Mrugalski il y a 9 ans
Parent
commit
ba36626dbd
1 fichiers modifiés avec 19 ajouts et 0 suppressions
  1. 19 0
      src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc

+ 19 - 0
src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc

@@ -76,12 +76,26 @@ public:
             socket_path_ = string(TEST_DATA_BUILDDIR) + "/kea4.sock";
         }
         reset();
+
+        // This is a workaround for odd problems with gtest. gtest does
+        // shady with socket decriptors. In particular, sometimes we
+        // get 0 as descriptor for socket() call. Technically it is valid,
+        // but then gtest closes descriptor 0 and the socket becomes
+        // unusable. This workaround opens up one file decriptor. In case
+        // 0 is available, it will be consumed here.
+        dummy_fd_ = socket(AF_INET, SOCK_DGRAM, 0);
+        if (dummy_fd_ == 0) {
+            std::cout << "Socket descriptor 0 workaround is useful." << std::endl;
+        }
     }
 
     /// @brief Destructor
     ~CtrlChannelDhcpv4SrvTest() {
         server_.reset();
         reset();
+
+        // close dummy descriptor
+        close(dummy_fd_);
     };
 
     void createUnixChannelServer() {
@@ -183,6 +197,11 @@ public:
         client->disconnectFromServer();
         ASSERT_NO_THROW(server_->receivePacket(0));
     }
+
+    /// @brief dummy file descriptor
+    ///
+    /// See ctor for details.
+    int dummy_fd_;
 };
 
 TEST_F(CtrlChannelDhcpv4SrvTest, commands) {