]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1021] unit tests for unique address
authorWlodek Wencel <wlodek@isc.org>
Mon, 10 Feb 2020 14:17:36 +0000 (15:17 +0100)
committerRazvan Becheriu <razvan@isc.org>
Thu, 20 Feb 2020 06:36:29 +0000 (08:36 +0200)
src/bin/perfdhcp/test_control.h
src/bin/perfdhcp/tests/basic_scen_unittest.cc
src/bin/perfdhcp/tests/command_options_unittest.cc

index aec5488e0a35644f4fe3530cad70cddae2b5eb5b..f048132069b733df7a363a794c20f1fa5af6a067 100644 (file)
@@ -300,6 +300,14 @@ public:
     /// in packet templates and their contents.
     void printTemplates() const;
 
+    std::deque <isc::asiolink::IOAddress> getAllUniqueAddrReply() {
+        return unique_reply_address_;
+    }
+
+    std::deque <isc::asiolink::IOAddress> getAllUniqueAddrAdvert() {
+        return unique_address_;
+    }
+
     // We would really like following methods and members to be private but
     // they have to be accessible for unit-testing. Another, possibly better,
     // solution is to make this class friend of test class but this is not
@@ -619,13 +627,6 @@ protected:
         }
     }
 
-    std::deque <isc::asiolink::IOAddress> getAllUniqueAddrReply() {
-        return unique_reply_address_;
-    }
-
-    std::deque <isc::asiolink::IOAddress> getAllUniqueAddrAdvert() {
-        return unique_address_;
-    }
     /// \brief Process received DHCPv6 packet.
     ///
     /// Method performs processing of the received DHCPv6 packet,
index a5bde10d7d697c3c5041654da5e3b924beead71e..29aa5390daee4c29aebff993932a7d86743429d2 100644 (file)
@@ -241,6 +241,33 @@ TEST_F(BasicScenTest, Packet4Exchange) {
     EXPECT_GE(bs.tc_.getStatsMgr().getRcvdPacketsNum(ExchangeType::RA), 10);
 }
 
+TEST_F(BasicScenTest, Address4Unique) {
+    // send more than 1 discover+request but with the same address
+    // counter of a unique addresses should be 1
+    CommandOptions opt;
+    processCmdLine(opt, "perfdhcp -a -l fake -r 10 -n 10 -g single 127.0.0.1");
+    NakedBasicScen bs(opt);
+    bs.run();
+    EXPECT_GE(bs.fake_sock_.sent_cnt_, 5); // Discovery + Request
+    EXPECT_GE(bs.tc_.getStatsMgr().getRcvdPacketsNum(ExchangeType::DO), 1);
+    EXPECT_GE(bs.tc_.getStatsMgr().getRcvdPacketsNum(ExchangeType::RA), 1);
+    EXPECT_GE(bs.tc_.getAllUniqueAddrReply().size(), 1);
+    EXPECT_GE(bs.tc_.getAllUniqueAddrAdvert().size(), 1);
+}
+
+TEST_F(BasicScenTest, Address6Unique) {
+    // send more than 1 solicit+request but with the same address
+    // counter of a unique addresses should be 1
+    CommandOptions opt;
+    processCmdLine(opt, "perfdhcp -6 -a -l fake -r 10 -n 10 -g single ::1");
+    NakedBasicScen bs(opt);
+    bs.run();
+    EXPECT_GE(bs.fake_sock_.sent_cnt_, 5);
+    EXPECT_GE(bs.tc_.getStatsMgr().getRcvdPacketsNum(ExchangeType::SA), 1);
+    EXPECT_GE(bs.tc_.getStatsMgr().getRcvdPacketsNum(ExchangeType::RR), 1);
+    EXPECT_GE(bs.tc_.getAllUniqueAddrReply().size(), 1);
+    EXPECT_GE(bs.tc_.getAllUniqueAddrAdvert().size(), 1);
+}
 
 TEST_F(BasicScenTest, Packet4ExchangeMaxDrop10Proc) {
     CommandOptions opt;
index 31afddf289d5b7ac511310ba5fdb54d474ba17de..f80b69db1666d116dc5e7afe3512abf3301c0e2d 100644 (file)
@@ -238,6 +238,7 @@ TEST_F(CommandOptionsTest, Defaults) {
     EXPECT_FALSE(opt.isBroadcast());
     EXPECT_FALSE(opt.isRapidCommit());
     EXPECT_FALSE(opt.isUseFirst());
+    EXPECT_FALSE(opt.getAddrUniqe());
     EXPECT_EQ(0, opt.getTemplateFiles().size());
     EXPECT_EQ(0, opt.getTransactionIdOffset().size());
     EXPECT_EQ(0, opt.getRandomOffset().size());
@@ -263,6 +264,12 @@ TEST_F(CommandOptionsTest, HelpVersion) {
     EXPECT_FALSE(process(opt, "perfdhcp -l ethx all"));
 }
 
+TEST_F(CommandOptionsTest, CheckAddressUniqueness) {
+    CommandOptions opt;
+    EXPECT_NO_THROW(process(opt, "perfdhcp -6 -a -l ethx all"));
+    EXPECT_TRUE(opt.getAddrUniqe());
+}
+
 TEST_F(CommandOptionsTest, UseFirst) {
     CommandOptions opt;
     EXPECT_NO_THROW(process(opt, "perfdhcp -1 -B -l ethx all"));