Browse Source

[3512] Added unit tests for invalid interface names being selected.

Marcin Siodelski 10 years ago
parent
commit
a50b89a0a7
1 changed files with 56 additions and 4 deletions
  1. 56 4
      src/lib/dhcpsrv/tests/iface_cfg_unittest.cc

+ 56 - 4
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