From: Marcin Siodelski Date: Tue, 15 Mar 2016 11:56:15 +0000 (+0100) Subject: [4319] Added new config parser unit test for DHCPv4 and DHCPv6. X-Git-Tag: trac4248_base~2^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=99e0bdcc17997ebb0a0dfda27a7651ab93425ed7;p=thirdparty%2Fkea.git [4319] Added new config parser unit test for DHCPv4 and DHCPv6. These tests check that it is possible to specify options for hosts. --- diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index 6e517dd2f9..e14dfc244a 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2015 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2016 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 @@ -463,6 +463,27 @@ public: CfgMgr::instance().clear(); } + /// @brief Retrieve an option associated with a host. + /// + /// @param host Reference to a host for which an option should be retrieved. + /// @param option_code Option code. + /// @tparam ReturnType Type of the pointer object returned. + /// + /// @return Pointer to an option or NULL if not found. + template + ReturnType + retrieveOption(const Host& host, const uint16_t option_code) const { + ConstCfgOptionPtr cfg_option = host.getCfgOption4(); + if (cfg_option) { + OptionDescriptor opt_desc = cfg_option->get(std::string("dhcp4"), + option_code); + if (opt_desc.option_) { + return (boost::dynamic_pointer_cast< + typename ReturnType::element_type>(opt_desc.option_)); + } + } + return (ReturnType()); + } boost::scoped_ptr srv_; ///< DHCP4 server under test int rcode_; ///< Return code from element parsing @@ -3364,12 +3385,32 @@ TEST_F(Dhcp4ParserTest, reservations) { " {" " \"duid\": \"01:02:03:04:05:06:07:08:09:0A\"," " \"ip-address\": \"192.0.3.112\"," - " \"hostname\": \"\"" + " \"hostname\": \"\"," + " \"option-data\": [" + " {" + " \"name\": \"name-servers\"," + " \"data\": \"192.0.3.15\"" + " }," + " {" + " \"name\": \"default-ip-ttl\"," + " \"data\": \"32\"" + " }" + " ]" " }," " {" " \"hw-address\": \"01:02:03:04:05:06\"," " \"ip-address\": \"192.0.3.120\"," - " \"hostname\": \"\"" + " \"hostname\": \"\"," + " \"option-data\": [" + " {" + " \"name\": \"name-servers\"," + " \"data\": \"192.0.3.95\"" + " }," + " {" + " \"name\": \"default-ip-ttl\"," + " \"data\": \"11\"" + " }" + " ]" " }" " ]," " \"pools\": [ { \"pool\": \"192.0.3.101 - 192.0.3.150\" } ]," @@ -3384,7 +3425,17 @@ TEST_F(Dhcp4ParserTest, reservations) { " {" " \"duid\": \"0A:09:08:07:06:05:04:03:02:01\"," " \"ip-address\": \"192.0.4.101\"," - " \"hostname\": \"\"" + " \"hostname\": \"\"," + " \"option-data\": [" + " {" + " \"name\": \"name-servers\"," + " \"data\": \"192.0.4.11\"" + " }," + " {" + " \"name\": \"default-ip-ttl\"," + " \"data\": \"95\"" + " }" + " ]" " }," " {" " \"hw-address\": \"06:05:04:03:02:01\"," @@ -3428,6 +3479,17 @@ TEST_F(Dhcp4ParserTest, reservations) { // and not to other two. EXPECT_FALSE(hosts_cfg->get4(123, hwaddr)); EXPECT_FALSE(hosts_cfg->get4(542, hwaddr)); + // Check that options are assigned correctly. + Option4AddrLstPtr opt_dns = + retrieveOption(*host, DHO_NAME_SERVERS); + ASSERT_TRUE(opt_dns); + Option4AddrLst::AddressContainer dns_addrs = opt_dns->getAddresses(); + ASSERT_EQ(1, dns_addrs.size()); + EXPECT_EQ("192.0.3.95", dns_addrs[0].toText()); + OptionUint8Ptr opt_ttl = + retrieveOption(*host, DHO_DEFAULT_IP_TTL); + ASSERT_TRUE(opt_ttl); + EXPECT_EQ(11, static_cast(opt_ttl->getValue())); // Do the same test for the DUID based reservation. std::vector duid_vec; @@ -3440,6 +3502,15 @@ TEST_F(Dhcp4ParserTest, reservations) { EXPECT_EQ("192.0.3.112", host->getIPv4Reservation().toText()); EXPECT_FALSE(hosts_cfg->get4(123, HWAddrPtr(), duid)); EXPECT_FALSE(hosts_cfg->get4(542, HWAddrPtr(), duid)); + // Check that options are assigned correctly. + opt_dns = retrieveOption(*host, DHO_NAME_SERVERS); + ASSERT_TRUE(opt_dns); + dns_addrs = opt_dns->getAddresses(); + ASSERT_EQ(1, dns_addrs.size()); + EXPECT_EQ("192.0.3.15", dns_addrs[0].toText()); + opt_ttl = retrieveOption(*host, DHO_DEFAULT_IP_TTL); + ASSERT_TRUE(opt_ttl); + EXPECT_EQ(32, static_cast(opt_ttl->getValue())); // The HW address used for one of the reservations in the subnet 542 // consists of numbers from 6 to 1. So, let's just reverse the order