From: Marcin Siodelski Date: Tue, 26 Feb 2019 13:27:57 +0000 (+0100) Subject: [#487,!242] Simple optional parameters are unit tested in subnet and netw. X-Git-Tag: 478-improve-error-message-database-backend-mysql_base~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8ceec1b306ba68aaa30eb515573d28d34f377328;p=thirdparty%2Fkea.git [#487,!242] Simple optional parameters are unit tested in subnet and netw. --- diff --git a/src/lib/dhcpsrv/network.h b/src/lib/dhcpsrv/network.h index 4095214d99..804684a9be 100644 --- a/src/lib/dhcpsrv/network.h +++ b/src/lib/dhcpsrv/network.h @@ -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) diff --git a/src/lib/dhcpsrv/subnet.cc b/src/lib/dhcpsrv/subnet.cc index 78f9b9de49..c14c2b3553 100644 --- a/src/lib/dhcpsrv/subnet.cc +++ b/src/lib/dhcpsrv/subnet.cc @@ -247,8 +247,7 @@ Subnet4::Subnet4(const isc::asiolink::IOAddress& prefix, uint8_t length, const Triplet& t2, const Triplet& 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"); diff --git a/src/lib/dhcpsrv/tests/shared_network_unittest.cc b/src/lib/dhcpsrv/tests/shared_network_unittest.cc index cbbc01e51c..7060d7fd02 100644 --- a/src/lib/dhcpsrv/tests/shared_network_unittest.cc +++ b/src/lib/dhcpsrv/tests/shared_network_unittest.cc @@ -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) { diff --git a/src/lib/dhcpsrv/tests/subnet_unittest.cc b/src/lib/dhcpsrv/tests/subnet_unittest.cc index 54a2af4d26..6937d21446 100644 --- a/src/lib/dhcpsrv/tests/subnet_unittest.cc +++ b/src/lib/dhcpsrv/tests/subnet_unittest.cc @@ -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 t1; + Triplet t2; + Triplet 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 t1; + Triplet t2; + Triplet preferred_lft; + Triplet 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) { diff --git a/src/lib/util/optional.h b/src/lib/util/optional.h index 626c5c3b48..3ecb75dadd 100644 --- a/src/lib/util/optional.h +++ b/src/lib/util/optional.h @@ -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 - Optional(A value) - : default_(value), unspecified_(false) { + Optional(A value, const bool unspecified = false) + : default_(value), unspecified_(unspecified) { } /// @brief Retrieves the encapsulated value. diff --git a/src/lib/util/tests/optional_unittest.cc b/src/lib/util/tests/optional_unittest.cc index ebfc2007ca..d76de69d69 100644 --- a/src/lib/util/tests/optional_unittest.cc +++ b/src/lib/util/tests/optional_unittest.cc @@ -25,6 +25,10 @@ TEST(OptionalTest, constructor) { Optional value2; EXPECT_EQ(0, value2.get()); EXPECT_TRUE(value2.unspecified()); + + Optional value3(true, true); + EXPECT_TRUE(value3.get()); + EXPECT_TRUE(value3.unspecified()); } // This test checks if the constructors for a string value