@@ -351,6 +351,7 @@ func TestBackendSvcEqual(t *testing.T) {
351351 withZonalAffinityEnabled bool
352352 withL4LoggingManagementEnabled bool
353353 wantEqual bool
354+ skipBidirectionalCheck bool
354355 }{
355356 {
356357 desc : "Test empty backend services are equal" ,
@@ -764,7 +765,7 @@ func TestBackendSvcEqual(t *testing.T) {
764765 wantEqual : true ,
765766 },
766767 {
767- desc : "Test existing backend service diff with weighted load balancing feature enabled " ,
768+ desc : "Test prevent unnecessary NetLB recreation " ,
768769 oldBackendService : & composite.BackendService {
769770 LocalityLbPolicy : string (LocalityLBPolicyDefault ),
770771 },
@@ -774,7 +775,17 @@ func TestBackendSvcEqual(t *testing.T) {
774775 wantEqual : true ,
775776 },
776777 {
777- desc : "Test backend service diff with weighted load balancing pods-per-node ENABLED" ,
778+ desc : "Test prevent unsupported disablement of Maglev - NetLB" ,
779+ oldBackendService : & composite.BackendService {
780+ LocalityLbPolicy : string (LocalityLBPolicyMaglev ),
781+ },
782+ newBackendService : & composite.BackendService {
783+ LocalityLbPolicy : string (LocalityLBPolicyDefault ),
784+ },
785+ wantEqual : true ,
786+ },
787+ {
788+ desc : "Test backend service diff with NetLB weighted load balancing pods-per-node ENABLED" ,
778789 oldBackendService : & composite.BackendService {
779790 LocalityLbPolicy : string (LocalityLBPolicyDefault ),
780791 },
@@ -783,6 +794,16 @@ func TestBackendSvcEqual(t *testing.T) {
783794 },
784795 wantEqual : false ,
785796 },
797+ {
798+ desc : "Test backend service diff with ILB weighted load balancing pods-per-node ENABLED" ,
799+ oldBackendService : & composite.BackendService {
800+ LocalityLbPolicy : string (LocalityLBPolicyDefault ),
801+ },
802+ newBackendService : & composite.BackendService {
803+ LocalityLbPolicy : string (LocalityLBPolicyWeightedRendezvous ),
804+ },
805+ wantEqual : false ,
806+ },
786807 {
787808 desc : "Test backend service diff with weighted load balancing pods-per-node DISABLED" ,
788809 oldBackendService : & composite.BackendService {
@@ -794,7 +815,7 @@ func TestBackendSvcEqual(t *testing.T) {
794815 wantEqual : true ,
795816 },
796817 {
797- desc : "Test backend service diff disable weighted load balancing pods-per-node" ,
818+ desc : "Test backend service diff disable NetLB weighted load balancing pods-per-node" ,
798819 oldBackendService : & composite.BackendService {
799820 LocalityLbPolicy : string (LocalityLBPolicyWeightedMaglev ),
800821 },
@@ -803,6 +824,48 @@ func TestBackendSvcEqual(t *testing.T) {
803824 },
804825 wantEqual : false ,
805826 },
827+ {
828+ desc : "Test backend service diff disable ILB weighted load balancing pods-per-node" ,
829+ oldBackendService : & composite.BackendService {
830+ LocalityLbPolicy : string (LocalityLBPolicyWeightedRendezvous ),
831+ },
832+ newBackendService : & composite.BackendService {
833+ LocalityLbPolicy : string (LocalityLBPolicyDefault ),
834+ },
835+ wantEqual : false ,
836+ },
837+ {
838+ desc : "Test backend service diff ILB post-disabling weighted load balancing pods-per-node" ,
839+ oldBackendService : & composite.BackendService {
840+ LocalityLbPolicy : string (LocalityLBPolicyWeightedRendezvous ),
841+ },
842+ newBackendService : & composite.BackendService {
843+ LocalityLbPolicy : string (LocalityLbPolicyRendezvous ),
844+ },
845+ wantEqual : false ,
846+ },
847+ {
848+ desc : "Test prevent ILB resync failure after GCP_RENDEZVOUS is defaulted" ,
849+ oldBackendService : & composite.BackendService {
850+ LocalityLbPolicy : string (LocalityLbPolicyRendezvous ),
851+ },
852+ newBackendService : & composite.BackendService {
853+ LocalityLbPolicy : string (LocalityLBPolicyDefault ),
854+ },
855+ wantEqual : true ,
856+ skipBidirectionalCheck : true ,
857+ },
858+ {
859+ desc : "Test GCP_RENDEZVOUS not set as ILB default" ,
860+ oldBackendService : & composite.BackendService {
861+ LocalityLbPolicy : string (LocalityLBPolicyDefault ),
862+ },
863+ newBackendService : & composite.BackendService {
864+ LocalityLbPolicy : string (LocalityLbPolicyRendezvous ),
865+ },
866+ wantEqual : false ,
867+ skipBidirectionalCheck : true ,
868+ },
806869 {
807870 desc : "Test LocalityLbPolicy equal does not override the other params" ,
808871 oldBackendService : & composite.BackendService {
@@ -949,7 +1012,7 @@ func TestBackendSvcEqual(t *testing.T) {
9491012 t .Errorf ("backendSvcEqual() returned %v, expected %v. Diff(oldScv, newSvc): %s" ,
9501013 result , tc .wantEqual , cmp .Diff (tc .oldBackendService , tc .newBackendService ))
9511014 }
952- if result != backendSvcEqual (tc .oldBackendService , tc .newBackendService , tc .compareConnectionTracking ) {
1015+ if ! tc . skipBidirectionalCheck && result != backendSvcEqual (tc .oldBackendService , tc .newBackendService , tc .compareConnectionTracking ) {
9531016 t .Error ("result from backendSvcEqual(old, new) should be the same as backendSvcEqual(new, old)" )
9541017 }
9551018 })
@@ -964,47 +1027,83 @@ func TestUpdateLocalityLBPolicy(t *testing.T) {
9641027 wantBSLocalityLbPolicy LocalityLBPolicyType
9651028 }{
9661029 {
967- desc : "from empty to WEIGHTED_MAGLEV" ,
1030+ desc : "from MAGLEV to MAGLEV" ,
1031+ existingBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
1032+ updatedBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
1033+ wantBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
1034+ },
1035+ {
1036+ desc : "from empty to WEIGHTED_MAGLEV NetLB" ,
9681037 existingBSLocalityLbPolicy : LocalityLBPolicyDefault ,
9691038 updatedBSLocalityLbPolicy : LocalityLBPolicyWeightedMaglev ,
9701039 wantBSLocalityLbPolicy : LocalityLBPolicyWeightedMaglev ,
9711040 },
9721041 {
973- desc : "from empty to MAGLEV" ,
1042+ desc : "from empty to MAGLEV NetLB " ,
9741043 existingBSLocalityLbPolicy : LocalityLBPolicyDefault ,
9751044 updatedBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
9761045 wantBSLocalityLbPolicy : LocalityLBPolicyDefault ,
9771046 },
9781047 {
979- desc : "from MAGLEV to empty" ,
1048+ desc : "from MAGLEV to empty NetLB " ,
9801049 existingBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
9811050 updatedBSLocalityLbPolicy : LocalityLBPolicyDefault ,
9821051 wantBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
9831052 },
9841053 {
985- desc : "from MAGLEV to MAGLEV" ,
986- existingBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
987- updatedBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
988- wantBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
989- },
990- {
991- desc : "from MAGLEV to WEIGHTED_MAGLEV" ,
1054+ desc : "from MAGLEV to WEIGHTED_MAGLEV NetLB" ,
9921055 existingBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
9931056 updatedBSLocalityLbPolicy : LocalityLBPolicyWeightedMaglev ,
9941057 wantBSLocalityLbPolicy : LocalityLBPolicyWeightedMaglev ,
9951058 },
9961059 {
997- desc : "from WEIGHTED_MAGLEV to MAGLEV" ,
1060+ desc : "from WEIGHTED_MAGLEV to MAGLEV NetLB " ,
9981061 existingBSLocalityLbPolicy : LocalityLBPolicyWeightedMaglev ,
9991062 updatedBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
10001063 wantBSLocalityLbPolicy : LocalityLBPolicyMaglev ,
10011064 },
10021065 {
1003- desc : "from WEIGHTED_MAGLEV to empty" ,
1066+ desc : "from WEIGHTED_MAGLEV to empty ILB - allowlisted " ,
10041067 existingBSLocalityLbPolicy : LocalityLBPolicyWeightedMaglev ,
10051068 updatedBSLocalityLbPolicy : LocalityLBPolicyDefault ,
10061069 wantBSLocalityLbPolicy : LocalityLBPolicyDefault ,
10071070 },
1071+ {
1072+ desc : "from empty to GCP_RENDEZVOUS" ,
1073+ existingBSLocalityLbPolicy : LocalityLBPolicyDefault ,
1074+ updatedBSLocalityLbPolicy : LocalityLbPolicyRendezvous ,
1075+ wantBSLocalityLbPolicy : LocalityLbPolicyRendezvous ,
1076+ },
1077+ {
1078+ desc : "from empty to WEIGHTED_GCP_RENDEZVOUS" ,
1079+ existingBSLocalityLbPolicy : LocalityLBPolicyDefault ,
1080+ updatedBSLocalityLbPolicy : LocalityLBPolicyWeightedRendezvous ,
1081+ wantBSLocalityLbPolicy : LocalityLBPolicyWeightedRendezvous ,
1082+ },
1083+ {
1084+ desc : "from GCP_RENDEZVOUS to empty" ,
1085+ existingBSLocalityLbPolicy : LocalityLbPolicyRendezvous ,
1086+ updatedBSLocalityLbPolicy : LocalityLBPolicyDefault ,
1087+ wantBSLocalityLbPolicy : LocalityLbPolicyRendezvous ,
1088+ },
1089+ {
1090+ desc : "from GCP_RENDEZVOUS to WEIGHTED_GCP_RENDEZVOUS" ,
1091+ existingBSLocalityLbPolicy : LocalityLbPolicyRendezvous ,
1092+ updatedBSLocalityLbPolicy : LocalityLBPolicyWeightedRendezvous ,
1093+ wantBSLocalityLbPolicy : LocalityLBPolicyWeightedRendezvous ,
1094+ },
1095+ {
1096+ desc : "from WEIGHTED_GCP_RENDEZVOUS to GCP_RENDEZVOUS" ,
1097+ existingBSLocalityLbPolicy : LocalityLBPolicyWeightedRendezvous ,
1098+ updatedBSLocalityLbPolicy : LocalityLbPolicyRendezvous ,
1099+ wantBSLocalityLbPolicy : LocalityLbPolicyRendezvous ,
1100+ },
1101+ {
1102+ desc : "from WEIGHTED_GCP_RENDEZVOUS to empty ILB" ,
1103+ existingBSLocalityLbPolicy : LocalityLBPolicyWeightedRendezvous ,
1104+ updatedBSLocalityLbPolicy : LocalityLBPolicyDefault ,
1105+ wantBSLocalityLbPolicy : LocalityLBPolicyDefault ,
1106+ },
10081107 }
10091108
10101109 for _ , tc := range testCases {
0 commit comments