@@ -25,6 +25,7 @@ import (
25
25
26
26
"github.com/stretchr/testify/assert"
27
27
gce "google.golang.org/api/compute/v1"
28
+ "google.golang.org/protobuf/proto"
28
29
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider"
29
30
"k8s.io/autoscaler/cluster-autoscaler/utils/units"
30
31
)
33
34
errFetchMig = errors .New ("fetch migs error" )
34
35
errFetchMigInstances = errors .New ("fetch mig instances error" )
35
36
errFetchMigTargetSize = errors .New ("fetch mig target size error" )
37
+ errFetchMigWorkloadPolicy = errors .New ("fetch mig workload policy error" )
36
38
errFetchMigBaseName = errors .New ("fetch mig basename error" )
37
39
errFetchMigTemplateName = errors .New ("fetch mig template name error" )
38
40
errFetchMigTemplate = errors .New ("fetch mig template error" )
@@ -112,6 +114,7 @@ type mockAutoscalingGceClient struct {
112
114
fetchMigs func (string ) ([]* gce.InstanceGroupManager , error )
113
115
fetchAllInstances func (project , zone string , filter string ) ([]GceInstance , error )
114
116
fetchMigTargetSize func (GceRef ) (int64 , error )
117
+ fetchMigWorkloadPolicy func (GceRef ) (* string , error )
115
118
fetchMigBasename func (GceRef ) (string , error )
116
119
fetchMigInstances func (GceRef ) ([]GceInstance , error )
117
120
fetchMigTemplateName func (GceRef ) (InstanceTemplateName , error )
@@ -140,6 +143,10 @@ func (client *mockAutoscalingGceClient) FetchMigTargetSize(migRef GceRef) (int64
140
143
return client .fetchMigTargetSize (migRef )
141
144
}
142
145
146
+ func (client * mockAutoscalingGceClient ) FetchMigWorkloadPolicy (migRef GceRef ) (* string , error ) {
147
+ return client .fetchMigWorkloadPolicy (migRef )
148
+ }
149
+
143
150
func (client * mockAutoscalingGceClient ) FetchMigBasename (migRef GceRef ) (string , error ) {
144
151
return client .fetchMigBasename (migRef )
145
152
}
@@ -863,6 +870,90 @@ func TestGetMigTargetSize(t *testing.T) {
863
870
}
864
871
}
865
872
873
+ func TestGetMigWorkloadPolicy (t * testing.T ) {
874
+ workloadPolicy := proto .String ("wp-123" )
875
+ instanceGroupManager := & gce.InstanceGroupManager {
876
+ Zone : mig .GceRef ().Zone ,
877
+ Name : mig .GceRef ().Name ,
878
+ ResourcePolicies : & gce.InstanceGroupManagerResourcePolicies {
879
+ WorkloadPolicy : * workloadPolicy ,
880
+ },
881
+ }
882
+
883
+ testCases := []struct {
884
+ name string
885
+ cache * GceCache
886
+ fetchMigs func (string ) ([]* gce.InstanceGroupManager , error )
887
+ fetchMigWorkloadPolicy func (GceRef ) (* string , error )
888
+ expectedWorkloadPolicy * string
889
+ expectedErr error
890
+ }{
891
+ {
892
+ name : "workload policy in cache" ,
893
+ cache : & GceCache {
894
+ migs : map [GceRef ]Mig {mig .GceRef (): mig },
895
+ migWorkloadPolicyCache : map [GceRef ]* string {mig .GceRef (): workloadPolicy },
896
+ },
897
+ expectedWorkloadPolicy : workloadPolicy ,
898
+ },
899
+ {
900
+ name : "workload policy from cache fill" ,
901
+ cache : emptyCache (),
902
+ fetchMigs : fetchMigsConst ([]* gce.InstanceGroupManager {instanceGroupManager }),
903
+ expectedWorkloadPolicy : workloadPolicy ,
904
+ },
905
+ {
906
+ name : "cache fill without mig, fallback success" ,
907
+ cache : emptyCache (),
908
+ fetchMigs : fetchMigsConst ([]* gce.InstanceGroupManager {}),
909
+ fetchMigWorkloadPolicy : fetchMigWorkloadPolicyConst (workloadPolicy ),
910
+ expectedWorkloadPolicy : workloadPolicy ,
911
+ },
912
+ {
913
+ name : "cache fill failure, fallback success" ,
914
+ cache : emptyCache (),
915
+ fetchMigs : fetchMigsFail ,
916
+ fetchMigWorkloadPolicy : fetchMigWorkloadPolicyConst (workloadPolicy ),
917
+ expectedWorkloadPolicy : workloadPolicy ,
918
+ },
919
+ {
920
+ name : "cache fill without mig, fallback failure" ,
921
+ cache : emptyCache (),
922
+ fetchMigs : fetchMigsConst ([]* gce.InstanceGroupManager {}),
923
+ fetchMigWorkloadPolicy : fetchMigWorkloadPolicyFail ,
924
+ expectedErr : errFetchMigWorkloadPolicy ,
925
+ },
926
+ {
927
+ name : "cache fill failure, fallback failure" ,
928
+ cache : emptyCache (),
929
+ fetchMigs : fetchMigsFail ,
930
+ fetchMigWorkloadPolicy : fetchMigWorkloadPolicyFail ,
931
+ expectedErr : errFetchMigWorkloadPolicy ,
932
+ },
933
+ }
934
+
935
+ for _ , tc := range testCases {
936
+ t .Run (tc .name , func (t * testing.T ) {
937
+ client := & mockAutoscalingGceClient {
938
+ fetchMigs : tc .fetchMigs ,
939
+ fetchMigWorkloadPolicy : tc .fetchMigWorkloadPolicy ,
940
+ }
941
+ migLister := NewMigLister (tc .cache )
942
+ provider := NewCachingMigInfoProvider (tc .cache , migLister , client , mig .GceRef ().Project , 1 , 0 * time .Second , false )
943
+
944
+ workloadPolicy , err := provider .GetMigWorkloadPolicy (mig .GceRef ())
945
+ cachedWorkloadPolicy , found := tc .cache .GetMigWorkloadPolicy (mig .GceRef ())
946
+
947
+ assert .Equal (t , tc .expectedErr , err )
948
+ assert .Equal (t , tc .expectedErr == nil , found )
949
+ if tc .expectedErr == nil {
950
+ assert .Equal (t , tc .expectedWorkloadPolicy , workloadPolicy )
951
+ assert .Equal (t , tc .expectedWorkloadPolicy , cachedWorkloadPolicy )
952
+ }
953
+ })
954
+ }
955
+ }
956
+
866
957
func TestGetMigBasename (t * testing.T ) {
867
958
basename := "base-instance-name"
868
959
instanceGroupManager := & gce.InstanceGroupManager {
@@ -1921,6 +2012,7 @@ func emptyCache() *GceCache {
1921
2012
instancesUpdateTime : make (map [GceRef ]time.Time ),
1922
2013
migTargetSizeCache : make (map [GceRef ]int64 ),
1923
2014
migBaseNameCache : make (map [GceRef ]string ),
2015
+ migWorkloadPolicyCache : make (map [GceRef ]* string ),
1924
2016
migInstancesStateCountCache : make (map [GceRef ]map [cloudprovider.InstanceState ]int64 ),
1925
2017
listManagedInstancesResultsCache : make (map [GceRef ]string ),
1926
2018
instanceTemplateNameCache : make (map [GceRef ]InstanceTemplateName ),
@@ -1972,10 +2064,20 @@ func fetchMigTargetSizeConst(targetSize int64) func(GceRef) (int64, error) {
1972
2064
}
1973
2065
}
1974
2066
2067
+ func fetchMigWorkloadPolicyFail (_ GceRef ) (* string , error ) {
2068
+ return nil , errFetchMigWorkloadPolicy
2069
+ }
2070
+
1975
2071
func fetchMigBasenameFail (_ GceRef ) (string , error ) {
1976
2072
return "" , errFetchMigBaseName
1977
2073
}
1978
2074
2075
+ func fetchMigWorkloadPolicyConst (workloadPolicy * string ) func (GceRef ) (* string , error ) {
2076
+ return func (GceRef ) (* string , error ) {
2077
+ return workloadPolicy , nil
2078
+ }
2079
+ }
2080
+
1979
2081
func fetchMigBasenameConst (basename string ) func (GceRef ) (string , error ) {
1980
2082
return func (GceRef ) (string , error ) {
1981
2083
return basename , nil
0 commit comments