Commit 973bb3ae authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[3689] Revamped host reservation tests which involve FQDN

fqdn_unittest.cc -
    removed use of createHost6 in host reservation tests.
parent 3e09b745
......@@ -24,6 +24,7 @@
#include <dhcp/option6_iaaddr.h>
#include <dhcp/option_int_array.h>
#include <dhcpsrv/lease.h>
#include <dhcp/tests/iface_mgr_test_config.h>
#include <dhcp6/tests/dhcp6_test_utils.h>
#include <boost/pointer_cast.hpp>
......@@ -484,12 +485,15 @@ public:
/// NameChangeRequest expires.
/// @param len A valid lifetime of the lease associated with the
/// NameChangeRequest.
/// @param fqdn The expected string value of the FQDN, if blank the
/// check is skipped
void verifyNameChangeRequest(const isc::dhcp_ddns::NameChangeType type,
const bool reverse, const bool forward,
const std::string& addr,
const std::string& dhcid,
const uint16_t expires,
const uint16_t len) {
const uint16_t len,
const std::string& fqdn="") {
NameChangeRequestPtr ncr;
ASSERT_NO_THROW(ncr = d2_mgr_.peekAt(0));
ASSERT_TRUE(ncr);
......@@ -503,10 +507,40 @@ public:
EXPECT_EQ(len, ncr->getLeaseLength());
EXPECT_EQ(isc::dhcp_ddns::ST_NEW, ncr->getStatus());
if (! fqdn.empty()) {
EXPECT_EQ(fqdn, ncr->getFqdn());
}
// Process the message off the queue
ASSERT_NO_THROW(d2_mgr_.runReadyIO());
}
/// @brief Updates inherited subnet and pool members
///
/// Hack added to set subnet_ and pool_ members that are buried into lower
/// level tests such as checkLease(), so one can use "configure" functionality
/// rather than hand-building configured objects
/// @param subnet_idx Element index of the desired subnet
/// @param pool_idx Element index of the desired pool within the desired subnet
/// @param type lease type of desired pool
///
void setSubnetAndPool(int subnet_idx, int pool_idx, Lease::Type type) {
ConstCfgSubnets6Ptr subnets = CfgMgr::instance().getCurrentCfg()->getCfgSubnets6();
ASSERT_TRUE(subnets);
const Subnet6Collection* subnet_col = subnets->getAll();
ASSERT_EQ(subnet_idx + 1, subnet_col->size());
subnet_ = subnet_col->at(subnet_idx);
ASSERT_TRUE(subnet_);
const PoolCollection& pool_col = subnet_->getPools(type);
ASSERT_EQ(pool_idx + 1, pool_col.size());
PoolPtr pool = (subnet_->getPools(type)).at(pool_idx);
ASSERT_TRUE(pool);
pool_ = boost::dynamic_pointer_cast<Pool6>(pool);
ASSERT_TRUE(pool);
}
// Holds a lease used by a test.
Lease6Ptr lease_;
......@@ -1057,110 +1091,147 @@ TEST_F(FqdnDhcpv6SrvTest, processClientDelegation) {
// Verify that the host reservation is found and used. Lease host name and
// FQDN should be the reservation hostname suffixed by the qualifying suffix.
TEST_F(FqdnDhcpv6SrvTest, hostnameReservationSuffix) {
// Create host reservation with a partial FQDN for hostname
createHost6(true, IPv6Resrv::TYPE_NA, IOAddress("2001:db8:1:1::babe"),
"alice");
isc::dhcp::test::IfaceMgrTestConfig test_config(true);
string config_str = "{ "
"\"interfaces-config\": {"
" \"interfaces\": [ \"*\" ]"
"},"
"\"valid-lifetime\": 4000, "
"\"preferred-lifetime\": 3000,"
"\"rebind-timer\": 2000, "
"\"renew-timer\": 1000, "
"\"subnet6\": [ "
" { "
" \"subnet\": \"2001:db8:1::/48\", "
" \"pools\": [ { \"pool\": \"2001:db8:1:1::/64\" } ],"
" \"interface\" : \"eth0\" , "
" \"reservations\": ["
" {"
" \"duid\": \"" + duid_->toText() + "\","
" \"ip-addresses\": [ \"2001:db8:1:1::babe\" ],"
" \"hostname\": \"alice\""
" }"
" ]"
" } ],"
" \"dhcp-ddns\" : {"
" \"enable-updates\" : true, "
" \"qualifying-suffix\" : \"example.com\" }"
"}";
configure(config_str);
// Update subnet_ and pool_ members after config
setSubnetAndPool(0, 0, Lease::TYPE_NA);
ASSERT_NO_THROW(srv_->startD2());
ASSERT_TRUE(CfgMgr::instance().ddnsEnabled());
// Verify that the host reservation is found and lease name/FQDN are
// formed properly from the host name and qualifying suffix.
testProcessMessage(DHCPV6_REQUEST, "myhost.example.com",
"alice.example.com.", 0, IOAddress("2001:db8:1:1::babe"));
ASSERT_EQ(1, d2_mgr_.getQueueSize());
"alice.example.com.", 1, IOAddress("2001:db8:1:1::babe"));
// Verify that NameChangeRequest is correct.
verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true,
"2001:db8:1:1::babe",
"000201E2EB74FB53A5778E74AFD43870ECA5"
"4150B1F52B0CFED434802DA1259D6D3CA4",
0, 4000, "alice.example.com.");
}
// Verify that the host reservation is found and used, rather than dynamic
// Address. Lease host name and FQDN should be the reservation hostname
// without a qualifying suffix.
TEST_F(FqdnDhcpv6SrvTest, hostnameReservationNoSuffix) {
isc::dhcp::test::IfaceMgrTestConfig test_config(true);
string config_str = "{ "
"\"interfaces-config\": {"
" \"interfaces\": [ \"*\" ]"
"},"
"\"valid-lifetime\": 4000, "
"\"preferred-lifetime\": 3000,"
"\"valid-lifetime\": 4000,"
"\"rebind-timer\": 2000, "
"\"renew-timer\": 1000, "
"\"subnet6\": [ { "
" \"pools\": [ { \"pool\": \"2001:db8:1::/80\" } ],"
" \"subnet\": \"2001:db8:1::/64\" } ], "
"\"subnet6\": [ "
" { "
" \"subnet\": \"2001:db8:1::/48\", "
" \"pools\": [ { \"pool\": \"2001:db8:1:1::/64\" } ],"
" \"interface\" : \"eth0\" , "
" \"reservations\": ["
" {"
" \"duid\": \"" + duid_->toText() + "\","
" \"ip-addresses\": [ \"2001:db8:1:1::babe\" ],"
" \"hostname\": \"alice.example.com\""
" }"
" ]"
" } ],"
" \"dhcp-ddns\" : {"
" \"enable-updates\" : true, "
" \"server-ip\" : \"::1\", "
" \"server-port\" : 53001, "
" \"sender-ip\" : \"::\", "
" \"sender-port\" : 0, "
" \"max-queue-size\" : 2048, "
" \"ncr-protocol\" : \"UDP\", "
" \"ncr-format\" : \"JSON\", "
" \"always-include-fqdn\" : true, "
" \"allow-client-update\" : true, "
" \"override-no-update\" : true, "
" \"override-client-update\" : true, "
" \"replace-client-name\" : true, "
" \"generated-prefix\" : \"test.prefix\", "
" \"qualifying-suffix\" : \"\" },"
"\"valid-lifetime\": 4000 }";
" \"qualifying-suffix\" : \"\" }"
"}";
configure(config_str);
// Update subnet_ and pool_ members after config
setSubnetAndPool(0, 0, Lease::TYPE_NA);
ASSERT_NO_THROW(srv_->startD2());
ASSERT_TRUE(CfgMgr::instance().ddnsEnabled());
createHost6(true, IPv6Resrv::TYPE_NA, IOAddress("2001:db8:1:1::babe"),
"alice.example.com");
testProcessMessage(DHCPV6_REQUEST, "myhost.example.com",
"alice.example.com.", 0, IOAddress("2001:db8:1:1::babe"));
ASSERT_EQ(1, d2_mgr_.getQueueSize());
"alice.example.com.", 1,
IOAddress("2001:db8:1:1::babe"));
// Verify that NameChangeRequest is correct.
verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true,
"2001:db8:1:1::babe",
"000201E2EB74FB53A5778E74AFD43870ECA5"
"4150B1F52B0CFED434802DA1259D6D3CA4",
0, 4000, "alice.example.com.");
}
// Verify that the host reservation is found and used, rather than dynamic
// Address. Lease host name and FQDN should be the reservation hostname
// with the qualifying suffix even though updates are disabled.
TEST_F(FqdnDhcpv6SrvTest, hostnameReservationDdnsDisabled) {
isc::dhcp::test::IfaceMgrTestConfig test_config(true);
string config_str = "{ "
"\"interfaces-config\": {"
" \"interfaces\": [ \"*\" ]"
"},"
"\"valid-lifetime\": 4000, "
"\"preferred-lifetime\": 3000,"
"\"valid-lifetime\": 4000,"
"\"rebind-timer\": 2000, "
"\"renew-timer\": 1000, "
"\"subnet6\": [ { "
" \"pools\": [ { \"pool\": \"2001:db8:1::/80\" } ],"
" \"subnet\": \"2001:db8:1::/64\" } ], "
"\"subnet6\": [ "
" { "
" \"subnet\": \"2001:db8:1::/48\", "
" \"pools\": [ { \"pool\": \"2001:db8:1:1::/64\" } ],"
" \"interface\" : \"eth0\" , "
" \"reservations\": ["
" {"
" \"duid\": \"" + duid_->toText() + "\","
" \"ip-addresses\": [ \"2001:db8:1:1::babe\" ],"
" \"hostname\": \"alice\""
" }"
" ]"
" } ],"
" \"dhcp-ddns\" : {"
" \"enable-updates\" : false, "
" \"server-ip\" : \"::1\", "
" \"server-port\" : 53001, "
" \"sender-ip\" : \"::\", "
" \"sender-port\" : 0, "
" \"max-queue-size\" : 2048, "
" \"ncr-protocol\" : \"UDP\", "
" \"ncr-format\" : \"JSON\", "
" \"always-include-fqdn\" : true, "
" \"allow-client-update\" : true, "
" \"override-no-update\" : true, "
" \"override-client-update\" : true, "
" \"replace-client-name\" : true, "
" \"generated-prefix\" : \"test.prefix\", "
" \"qualifying-suffix\" : \"disabled.example.com\" },"
"\"valid-lifetime\": 4000 }";
" \"qualifying-suffix\" : \"disabled.example.com\" }"
"}";
configure(config_str);
ASSERT_NO_THROW(srv_->startD2());
// Update subnet_ and pool_ members after config
setSubnetAndPool(0, 0, Lease::TYPE_NA);
ASSERT_FALSE(CfgMgr::instance().ddnsEnabled());
createHost6(true, IPv6Resrv::TYPE_NA, IOAddress("2001:db8:1:1::babe"),
"alice");
testProcessMessage(DHCPV6_REQUEST, "myhost.example.com",
"alice.disabled.example.com.", 0,
"alice.disabled.example.com.", 0,
IOAddress("2001:db8:1:1::babe"));
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment