2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 22:15:23 +00:00

[#1023] Added unit tests and ChangeLog entry

Added a ChangeLog entry

src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc
src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc
    updated copyright year

src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc
    TEST_F(MySqlConfigBackendDHCPv4Test, subnetOptionIdOrder)
    TEST_F(MySqlConfigBackendDHCPv4Test, sharedNetworkOptionIdOrder) -
    new unit tests

src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc
    TEST_F(MySqlConfigBackendDHCPv6Test, subnetOptionIdOrder)
    TEST_F(MySqlConfigBackendDHCPv6Test, sharedNetworkOptionIdOrder) -
    new unit tests
This commit is contained in:
Thomas Markwalder
2020-01-27 09:48:32 -05:00
parent 2be11920ca
commit a882ca5df5
5 changed files with 203 additions and 4 deletions

View File

@@ -1,3 +1,9 @@
1712. [bug] tmark
Corrected an issue in the MySQL CB hook library which could
cause subnet and shared-network options, properly added to
the CB database, to be discarded when fetched from the backend.
(Gitlab #1093)
1711. [func] razvan
Prepared MySqlHostMgr to be used with multi-threading by using a
connection pool with thread context.

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2018-2020 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

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2018-2020 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

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2018-2019 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2018-2020 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
@@ -3995,5 +3995,101 @@ TEST_F(MySqlConfigBackendDHCPv4Test, createUpdateDeleteSharedNetworkOption4) {
EXPECT_EQ(0, countRows("dhcp4_options"));
}
// This test verifies that option id values in one subnet do
// not impact options returned in subsequent subnets when
// fetching subnets from the backend.
TEST_F(MySqlConfigBackendDHCPv4Test, subnetOptionIdOrder) {
// Add a subnet with two pools with one option each.
EXPECT_NO_THROW(cbptr_->createUpdateSubnet4(ServerSelector::ALL(), test_subnets_[1]));
EXPECT_EQ(2, countRows("dhcp4_pool"));
EXPECT_EQ(2, countRows("dhcp4_options"));
// Add a second subnet with a single option. The number of options in the database
// should now be 3.
EXPECT_NO_THROW(cbptr_->createUpdateSubnet4(ServerSelector::ALL(), test_subnets_[2]));
EXPECT_EQ(2, countRows("dhcp4_pool"));
EXPECT_EQ(3, countRows("dhcp4_options"));
// Now replace the first subnet with three options and two pools. This will cause
// the option id values for this subnet to be larger than those in the second
// subnet.
EXPECT_NO_THROW(cbptr_->createUpdateSubnet4(ServerSelector::ALL(), test_subnets_[0]));
EXPECT_EQ(2, countRows("dhcp4_pool"));
EXPECT_EQ(4, countRows("dhcp4_options"));
// Now fetch all subnets.
Subnet4Collection subnets;
EXPECT_NO_THROW(subnets = cbptr_->getAllSubnets4(ServerSelector::ALL()));
ASSERT_EQ(2, subnets.size());
// Verify that the subnets returned are as expected.
for (auto subnet : subnets) {
ASSERT_EQ(1, subnet->getServerTags().size());
EXPECT_EQ("all", subnet->getServerTags().begin()->get());
if (subnet->getID() == 1024) {
EXPECT_EQ(test_subnets_[0]->toElement()->str(), subnet->toElement()->str());
} else if (subnet->getID() == 2048) {
EXPECT_EQ(test_subnets_[2]->toElement()->str(), subnet->toElement()->str());
} else {
ADD_FAILURE() << "unexpected subnet id:" << subnet->getID();
}
}
}
// This test verifies that option id values in one shared network do
// not impact options returned in subsequent shared networks when
// fetching shared networks from the backend.
TEST_F(MySqlConfigBackendDHCPv4Test, sharedNetworkOptionIdOrder) {
auto level1_options = test_networks_[0];
auto level1_no_options = test_networks_[1];
auto level2 = test_networks_[2];
// Insert two shared networks. We inset level1 without options first,
// then level2.
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork4(ServerSelector::ALL(),
level1_no_options));
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork4(ServerSelector::ALL(),
level2));
// Fetch all shared networks.
SharedNetwork4Collection networks =
cbptr_->getAllSharedNetworks4(ServerSelector::ALL());
ASSERT_EQ(2, networks.size());
// See if shared networks are returned ok.
for (auto i = 0; i < networks.size(); ++i) {
if (i == 0) {
// level1_no_options
EXPECT_EQ(level1_no_options->toElement()->str(),
networks[i]->toElement()->str());
} else {
// bar
EXPECT_EQ(level2->toElement()->str(),
networks[i]->toElement()->str());
}
}
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork4(ServerSelector::ALL(),
level1_options));
// Fetch all shared networks.
networks = cbptr_->getAllSharedNetworks4(ServerSelector::ALL());
ASSERT_EQ(2, networks.size());
// See if shared networks are returned ok.
for (auto i = 0; i < networks.size(); ++i) {
if (i == 0) {
// level1_no_options
EXPECT_EQ(level1_options->toElement()->str(),
networks[i]->toElement()->str());
} else {
// bar
EXPECT_EQ(level2->toElement()->str(),
networks[i]->toElement()->str());
}
}
}
}

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2019 Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2019-2020 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
@@ -4170,4 +4170,101 @@ TEST_F(MySqlConfigBackendDHCPv6Test, createUpdateDeleteSharedNetworkOption6) {
EXPECT_EQ(0, countRows("dhcp6_options"));
}
// This test verifies that option id values in one subnet do
// not impact options returned in subsequent subnets when
// fetching subnets from the backend.
TEST_F(MySqlConfigBackendDHCPv6Test, subnetOptionIdOrder) {
// Add a network with two pools with two options each.
EXPECT_NO_THROW(cbptr_->createUpdateSubnet6(ServerSelector::ALL(), test_subnets_[1]));
EXPECT_EQ(2, countRows("dhcp6_pool"));
EXPECT_EQ(4, countRows("dhcp6_options"));
// Add second subnet with a single option. The number of options in the database
// should now be 3.
EXPECT_NO_THROW(cbptr_->createUpdateSubnet6(ServerSelector::ALL(), test_subnets_[2]));
EXPECT_EQ(2, countRows("dhcp6_pool"));
EXPECT_EQ(5, countRows("dhcp6_options"));
// Now replace the first subnet with three options and two pools. This will cause
// the option id values for this subnet to be larger than those in the second
// subnet.
EXPECT_NO_THROW(cbptr_->createUpdateSubnet6(ServerSelector::ALL(), test_subnets_[0]));
EXPECT_EQ(2, countRows("dhcp6_pool"));
EXPECT_EQ(4, countRows("dhcp6_options"));
// Now fetch all subnets.
Subnet6Collection subnets;
EXPECT_NO_THROW(subnets = cbptr_->getAllSubnets6(ServerSelector::ALL()));
ASSERT_EQ(2, subnets.size());
// Verify that the subnets returned are as expected.
for (auto subnet : subnets) {
ASSERT_EQ(1, subnet->getServerTags().size());
EXPECT_EQ("all", subnet->getServerTags().begin()->get());
if (subnet->getID() == 1024) {
EXPECT_EQ(test_subnets_[0]->toElement()->str(), subnet->toElement()->str());
} else if (subnet->getID() == 2048) {
EXPECT_EQ(test_subnets_[2]->toElement()->str(), subnet->toElement()->str());
} else {
ADD_FAILURE() << "unexpected subnet id:" << subnet->getID();
}
}
}
// This test verifies that option id values in one shared network do
// not impact options returned in subsequent shared networks when
// fetching shared networks from the backend.
TEST_F(MySqlConfigBackendDHCPv6Test, sharedNetworkOptionIdOrder) {
auto level1_options = test_networks_[0];
auto level1_no_options = test_networks_[1];
auto level2 = test_networks_[2];
// Insert two shared networks. We inset level1 without options first,
// then level2.
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork6(ServerSelector::ALL(),
level1_no_options));
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork6(ServerSelector::ALL(),
level2));
// Fetch all shared networks.
SharedNetwork6Collection networks =
cbptr_->getAllSharedNetworks6(ServerSelector::ALL());
ASSERT_EQ(2, networks.size());
// See if shared networks are returned ok.
for (auto i = 0; i < networks.size(); ++i) {
if (i == 0) {
// level1_no_options
EXPECT_EQ(level1_no_options->toElement()->str(),
networks[i]->toElement()->str());
} else {
// bar
EXPECT_EQ(level2->toElement()->str(),
networks[i]->toElement()->str());
}
}
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork6(ServerSelector::ALL(),
level1_options));
// Fetch all shared networks.
networks = cbptr_->getAllSharedNetworks6(ServerSelector::ALL());
ASSERT_EQ(2, networks.size());
// See if shared networks are returned ok.
for (auto i = 0; i < networks.size(); ++i) {
if (i == 0) {
// level1_no_options
EXPECT_EQ(level1_options->toElement()->str(),
networks[i]->toElement()->str());
} else {
// bar
EXPECT_EQ(level2->toElement()->str(),
networks[i]->toElement()->str());
}
}
}
}