@@ -358,6 +358,63 @@ def test_vpnclient_deleted(self):
358358 )
359359 self .assertEqual (self .ip_query .count (), 0 )
360360
361+ def test_multiple_vpnclient_delete (self ):
362+ """
363+ When a VpnClient object is deleted, it should only delete
364+ the related provisioned subnets.
365+ """
366+ rule = self ._get_vpn_subdivision_rule ()
367+ self .config .templates .add (self .template )
368+ subnet_query = self .subnet_query .filter (organization_id = self .org .id ).exclude (
369+ id = self .master_subnet .id
370+ )
371+ self .config .templates .add (self .template )
372+ self .assertEqual (
373+ subnet_query .count (),
374+ rule .number_of_subnets ,
375+ )
376+ self .assertEqual (
377+ self .ip_query .count (), (rule .number_of_subnets * rule .number_of_ips )
378+ )
379+
380+ # Create another VPN and VPN template and add this
381+ # template to the Config object
382+ vpn2_subnet = self ._create_subnet (subnet = '172.18.0.0/24' )
383+ subnet_query = subnet_query .exclude (id = vpn2_subnet .id )
384+ vpn_server2 = self ._create_wireguard_vpn (
385+ name = 'wg1' ,
386+ subnet = vpn2_subnet ,
387+ organization = self .org ,
388+ )
389+ ip_query = self .ip_query .exclude (id = vpn_server2 .ip_id )
390+ vpn2_template = self ._create_template (
391+ name = 'vpn2-test' , type = 'vpn' , vpn = vpn_server2 , organization = self .org
392+ )
393+ self .config .templates .add (vpn2_template )
394+
395+ # Number of subnets should remain same
396+ self .assertEqual (
397+ subnet_query .count (),
398+ rule .number_of_subnets ,
399+ )
400+ # Number of IPs should increase by one:
401+ # 1 IP for the VpnClient (auto_ip)
402+ self .assertEqual (
403+ ip_query .count (), (rule .number_of_subnets * rule .number_of_ips ) + 1
404+ )
405+
406+ # Remove the template for the second VPN.
407+ # Number of subnets would return to the original numbers
408+ # Number of IPs would stay increased by 1
409+ self .config .templates .remove (vpn2_template )
410+ self .assertEqual (
411+ subnet_query .count (),
412+ rule .number_of_subnets ,
413+ )
414+ self .assertEqual (
415+ ip_query .count (), (rule .number_of_subnets * rule .number_of_ips )
416+ )
417+
361418 @patch ('logging.Logger.error' )
362419 def test_subnets_exhausted (self , mocked_logger ):
363420 subnet = self ._get_master_subnet (
0 commit comments