mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-30 13:37:55 +00:00
[#680,!426] Delete embedded shared network options when network is deleted.
This commit is contained in:
parent
e88273f6de
commit
d16a20bae6
@ -2754,6 +2754,29 @@ TEST_F(MySqlConfigBackendDHCPv4Test, sharedNetworkLifetime) {
|
||||
returned_network->toElement()->str());
|
||||
}
|
||||
|
||||
// Test that deleting a shared network triggers deletion of the options
|
||||
// associated with the shared network.
|
||||
TEST_F(MySqlConfigBackendDHCPv4Test, sharedNetworkOptions) {
|
||||
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork4(ServerSelector::ALL(), test_networks_[0]));
|
||||
EXPECT_EQ(3, countRows("dhcp4_options"));
|
||||
|
||||
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork4(ServerSelector::ALL(), test_networks_[1]));
|
||||
EXPECT_EQ(0, countRows("dhcp4_options"));
|
||||
|
||||
EXPECT_NO_THROW(cbptr_->deleteSharedNetwork4(ServerSelector::ALL(),
|
||||
test_networks_[1]->getName()));
|
||||
EXPECT_EQ(0, countRows("dhcp4_shared_network"));
|
||||
EXPECT_EQ(0, countRows("dhcp4_options"));
|
||||
|
||||
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork4(ServerSelector::ALL(), test_networks_[0]));
|
||||
EXPECT_EQ(3, countRows("dhcp4_options"));
|
||||
|
||||
EXPECT_NO_THROW(cbptr_->deleteSharedNetwork4(ServerSelector::ALL(),
|
||||
test_networks_[0]->getName()));
|
||||
EXPECT_EQ(0, countRows("dhcp4_shared_network"));
|
||||
EXPECT_EQ(0, countRows("dhcp4_options"));
|
||||
}
|
||||
|
||||
// Test that option definition can be inserted, fetched, updated and then
|
||||
// fetched again.
|
||||
TEST_F(MySqlConfigBackendDHCPv4Test, getOptionDef4) {
|
||||
|
@ -2772,6 +2772,29 @@ TEST_F(MySqlConfigBackendDHCPv6Test, sharedNetworkLifetime) {
|
||||
returned_network->toElement()->str());
|
||||
}
|
||||
|
||||
// Test that deleting a shared network triggers deletion of the options
|
||||
// associated with the shared network.
|
||||
TEST_F(MySqlConfigBackendDHCPv6Test, sharedNetworkOptions) {
|
||||
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork6(ServerSelector::ALL(), test_networks_[0]));
|
||||
EXPECT_EQ(3, countRows("dhcp6_options"));
|
||||
|
||||
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork6(ServerSelector::ALL(), test_networks_[1]));
|
||||
EXPECT_EQ(0, countRows("dhcp6_options"));
|
||||
|
||||
EXPECT_NO_THROW(cbptr_->deleteSharedNetwork6(ServerSelector::ALL(),
|
||||
test_networks_[1]->getName()));
|
||||
EXPECT_EQ(0, countRows("dhcp6_shared_network"));
|
||||
EXPECT_EQ(0, countRows("dhcp6_options"));
|
||||
|
||||
EXPECT_NO_THROW(cbptr_->createUpdateSharedNetwork6(ServerSelector::ALL(), test_networks_[0]));
|
||||
EXPECT_EQ(3, countRows("dhcp6_options"));
|
||||
|
||||
EXPECT_NO_THROW(cbptr_->deleteSharedNetwork6(ServerSelector::ALL(),
|
||||
test_networks_[0]->getName()));
|
||||
EXPECT_EQ(0, countRows("dhcp6_shared_network"));
|
||||
EXPECT_EQ(0, countRows("dhcp6_options"));
|
||||
}
|
||||
|
||||
// Test that option definition can be inserted, fetched, updated and then
|
||||
// fetched again.
|
||||
TEST_F(MySqlConfigBackendDHCPv6Test, getOptionDef6) {
|
||||
|
@ -2377,17 +2377,19 @@ SET version = '8', minor = '1';
|
||||
|
||||
# This line concludes database upgrade to version 8.1.
|
||||
|
||||
# Do not perform cascade deletion of the data in the dhcp4_pool because
|
||||
# the cascade deletion does not execute triggers associated with the table.
|
||||
# Instead we are going to use triggers on the dhcp4_subnet table.
|
||||
ALTER TABLE dhcp4_pool
|
||||
DROP FOREIGN KEY fk_dhcp4_pool_subnet_id;
|
||||
|
||||
ALTER TABLE dhcp4_pool
|
||||
ADD CONSTRAINT fk_dhcp4_pool_subnet_id FOREIGN KEY (subnet_id)
|
||||
REFERENCES dhcp4_subnet (subnet_id)
|
||||
ON DELETE NO ACTION ON UPDATE CASCADE;
|
||||
# Drop existing trigger on the dhcp4_shared_network table.
|
||||
DROP TRIGGER dhcp4_shared_network_ADEL;
|
||||
|
||||
# Create new trigger which will delete options associated with the shared
|
||||
# network.
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER dhcp4_shared_network_BDEL BEFORE DELETE ON dhcp4_shared_network
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL createAuditEntryDHCP4('dhcp4_shared_network', OLD.id, "delete");
|
||||
DELETE FROM dhcp4_options WHERE shared_network_name = OLD.name;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
# Drop existing trigger on the dhcp4_subnet table.
|
||||
DROP TRIGGER dhcp4_subnet_ADEL;
|
||||
@ -2404,6 +2406,47 @@ CREATE TRIGGER dhcp4_subnet_BDEL BEFORE DELETE ON dhcp4_subnet
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
# Do not perform cascade deletion of the data in the dhcp4_pool because
|
||||
# the cascade deletion does not execute triggers associated with the table.
|
||||
# Instead we are going to use triggers on the dhcp4_subnet table.
|
||||
ALTER TABLE dhcp4_pool
|
||||
DROP FOREIGN KEY fk_dhcp4_pool_subnet_id;
|
||||
|
||||
ALTER TABLE dhcp4_pool
|
||||
ADD CONSTRAINT fk_dhcp4_pool_subnet_id FOREIGN KEY (subnet_id)
|
||||
REFERENCES dhcp4_subnet (subnet_id)
|
||||
ON DELETE NO ACTION ON UPDATE CASCADE;
|
||||
|
||||
# Drop existing trigger on the dhcp6_shared_network table.
|
||||
DROP TRIGGER dhcp6_shared_network_ADEL;
|
||||
|
||||
# Create new trigger which will delete options associated with the shared
|
||||
# network.
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER dhcp6_shared_network_BDEL BEFORE DELETE ON dhcp6_shared_network
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL createAuditEntryDHCP6('dhcp6_shared_network', OLD.id, "delete");
|
||||
DELETE FROM dhcp6_options WHERE shared_network_name = OLD.name;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
# Drop existing trigger on the dhcp6_subnet table.
|
||||
DROP TRIGGER dhcp6_subnet_ADEL;
|
||||
|
||||
# Create new trigger which will delete pools associated with the subnet and
|
||||
# the options associated with the subnet.
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER dhcp6_subnet_BDEL BEFORE DELETE ON dhcp6_subnet
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL createAuditEntryDHCP6('dhcp6_subnet', OLD.subnet_id, "delete");
|
||||
DELETE FROM dhcp6_pool WHERE subnet_id = OLD.subnet_id;
|
||||
DELETE FROM dhcp6_pd_pool WHERE subnet_id = OLD.subnet_id;
|
||||
DELETE FROM dhcp6_options WHERE dhcp6_subnet_id = OLD.subnet_id;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
# Do not perform cascade deletion of the data in the dhcp6_pool and dhcp6_pd_pool
|
||||
# because the cascaded deletion does not execute triggers associated with the table.
|
||||
# Instead we are going to use triggers on the dhcp6_subnet table.
|
||||
@ -2433,23 +2476,6 @@ END
|
||||
$$
|
||||
DELIMITER ;
|
||||
|
||||
# Drop existing trigger on the dhcp6_subnet table.
|
||||
DROP TRIGGER dhcp6_subnet_ADEL;
|
||||
|
||||
# Create new trigger which will delete pools associated with the subnet and
|
||||
# the options associated with the subnet.
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER dhcp6_subnet_BDEL BEFORE DELETE ON dhcp6_subnet
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
CALL createAuditEntryDHCP6('dhcp6_subnet', OLD.subnet_id, "delete");
|
||||
DELETE FROM dhcp6_pool WHERE subnet_id = OLD.subnet_id;
|
||||
DELETE FROM dhcp6_pd_pool WHERE subnet_id = OLD.subnet_id;
|
||||
DELETE FROM dhcp6_options WHERE dhcp6_subnet_id = OLD.subnet_id;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
|
||||
# Update the schema version number
|
||||
UPDATE schema_version
|
||||
SET version = '8', minor = '2';
|
||||
|
Loading…
x
Reference in New Issue
Block a user