From: Marcin Siodelski Date: Tue, 19 Aug 2014 18:40:18 +0000 (+0200) Subject: [3512] Added unit tests for invalid interface names being selected. X-Git-Tag: trac3482_base~11^2~2^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a50b89a0a7795f67d769676dd30657aba6516b92;p=thirdparty%2Fkea.git [3512] Added unit tests for invalid interface names being selected. --- diff --git a/src/lib/dhcpsrv/tests/iface_cfg_unittest.cc b/src/lib/dhcpsrv/tests/iface_cfg_unittest.cc index f007e6cae2..cfa5058c2c 100644 --- a/src/lib/dhcpsrv/tests/iface_cfg_unittest.cc +++ b/src/lib/dhcpsrv/tests/iface_cfg_unittest.cc @@ -96,14 +96,14 @@ TEST_F(IfaceCfgTest, explicitNamesV4) { // Reset configuration and select only one interface this time. cfg.reset(); ASSERT_NO_THROW(cfg.use("eth1")); - + cfg.openSockets(DHCP4_SERVER_PORT); // Socket should be open on eth1 only. EXPECT_FALSE(socketOpen("eth0", AF_INET)); EXPECT_TRUE(socketOpen("eth1", AF_INET)); EXPECT_FALSE(socketOpen("lo", AF_INET)); - + } // This test checks that the interface names can be explicitly selected @@ -136,14 +136,66 @@ TEST_F(IfaceCfgTest, explicitNamesV6) { // Reset configuration and select only one interface this time. cfg.reset(); ASSERT_NO_THROW(cfg.use("eth1")); - + cfg.openSockets(DHCP6_SERVER_PORT); // Socket should be open on eth1 only. EXPECT_FALSE(socketOpen("eth0", AF_INET6)); EXPECT_TRUE(socketOpen("eth1", AF_INET6)); EXPECT_FALSE(socketOpen("lo", AF_INET6)); - + +} + +// This test checks that the wildcard interface name can be specified to +// select all interfaces to open IPv4 sockets. +TEST_F(IfaceCfgTest, wildcardV4) { + IfaceCfg cfg(IfaceCfg::V4); + ASSERT_NO_THROW(cfg.use(IfaceCfg::ALL_IFACES_KEYWORD)); + + cfg.openSockets(DHCP4_SERVER_PORT); + + // Sockets should be now open on eth0 and eth1, but not on loopback. + EXPECT_TRUE(socketOpen("eth0", AF_INET)); + EXPECT_TRUE(socketOpen("eth1", AF_INET)); + EXPECT_FALSE(socketOpen("lo", AF_INET)); + + // No IPv6 sockets should be present because we wanted IPv4 sockets. + EXPECT_FALSE(socketOpen("eth0", AF_INET6)); + EXPECT_FALSE(socketOpen("eth1", AF_INET6)); + EXPECT_FALSE(socketOpen("lo", AF_INET6)); +} + +// This test checks that the wildcard interface name can be specified to +// select all interfaces to open IPv6 sockets. +TEST_F(IfaceCfgTest, wildcardV6) { + IfaceCfg cfg(IfaceCfg::V6); + ASSERT_NO_THROW(cfg.use(IfaceCfg::ALL_IFACES_KEYWORD)); + + cfg.openSockets(DHCP4_SERVER_PORT); + + // Sockets should be now open on eth0 and eth1, but not on loopback. + EXPECT_TRUE(socketOpen("eth0", AF_INET6)); + EXPECT_TRUE(socketOpen("eth1", AF_INET6)); + EXPECT_FALSE(socketOpen("lo", AF_INET6)); + + // No IPv6 sockets should be present because we wanted IPv6 sockets. + EXPECT_FALSE(socketOpen("eth0", AF_INET)); + EXPECT_FALSE(socketOpen("eth1", AF_INET)); + EXPECT_FALSE(socketOpen("lo", AF_INET)); +} + +// Test that when invalid interface names are specified an exception is thrown. +TEST_F(IfaceCfgTest, invalidValues) { + IfaceCfg cfg(IfaceCfg::V4); + EXPECT_THROW(cfg.use(""), InvalidIfaceName); + EXPECT_THROW(cfg.use(" "), InvalidIfaceName); + EXPECT_THROW(cfg.use("bogus"), NoSuchIface); + + ASSERT_NO_THROW(cfg.use("eth0")); + EXPECT_THROW(cfg.use("eth0"), DuplicateIfaceName); + + ASSERT_NO_THROW(cfg.use(IfaceCfg::ALL_IFACES_KEYWORD)); + EXPECT_THROW(cfg.use(IfaceCfg::ALL_IFACES_KEYWORD), DuplicateIfaceName); } } // end of anonymous namespace