Parcourir la source

[3539] A few additions and fixes in unit tests for CfgIface class.

Marcin Siodelski il y a 10 ans
Parent
commit
6fd04a3320
2 fichiers modifiés avec 23 ajouts et 0 suppressions
  1. 1 0
      src/lib/dhcpsrv/cfg_iface.cc
  2. 22 0
      src/lib/dhcpsrv/tests/cfg_iface_unittest.cc

+ 1 - 0
src/lib/dhcpsrv/cfg_iface.cc

@@ -135,6 +135,7 @@ void
 CfgIface::reset() {
     wildcard_used_ = false;
     iface_set_.clear();
+    address_map_.clear();
 }
 
 void

+ 22 - 0
src/lib/dhcpsrv/tests/cfg_iface_unittest.cc

@@ -140,16 +140,38 @@ TEST_F(CfgIfaceTest, explicitNamesAndAddressesV4) {
     ASSERT_FALSE(socketOpen("eth1", "192.0.2.3"));
     ASSERT_FALSE(socketOpen("eth1", "192.0.2.5"));
 
+    // Reset configuration.
+    cfg.reset();
+
     // Now check that the socket can be bound to a different address on
     // eth1.
     ASSERT_NO_THROW(cfg.use(AF_INET, "eth1/192.0.2.5"));
     ASSERT_THROW(cfg.use(AF_INET, "eth1/192.0.2.3"), DuplicateIfaceName);
 
+    // Open sockets according to the new configuration.
+    cfg.openSockets(AF_INET, DHCP4_SERVER_PORT);
+
     EXPECT_FALSE(socketOpen("eth0", "10.0.0.1"));
     EXPECT_FALSE(socketOpen("eth1", "192.0.2.3"));
     EXPECT_TRUE(socketOpen("eth1", "192.0.2.5"));
 }
 
+// This test checks that the invalid interface name and/or IPv4 address
+// results in error.
+TEST_F(CfgIfaceTest, explicitNamesAndAddressesInvalidV4) {
+    CfgIface cfg;
+    // An address not assigned to the interface.
+    EXPECT_THROW(cfg.use(AF_INET, "eth0/10.0.0.2"), NoSuchAddress);
+    // IPv6 address.
+    EXPECT_THROW(cfg.use(AF_INET, "eth0/2001:db8:1::1"), InvalidIfaceName);
+    // Wildcard interface name with an address.
+    EXPECT_THROW(cfg.use(AF_INET, "*/10.0.0.1"), InvalidIfaceName);
+
+    // Duplicated interface.
+    ASSERT_NO_THROW(cfg.use(AF_INET, "eth1"));
+    EXPECT_THROW(cfg.use(AF_INET, "eth1/192.0.2.3"), DuplicateIfaceName);
+}
+
 // This test checks that the interface names can be explicitly selected
 // by their names and IPv6 sockets are opened on these interfaces.
 TEST_F(CfgIfaceTest, explicitNamesV6) {