From: Marcin Siodelski Date: Wed, 17 Dec 2014 18:42:40 +0000 (+0100) Subject: [3539] A few additions and fixes in unit tests for CfgIface class. X-Git-Tag: trac3504_base~23^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6fd04a3320667f34298a88f027fdb84b8a77359a;p=thirdparty%2Fkea.git [3539] A few additions and fixes in unit tests for CfgIface class. --- diff --git a/src/lib/dhcpsrv/cfg_iface.cc b/src/lib/dhcpsrv/cfg_iface.cc index 4c28d2ca30..66314202b9 100644 --- a/src/lib/dhcpsrv/cfg_iface.cc +++ b/src/lib/dhcpsrv/cfg_iface.cc @@ -135,6 +135,7 @@ void CfgIface::reset() { wildcard_used_ = false; iface_set_.clear(); + address_map_.clear(); } void diff --git a/src/lib/dhcpsrv/tests/cfg_iface_unittest.cc b/src/lib/dhcpsrv/tests/cfg_iface_unittest.cc index 7dee356466..457a266952 100644 --- a/src/lib/dhcpsrv/tests/cfg_iface_unittest.cc +++ b/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) {