Parcourir la source

[4254] Added sanity checks for ACK from which renewal is generated.

Marcin Siodelski il y a 9 ans
Parent
commit
c1d1c25b10

+ 7 - 0
src/bin/perfdhcp/test_control.cc

@@ -317,6 +317,13 @@ TestControl::checkExitConditions() const {
 
 Pkt4Ptr
 TestControl::createRequestFromAck(const dhcp::Pkt4Ptr& ack) {
+    if (!ack) {
+        isc_throw(isc::BadValue, "Unable to create DHCPREQUEST from a"
+                  " null DHCPACK message");
+    } else if (ack->getYiaddr().isV4Zero()) {
+        isc_throw(isc::BadValue, "Unable to create DHCPREQUEST from a"
+                  " DHCPACK message containing yiaddr of 0");
+    }
     Pkt4Ptr msg(new Pkt4(DHCPREQUEST, generateTransid()));
     msg->setCiaddr(ack->getYiaddr());
     msg->setHWAddr(ack->getHWAddr());

+ 9 - 0
src/bin/perfdhcp/tests/test_control_unittest.cc

@@ -777,6 +777,15 @@ public:
         HWAddrPtr hwaddr_req = request->getHWAddr();
         ASSERT_TRUE(hwaddr_req);
         EXPECT_TRUE(hwaddr_ack->hwaddr_ == hwaddr_req->hwaddr_);
+
+        // Creating message from null DHCPACK should fail.
+        EXPECT_THROW(tc.createRequestFromAck(Pkt4Ptr()), isc::BadValue);
+
+        // Creating message from DHCPACK holding zero yiaddr should fail.
+        asiolink::IOAddress yiaddr = ack->getYiaddr();
+        ack->setYiaddr(asiolink::IOAddress::IPV4_ZERO_ADDRESS());
+        EXPECT_THROW(tc.createRequestFromAck(ack), isc::BadValue);
+        ack->setYiaddr(yiaddr);
     }
 
     /// \brief Test that the DHCPv6 Release or Renew message is created