Browse Source

[2784] Added logic to test_control.cc to check for a mismatch
between the commnd line arguments for ip version and server.
Added test_control unit tests to verify mismatch detection.

Thomas Markwalder 12 years ago
parent
commit
2f3d1fe8c5

+ 16 - 4
tests/tools/perfdhcp/test_control.cc

@@ -594,17 +594,29 @@ TestControl::openSocket() const {
     uint16_t port = options.getLocalPort();
     uint8_t family = AF_INET;
     int sock = 0;
+
+    if (options.getIpVersion() == 6) {
+        family = AF_INET6;
+    }
+
     IOAddress remoteaddr(servername);
+    
+    // check for mismatch between ip option and server
+    if (family != remoteaddr.getFamily())
+    {
+        isc_throw(InvalidParameter, 
+            "Values for Ip version: " <<  (unsigned int)options.getIpVersion()
+            <<  " and Server:" << servername << " are mismatched."); 
+    }
+
     if (port == 0) {
-        if (options.getIpVersion() == 6) {
+        if (family == AF_INET6) {
             port = DHCP6_CLIENT_PORT;
         } else if (options.getIpVersion() == 4) {
             port = 67; //  TODO: find out why port 68 is wrong here.
         }
     }
-    if (options.getIpVersion() == 6) {
-        family = AF_INET6;
-    }
+
     // Local name is specified along with '-l' option.
     // It may point to interface name or local address.
     if (!localname.empty()) {

+ 12 - 0
tests/tools/perfdhcp/tests/test_control_unittest.cc

@@ -672,6 +672,18 @@ TEST_F(TestControlTest, GenerateDuid) {
     testDuid();
 }
 
+TEST_F(TestControlTest, MisMatchVerionServer) {
+    NakedTestControl tc;
+
+    // make sure we catch -6 paired with v4 address
+    ASSERT_NO_THROW(processCmdLine("perfdhcp -l 127.0.0.1 -6 192.168.1.1"));
+    EXPECT_THROW(tc.openSocket(), isc::InvalidParameter);
+
+    // make sure we catch -4 paired with v6 address
+    ASSERT_NO_THROW(processCmdLine("perfdhcp -l 127.0.0.1 -4 ff02::1:2"));
+    EXPECT_THROW(tc.openSocket(), isc::InvalidParameter);
+}
+
 TEST_F(TestControlTest, GenerateMacAddress) {
     // Simulate one client only. Always the same MAC address will be
     // generated.