]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#487,!242] Simple optional parameters are unit tested in subnet and netw.
authorMarcin Siodelski <marcin@isc.org>
Tue, 26 Feb 2019 13:27:57 +0000 (14:27 +0100)
committerMarcin Siodelski <marcin@isc.org>
Thu, 28 Feb 2019 13:38:18 +0000 (08:38 -0500)
src/lib/dhcpsrv/network.h
src/lib/dhcpsrv/subnet.cc
src/lib/dhcpsrv/tests/shared_network_unittest.cc
src/lib/dhcpsrv/tests/subnet_unittest.cc
src/lib/util/optional.h
src/lib/util/tests/optional_unittest.cc

index 4095214d99152af0087e1bd86723b5ce651b5809..804684a9bea5abffceb1aa23181e036a6d13b3cc 100644 (file)
@@ -118,9 +118,9 @@ public:
 
     /// @brief Constructor.
     Network()
-        : iface_name_(), client_class_(""), t1_(), t2_(), valid_(),
-          host_reservation_mode_(HR_ALL), cfg_option_(new CfgOption()),
-          calculate_tee_times_(false), t1_percent_(0.0), t2_percent_(0.0) {
+        : iface_name_(), client_class_(), t1_(), t2_(), valid_(),
+          host_reservation_mode_(HR_ALL, true), cfg_option_(new CfgOption()),
+          calculate_tee_times_(), t1_percent_(), t2_percent_() {
     }
 
     /// @brief Virtual destructor.
@@ -415,7 +415,7 @@ public:
 
     /// @brief Constructor.
     Network4()
-        : Network(), match_client_id_(true), authoritative_(false) {
+        : Network(), match_client_id_(true, true), authoritative_() {
     }
 
     /// @brief Returns the flag indicating if the client identifiers should
@@ -480,7 +480,7 @@ public:
 
     /// @brief Constructor.
     Network6()
-        : Network(), preferred_(0), interface_id_(), rapid_commit_(false) {
+        : Network(), preferred_(), interface_id_(), rapid_commit_() {
     }
 
     /// @brief Returns preferred lifetime (in seconds)
index 78f9b9de499e83d2319b3286e27c6e997b770ace..c14c2b355321186dae937d88f8307fdb27719c7d 100644 (file)
@@ -247,8 +247,7 @@ Subnet4::Subnet4(const isc::asiolink::IOAddress& prefix, uint8_t length,
                  const Triplet<uint32_t>& t2,
                  const Triplet<uint32_t>& valid_lifetime,
                  const SubnetID id)
-    : Subnet(prefix, length, id), Network4(),
-      siaddr_(IOAddress("0.0.0.0")) {
+    : Subnet(prefix, length, id), Network4(), siaddr_() {
     if (!prefix.isV4()) {
         isc_throw(BadValue, "Non IPv4 prefix " << prefix.toText()
                   << " specified in subnet4");
index cbbc01e51c60acb1de04e20d6ad80caf9fdb6859..7060d7fd02908257cba5570368b2abe400afe375 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2017-2018 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2017-2019 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -22,6 +22,44 @@ using namespace isc::dhcp;
 
 namespace {
 
+// This test verifies the default values set for the shared
+// networks and verifies that the optional values are unspecified.
+TEST(SharedNetwork4Test, defaults) {
+    SharedNetwork4Ptr network(new SharedNetwork4("frog"));
+    EXPECT_TRUE(network->getIface().unspecified());
+    EXPECT_TRUE(network->getIface().empty());
+
+    EXPECT_TRUE(network->getClientClass().unspecified());
+    EXPECT_TRUE(network->getClientClass().empty());
+
+    EXPECT_TRUE(network->getValid().unspecified());
+    EXPECT_EQ(0, network->getValid().get());
+
+    EXPECT_TRUE(network->getT1().unspecified());
+    EXPECT_EQ(0, network->getT1().get());
+
+    EXPECT_TRUE(network->getT2().unspecified());
+    EXPECT_EQ(0, network->getT2().get());
+
+    EXPECT_TRUE(network->getHostReservationMode().unspecified());
+    EXPECT_EQ(Network::HR_ALL, network->getHostReservationMode().get());
+
+    EXPECT_TRUE(network->getCalculateTeeTimes().unspecified());
+    EXPECT_FALSE(network->getCalculateTeeTimes().get());
+
+    EXPECT_TRUE(network->getT1Percent().unspecified());
+    EXPECT_EQ(0.0, network->getT1Percent().get());
+
+    EXPECT_TRUE(network->getT2Percent().unspecified());
+    EXPECT_EQ(0.0, network->getT2Percent().get());
+
+    EXPECT_TRUE(network->getMatchClientId().unspecified());
+    EXPECT_TRUE(network->getMatchClientId().get());
+
+    EXPECT_TRUE(network->getAuthoritative().unspecified());
+    EXPECT_FALSE(network->getAuthoritative().get());
+}
+
 // This test verifies that shared network can be given a name and that
 // this name can be retrieved.
 TEST(SharedNetwork4Test, getName) {
@@ -426,6 +464,44 @@ TEST(SharedNetwork4Test, delAll) {
     ASSERT_EQ(0, network->getAllSubnets()->size());
 }
 
+// This test verifies the default values set for the shared
+// networks and verifies that the optional values are unspecified.
+TEST(SharedNetwork6Test, defaults) {
+    SharedNetwork6Ptr network(new SharedNetwork6("frog"));
+    EXPECT_TRUE(network->getIface().unspecified());
+    EXPECT_TRUE(network->getIface().empty());
+
+    EXPECT_TRUE(network->getClientClass().unspecified());
+    EXPECT_TRUE(network->getClientClass().empty());
+
+    EXPECT_TRUE(network->getValid().unspecified());
+    EXPECT_EQ(0, network->getValid().get());
+
+    EXPECT_TRUE(network->getT1().unspecified());
+    EXPECT_EQ(0, network->getT1().get());
+
+    EXPECT_TRUE(network->getT2().unspecified());
+    EXPECT_EQ(0, network->getT2().get());
+
+    EXPECT_TRUE(network->getHostReservationMode().unspecified());
+    EXPECT_EQ(Network::HR_ALL, network->getHostReservationMode().get());
+
+    EXPECT_TRUE(network->getCalculateTeeTimes().unspecified());
+    EXPECT_FALSE(network->getCalculateTeeTimes().get());
+
+    EXPECT_TRUE(network->getT1Percent().unspecified());
+    EXPECT_EQ(0.0, network->getT1Percent().get());
+
+    EXPECT_TRUE(network->getT2Percent().unspecified());
+    EXPECT_EQ(0.0, network->getT2Percent().get());
+
+    EXPECT_TRUE(network->getPreferred().unspecified());
+    EXPECT_EQ(0, network->getPreferred().get());
+
+    EXPECT_TRUE(network->getRapidCommit().unspecified());
+    EXPECT_FALSE(network->getRapidCommit().get());
+}
+
 // This test verifies that shared network can be given a name and that
 // this name can be retrieved.
 TEST(SharedNetwork6Test, getName) {
index 54a2af4d265f1771ac5043d39f6af8fe18a0865c..6937d21446d0320190b8b43d2132170398fdbfd7 100644 (file)
@@ -43,6 +43,57 @@ TEST(Subnet4Test, constructor) {
                 BadValue); // IPv6 addresses are not allowed in Subnet4
 }
 
+// This test verifies the default values set for the subnets and verifies
+// that the optional values are unspecified.
+TEST(Subnet4Test, defaults) {
+    Triplet<uint32_t> t1;
+    Triplet<uint32_t> t2;
+    Triplet<uint32_t> valid_lft;
+    Subnet4 subnet(IOAddress("192.0.2.0"), 24, t1, t2, valid_lft);
+
+    EXPECT_TRUE(subnet.getIface().unspecified());
+    EXPECT_TRUE(subnet.getIface().empty());
+
+    EXPECT_TRUE(subnet.getClientClass().unspecified());
+    EXPECT_TRUE(subnet.getClientClass().empty());
+
+    EXPECT_TRUE(subnet.getValid().unspecified());
+    EXPECT_EQ(0, subnet.getValid().get());
+
+    EXPECT_TRUE(subnet.getT1().unspecified());
+    EXPECT_EQ(0, subnet.getT1().get());
+
+    EXPECT_TRUE(subnet.getT2().unspecified());
+    EXPECT_EQ(0, subnet.getT2().get());
+
+    EXPECT_TRUE(subnet.getHostReservationMode().unspecified());
+    EXPECT_EQ(Network::HR_ALL, subnet.getHostReservationMode().get());
+
+    EXPECT_TRUE(subnet.getCalculateTeeTimes().unspecified());
+    EXPECT_FALSE(subnet.getCalculateTeeTimes().get());
+
+    EXPECT_TRUE(subnet.getT1Percent().unspecified());
+    EXPECT_EQ(0.0, subnet.getT1Percent().get());
+
+    EXPECT_TRUE(subnet.getT2Percent().unspecified());
+    EXPECT_EQ(0.0, subnet.getT2Percent().get());
+
+    EXPECT_TRUE(subnet.getMatchClientId().unspecified());
+    EXPECT_TRUE(subnet.getMatchClientId().get());
+
+    EXPECT_TRUE(subnet.getAuthoritative().unspecified());
+    EXPECT_FALSE(subnet.getAuthoritative().get());
+
+    EXPECT_TRUE(subnet.getSiaddr().unspecified());
+    EXPECT_TRUE(subnet.getSiaddr().get().isV4Zero());
+
+    EXPECT_TRUE(subnet.getSname().unspecified());
+    EXPECT_TRUE(subnet.getSname().empty());
+
+    EXPECT_TRUE(subnet.getFilename().unspecified());
+    EXPECT_TRUE(subnet.getFilename().empty());
+}
+
 // Checks that the subnet id can be either autogenerated or set to an
 // arbitrary value through the constructor.
 TEST(Subnet4Test, subnetID) {
@@ -688,6 +739,50 @@ TEST(Subnet6Test, constructor) {
                 BadValue); // IPv4 addresses are not allowed in Subnet6
 }
 
+// This test verifies the default values set for the shared
+// networks and verifies that the optional values are unspecified.
+TEST(SharedNetwork6Test, defaults) {
+    Triplet<uint32_t> t1;
+    Triplet<uint32_t> t2;
+    Triplet<uint32_t> preferred_lft;
+    Triplet<uint32_t> valid_lft;
+    Subnet6 subnet(IOAddress("2001:db8:1::"), 64, t1, t2, preferred_lft,
+                   valid_lft);
+
+    EXPECT_TRUE(subnet.getIface().unspecified());
+    EXPECT_TRUE(subnet.getIface().empty());
+
+    EXPECT_TRUE(subnet.getClientClass().unspecified());
+    EXPECT_TRUE(subnet.getClientClass().empty());
+
+    EXPECT_TRUE(subnet.getValid().unspecified());
+    EXPECT_EQ(0, subnet.getValid().get());
+
+    EXPECT_TRUE(subnet.getT1().unspecified());
+    EXPECT_EQ(0, subnet.getT1().get());
+
+    EXPECT_TRUE(subnet.getT2().unspecified());
+    EXPECT_EQ(0, subnet.getT2().get());
+
+    EXPECT_TRUE(subnet.getHostReservationMode().unspecified());
+    EXPECT_EQ(Network::HR_ALL, subnet.getHostReservationMode().get());
+
+    EXPECT_TRUE(subnet.getCalculateTeeTimes().unspecified());
+    EXPECT_FALSE(subnet.getCalculateTeeTimes().get());
+
+    EXPECT_TRUE(subnet.getT1Percent().unspecified());
+    EXPECT_EQ(0.0, subnet.getT1Percent().get());
+
+    EXPECT_TRUE(subnet.getT2Percent().unspecified());
+    EXPECT_EQ(0.0, subnet.getT2Percent().get());
+
+    EXPECT_TRUE(subnet.getPreferred().unspecified());
+    EXPECT_EQ(0, subnet.getPreferred().get());
+
+    EXPECT_TRUE(subnet.getRapidCommit().unspecified());
+    EXPECT_FALSE(subnet.getRapidCommit().get());
+}
+
 // Checks that the subnet id can be either autogenerated or set to an
 // arbitrary value through the constructor.
 TEST(Subnet6Test, subnetID) {
index 626c5c3b480135fc03166aca684723249e772781..3ecb75dadd0b590b0cfe867fe2daf65c738d0aa1 100644 (file)
@@ -86,9 +86,10 @@ public:
     /// @tparam A Type of the value to be assigned. Typically this is @c T, but
     /// may also be a type that can be cast to @c T.
     /// @param value value to be assigned.
+    /// @param unspecified initial state. Default is "unspecified".
     template<typename A>
-    Optional(A value)
-        : default_(value), unspecified_(false) {
+    Optional(A value, const bool unspecified = false)
+        : default_(value), unspecified_(unspecified) {
     }
 
     /// @brief Retrieves the encapsulated value.
index ebfc2007cafe1df0b5a5e83c03b6150273957085..d76de69d69e321dee28b7260214591cfef2fe44b 100644 (file)
@@ -25,6 +25,10 @@ TEST(OptionalTest, constructor) {
     Optional<int> value2;
     EXPECT_EQ(0, value2.get());
     EXPECT_TRUE(value2.unspecified());
+
+    Optional<bool> value3(true, true);
+    EXPECT_TRUE(value3.get());
+    EXPECT_TRUE(value3.unspecified());
 }
 
 // This test checks if the constructors for a string value