From: Francis Dupont Date: Fri, 1 Mar 2019 22:55:36 +0000 (+0100) Subject: [481-remote-subnet4-set-inconsistent-work-when-id-subnet-is-duplicated] Added tests... X-Git-Tag: Kea-1.6.0-beta~388 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ecb27f49c3ab6ff984f5cf7461fa6067ab30889c;p=thirdparty%2Fkea.git [481-remote-subnet4-set-inconsistent-work-when-id-subnet-is-duplicated] Added tests and updated schema --- diff --git a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc index 53ea779cd0..eeea6e9aef 100644 --- a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc +++ b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc @@ -633,6 +633,25 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getSubnet4) { AuditEntry::ModificationType::UPDATE, "subnet set"); } + + // Insert another subnet. + cbptr_->createUpdateSubnet4(ServerSelector::ALL(), test_subnets_[2]); + + // Fetch this subnet by prefix and verify it matches. + returned_subnet = cbptr_->getSubnet4(ServerSelector::ALL(), + test_subnets_[2]->toText()); + ASSERT_TRUE(returned_subnet); + EXPECT_EQ(test_subnets_[2]->toElement()->str(), returned_subnet->toElement()->str()); + + // Update the the subnet in the database (both use the same prefix). + subnet2.reset(new Subnet4(IOAddress("192.0.3.0"), 24, 30, 40, 60, 8192)); + cbptr_->createUpdateSubnet4(ServerSelector::ALL(), subnet2); + + // Fetch again and verify. + returned_subnet = cbptr_->getSubnet4(ServerSelector::ALL(), + test_subnets_[2]->toText()); + ASSERT_TRUE(returned_subnet); + EXPECT_EQ(subnet2->toElement()->str(), returned_subnet->toElement()->str()); } // Test that the information about unspecified optional parameters gets diff --git a/src/share/database/scripts/mysql/dhcpdb_create.mysql b/src/share/database/scripts/mysql/dhcpdb_create.mysql index 1e01cdcfa1..6ca8a3eead 100644 --- a/src/share/database/scripts/mysql/dhcpdb_create.mysql +++ b/src/share/database/scripts/mysql/dhcpdb_create.mysql @@ -1908,6 +1908,23 @@ ALTER TABLE dhcp6_shared_network_server REFERENCES dhcp6_shared_network (id) ON DELETE CASCADE ON UPDATE NO ACTION; +-- Update dhcp4_subnet_server and dhcp6_subnet_server to allow update +-- on the prefix too. + +ALTER TABLE dhcp4_subnet_server + DROP FOREIGN KEY fk_dhcp4_subnet_server_subnet_id; +ALTER TABLE dhcp4_subnet_server + ADD CONSTRAINT fk_dhcp4_subnet_server_subnet_id FOREIGN KEY (subnet_id) + REFERENCES dhcp4_subnet (subnet_id) + ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE dhcp6_subnet_server + DROP FOREIGN KEY fk_dhcp6_subnet_server_subnet_id; +ALTER TABLE dhcp6_subnet_server + ADD CONSTRAINT fk_dhcp6_subnet_server_subnet_id FOREIGN KEY (subnet_id) + REFERENCES dhcp6_subnet (subnet_id) + ON DELETE CASCADE ON UPDATE CASCADE; + -- ----------------------------------------------------- -- Table `dhcp6_audit_revision` -- ----------------------------------------------------- diff --git a/src/share/database/scripts/mysql/upgrade_7.0_to_8.0.sh.in b/src/share/database/scripts/mysql/upgrade_7.0_to_8.0.sh.in index c76e94d093..959f4b823a 100644 --- a/src/share/database/scripts/mysql/upgrade_7.0_to_8.0.sh.in +++ b/src/share/database/scripts/mysql/upgrade_7.0_to_8.0.sh.in @@ -590,6 +590,23 @@ ALTER TABLE dhcp6_shared_network_server REFERENCES dhcp6_shared_network (id) ON DELETE CASCADE ON UPDATE NO ACTION; +-- Update dhcp4_subnet_server and dhcp6_subnet_server to allow update +-- on the prefix too. + +ALTER TABLE dhcp4_subnet_server + DROP FOREIGN KEY fk_dhcp4_subnet_server_subnet_id; +ALTER TABLE dhcp4_subnet_server + ADD CONSTRAINT fk_dhcp4_subnet_server_subnet_id FOREIGN KEY (subnet_id) + REFERENCES dhcp4_subnet (subnet_id) + ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE dhcp6_subnet_server + DROP FOREIGN KEY fk_dhcp6_subnet_server_subnet_id; +ALTER TABLE dhcp6_subnet_server + ADD CONSTRAINT fk_dhcp6_subnet_server_subnet_id FOREIGN KEY (subnet_id) + REFERENCES dhcp6_subnet (subnet_id) + ON DELETE CASCADE ON UPDATE CASCADE; + -- ----------------------------------------------------- -- Table dhcp6_audit_revision -- -----------------------------------------------------