@@ -1590,5 +1590,51 @@ func TestEnsureLoadBalancerSkipped(t *testing.T) {
1590
1590
// No loadbalancer resources will be created due to the ILB Feature Gate
1591
1591
assert .Empty (t , status )
1592
1592
assertInternalLbResourcesDeleted (t , gce , svc , vals , true )
1593
+ }
1594
+
1595
+ // TestEnsureLoadBalancerPartialDelete simulates a partial delete and checks whether deletion completes after a second
1596
+ // attempt.
1597
+ func TestEnsureLoadBalancerPartialDelete (t * testing.T ) {
1598
+ t .Parallel ()
1599
+
1600
+ vals := DefaultTestClusterValues ()
1601
+ nodeNames := []string {"test-node-1" }
1602
+
1603
+ gce , err := fakeGCECloud (vals )
1604
+ require .NoError (t , err )
1593
1605
1606
+ svc := fakeLoadbalancerService (string (LBTypeInternal ))
1607
+ svc , err = gce .client .CoreV1 ().Services (svc .Namespace ).Create (context .TODO (), svc , metav1.CreateOptions {})
1608
+ require .NoError (t , err )
1609
+ status , err := createInternalLoadBalancer (gce , svc , nil , nodeNames , vals .ClusterName , vals .ClusterID , vals .ZoneName )
1610
+ require .NoError (t , err )
1611
+ assert .NotEmpty (t , status .Ingress )
1612
+ assertInternalLbResources (t , gce , svc , vals , nodeNames )
1613
+ svc , err = gce .client .CoreV1 ().Services (svc .Namespace ).Get (context .TODO (), svc .Name , metav1.GetOptions {})
1614
+ require .NoError (t , err )
1615
+ if ! hasFinalizer (svc , ILBFinalizerV1 ) {
1616
+ t .Errorf ("Expected finalizer '%s' not found in Finalizer list - %v" , ILBFinalizerV1 , svc .Finalizers )
1617
+ }
1618
+ // Delete the forwarding rule to simulate controller getting shut down on partial cleanup
1619
+ lbName := gce .GetLoadBalancerName (context .TODO (), "" , svc )
1620
+ err = gce .DeleteRegionForwardingRule (lbName , gce .region )
1621
+ require .NoError (t , err )
1622
+ // Check output of GetLoadBalancer
1623
+ _ , exists , err := gce .GetLoadBalancer (context .TODO (), vals .ClusterName , svc )
1624
+ require .NoError (t , err )
1625
+ assert .True (t , exists )
1626
+ // call EnsureDeleted again
1627
+ err = gce .EnsureLoadBalancerDeleted (context .TODO (), vals .ClusterName , svc )
1628
+ require .NoError (t , err )
1629
+ // Make sure all resources are gone
1630
+ assertInternalLbResourcesDeleted (t , gce , svc , vals , true )
1631
+ // Ensure that the finalizer has been deleted
1632
+ svc , err = gce .client .CoreV1 ().Services (svc .Namespace ).Get (context .TODO (), svc .Name , metav1.GetOptions {})
1633
+ require .NoError (t , err )
1634
+ if hasFinalizer (svc , ILBFinalizerV1 ) {
1635
+ t .Errorf ("Finalizer '%s' not deleted from service - %v" , ILBFinalizerV1 , svc .Finalizers )
1636
+ }
1637
+ _ , exists , err = gce .GetLoadBalancer (context .TODO (), vals .ClusterName , svc )
1638
+ require .NoError (t , err )
1639
+ assert .False (t , exists )
1594
1640
}
0 commit comments