From: Thomas Markwalder Date: Fri, 2 Feb 2018 20:20:05 +0000 (-0500) Subject: [v1_3_0] Merges in 5416 and 5522 Beanfield patches X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0fb62b7cc8f1c6c1401596c1a48c90ef05640b6f;p=thirdparty%2Fkea.git [v1_3_0] Merges in 5416 and 5522 Beanfield patches --- 0fb62b7cc8f1c6c1401596c1a48c90ef05640b6f diff --cc src/lib/dhcpsrv/pgsql_host_data_source.cc index ef0703f5bc,ead3b672ce..954155e401 --- a/src/lib/dhcpsrv/pgsql_host_data_source.cc +++ b/src/lib/dhcpsrv/pgsql_host_data_source.cc @@@ -1406,7 -1423,7 +1423,7 @@@ TaggedStatementArray tagged_statements // and client's identifier. Left joining the dhcp4_options table results in // multiple rows being returned for the same host. {3, -- { OID_INT4, OID_INT2, OID_BYTEA }, ++ { OID_INT8, OID_INT2, OID_BYTEA }, "get_host_subid4_dhcpid", "SELECT h.host_id, h.dhcp_identifier, h.dhcp_identifier_type, " " h.dhcp4_subnet_id, h.dhcp6_subnet_id, h.ipv4_address, h.hostname, " @@@ -1425,7 -1442,7 +1442,7 @@@ // associated with a host. The number of rows returned is a multiplication // of number of IPv6 reservations and DHCPv6 options. {3, -- { OID_INT4, OID_INT2, OID_BYTEA }, ++ { OID_INT8, OID_INT2, OID_BYTEA }, "get_host_subid6_dhcpid", "SELECT h.host_id, h.dhcp_identifier, " " h.dhcp_identifier_type, h.dhcp4_subnet_id, " @@@ -1449,7 -1466,7 +1466,7 @@@ // results in multiple rows being returned for the host. The number of // rows depends on the number of options defined for the host. {2, -- { OID_INT4, OID_INT8 }, ++ { OID_INT8, OID_INT8 }, "get_host_subid_addr", "SELECT h.host_id, h.dhcp_identifier, h.dhcp_identifier_type, " " h.dhcp4_subnet_id, h.dhcp6_subnet_id, h.ipv4_address, h.hostname, " @@@ -1498,7 -1515,7 +1515,7 @@@ // The number of rows returned is multiplication of number of existing // IPv6 reservations and DHCPv6 options. {2, -- { OID_INT4, OID_VARCHAR }, ++ { OID_INT8, OID_VARCHAR }, "get_host_subid6_addr", "SELECT h.host_id, h.dhcp_identifier, " " h.dhcp_identifier_type, h.dhcp4_subnet_id, " @@@ -1528,7 -1545,7 +1545,7 @@@ // Inserts a host into the 'hosts' table. Returns the inserted host id. {11, { OID_BYTEA, OID_INT2, -- OID_INT4, OID_INT4, OID_INT8, OID_VARCHAR, ++ OID_INT8, OID_INT8, OID_INT8, OID_VARCHAR, OID_VARCHAR, OID_VARCHAR }, "insert_host", "INSERT INTO hosts(dhcp_identifier, dhcp_identifier_type, " @@@ -1575,7 -1592,7 +1592,7 @@@ // PgSqlHostDataSourceImpl::DEL_HOST_ADDR4 // Deletes a v4 host that matches (subnet-id, addr4) {2, -- { OID_INT4, OID_INT8 }, ++ { OID_INT8, OID_INT8 }, "del_host_addr4", "DELETE FROM hosts WHERE dhcp4_subnet_id = $1 AND ipv4_address = $2" }, @@@ -1583,7 -1600,7 +1600,7 @@@ // PgSqlHostDataSourceImpl::DEL_HOST_SUBID4_ID // Deletes a v4 host that matches (subnet4-id, identifier-type, identifier) {3, -- { OID_INT4, OID_INT2, OID_BYTEA }, ++ { OID_INT8, OID_INT2, OID_BYTEA }, "del_host_subid4_id", "DELETE FROM hosts WHERE dhcp4_subnet_id = $1 " "AND dhcp_identifier_type = $2 " @@@ -1593,7 -1610,7 +1610,7 @@@ // PgSqlHostDataSourceImpl::DEL_HOST_SUBID6_ID // Deletes a v6 host that matches (subnet6-id, identifier-type, identifier) {3, -- { OID_INT4, OID_INT2, OID_BYTEA }, ++ { OID_INT8, OID_INT2, OID_BYTEA }, "del_host_subid6_id", "DELETE FROM hosts WHERE dhcp6_subnet_id = $1 " "AND dhcp_identifier_type = $2 " diff --cc src/lib/dhcpsrv/tests/generic_host_data_source_unittest.cc index 75e46c14b4,71f9f46f7e..cf5733dd7b --- a/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.cc @@@ -581,6 -581,6 +581,67 @@@ void GenericHostDataSourceTest::testBas compareHosts(host, from_hds); } ++void GenericHostDataSourceTest::testMaxSubnetId4() { ++ std::vector ident; ++ ++ ident = generateIdentifier(); ++ SubnetID subnet_id4 = numeric_limits::max(); ++ HostPtr host(new Host(&ident[0], ident.size(), Host::IDENT_DUID, ++ subnet_id4, 0, IOAddress("0.0.0.0"))); ++ ++ ASSERT_NO_THROW(addTestOptions(host, true, DHCP4_ONLY)); ++ ASSERT_NO_THROW(hdsptr_->add(host)); ++ ++ // get4(subnet_id, identifier_type, identifier, identifier_size) ++ ConstHostPtr host_by_id = hdsptr_->get4(subnet_id4, ++ host->getIdentifierType(), ++ &host->getIdentifier()[0], ++ host->getIdentifier().size()); ++ ++ ASSERT_NO_FATAL_FAILURE(compareHosts(host, host_by_id)); ++ ++ // Now try to delete it: del4(subnet4-id, identifier-type, identifier) ++ EXPECT_TRUE(hdsptr_->del4(subnet_id4, Host::IDENT_DUID, &ident[0], ++ ident.size())); ++ ++ host_by_id = hdsptr_->get4(subnet_id4, host->getIdentifierType(), ++ &host->getIdentifier()[0], ++ host->getIdentifier().size()); ++ ++ EXPECT_FALSE(host_by_id); ++} ++ ++void GenericHostDataSourceTest::testMaxSubnetId6() { ++ std::vector ident; ++ ++ ident = generateIdentifier(); ++ SubnetID subnet_id6 = numeric_limits::max(); ++ HostPtr host(new Host(&ident[0], ident.size(), Host::IDENT_DUID, ++ 0, subnet_id6, IOAddress("0.0.0.0"))); ++ ++ ASSERT_NO_THROW(addTestOptions(host, true, DHCP6_ONLY)); ++ ASSERT_NO_THROW(hdsptr_->add(host)); ++ ++ // get6(subnet_id, identifier_type, identifier, identifier_size) ++ ConstHostPtr host_by_id = hdsptr_->get6(subnet_id6, ++ host->getIdentifierType(), ++ &host->getIdentifier()[0], ++ host->getIdentifier().size()); ++ ++ ASSERT_NO_FATAL_FAILURE(compareHosts(host, host_by_id)); ++ ++ // Now try to delete it: del6(subnet6-id, identifier-type, identifier) ++ EXPECT_TRUE(hdsptr_->del6(subnet_id6, Host::IDENT_DUID, &ident[0], ++ ident.size())); ++ ++ host_by_id = hdsptr_->get4(subnet_id6, host->getIdentifierType(), ++ &host->getIdentifier()[0], ++ host->getIdentifier().size()); ++ ++ EXPECT_FALSE(host_by_id); ++} ++ ++ void GenericHostDataSourceTest::testGetByIPv4(const Host::IdentifierType& id) { // Make sure we have a pointer to the host data source. diff --cc src/lib/dhcpsrv/tests/generic_host_data_source_unittest.h index c5bef73346,d41d539de1..f578000d26 --- a/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.h +++ b/src/lib/dhcpsrv/tests/generic_host_data_source_unittest.h @@@ -394,6 -394,6 +394,18 @@@ public /// @param id Identifier type. void testBasic4(const Host::IdentifierType& id); ++ /// @brief Test that Verifies that an IPv4 host reservation with ++ /// options can have a max value for dhcp4_subnet id ++ /// ++ /// Uses gtest macros to report failures. ++ void testMaxSubnetId4(); ++ ++ /// @brief Test that Verifies that an IPv6 host reservation with ++ /// options can have a max value for dhcp6_subnet id ++ /// ++ /// Uses gtest macros to report failures. ++ void testMaxSubnetId6(); ++ /// @brief Test inserts several hosts with unique IPv4 address and /// checks that they can be retrieved properly. /// diff --cc src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc index 2ca2b0f67a,da76ca0474..2719e46e80 --- a/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc @@@ -271,6 -271,6 +271,18 @@@ TEST_F(MySqlHostDataSourceTest, basic4H testBasic4(Host::IDENT_HWADDR); } ++// Verifies that IPv4 host reservation with options can have a max value ++// for dhcp4_subnet id ++TEST_F(MySqlHostDataSourceTest, maxSubnetId4) { ++ testMaxSubnetId4(); ++} ++ ++// Verifies that IPv6 host reservation with options can have a max value ++// for dhcp6_subnet id ++TEST_F(MySqlHostDataSourceTest, maxSubnetId6) { ++ testMaxSubnetId6(); ++} ++ // Test verifies if a host reservation can be added and later retrieved by IPv4 // address. Host uses client-id (DUID) as identifier. TEST_F(MySqlHostDataSourceTest, basic4ClientId) { diff --cc src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc index f9aae9d93d,d0dbba5394..d6ac295e79 --- a/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc @@@ -227,6 -227,6 +227,18 @@@ TEST_F(PgSqlHostDataSourceTest, basic4H testBasic4(Host::IDENT_HWADDR); } ++// Verifies that IPv4 host reservation with options can have a max value ++// for dhcp4_subnet id ++TEST_F(PgSqlHostDataSourceTest, maxSubnetId4) { ++ testMaxSubnetId4(); ++} ++ ++// Verifies that IPv6 host reservation with options can have a max value ++// for dhcp6_subnet id ++TEST_F(PgSqlHostDataSourceTest, maxSubnetId6) { ++ testMaxSubnetId6(); ++} ++ // Test verifies if a host reservation can be added and later retrieved by IPv4 // address. Host uses client-id (DUID) as identifier. TEST_F(PgSqlHostDataSourceTest, basic4ClientId) {