]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[3539] A few additions and fixes in unit tests for CfgIface class.
authorMarcin Siodelski <marcin@isc.org>
Wed, 17 Dec 2014 18:42:40 +0000 (19:42 +0100)
committerMarcin Siodelski <marcin@isc.org>
Wed, 17 Dec 2014 18:42:40 +0000 (19:42 +0100)
src/lib/dhcpsrv/cfg_iface.cc
src/lib/dhcpsrv/tests/cfg_iface_unittest.cc

index 4c28d2ca305a0b434b63bb4b8ec76184c2d71e52..66314202b94e0f519f55c1c67591c047ebde3db0 100644 (file)
@@ -135,6 +135,7 @@ void
 CfgIface::reset() {
     wildcard_used_ = false;
     iface_set_.clear();
+    address_map_.clear();
 }
 
 void
index 7dee356466055589b0f3c21199fe5cf32b2f8a36..457a2669521554d6f41a75e37fa7c90ac3aaf992 100644 (file)
@@ -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) {