1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package jitter_test
16
17 import (
18 "testing"
19 "time"
20
21 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
22 "k8s.io/apimachinery/pkg/runtime/schema"
23
24 iamv1beta1 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/apis/iam/v1beta1"
25 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/controller/jitter"
26 dclmetadata "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/dcl/metadata"
27 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/k8s"
28 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/servicemapping/servicemappingloader"
29 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/test"
30 )
31
32 func TestGenerateTFJitteredReenqueuePeriod(t *testing.T) {
33 t.Parallel()
34 gvk := schema.GroupVersionKind{
35 Group: "test1.cnrm.cloud.google.com",
36 Version: "v1alpha1",
37 Kind: "Test1Foo",
38 }
39
40 smLoader := servicemappingloader.NewFromServiceMappings(test.FakeServiceMappings())
41 duration, err := jitter.GenerateJitteredReenqueuePeriod(gvk, smLoader, nil, &unstructured.Unstructured{})
42 if err != nil {
43 t.Fatalf("got unexpected err %v, expected nil", err)
44 }
45
46 if duration > time.Duration(100)/2*3*time.Second || duration < time.Duration(100)/2*time.Second {
47 t.Fatalf("got unexpected time duration %v for gvk %v", duration, gvk)
48 }
49 }
50
51 func TestGenerateDCLJitteredReenqueuePeriod(t *testing.T) {
52 t.Parallel()
53 gvk := schema.GroupVersionKind{
54 Group: "test2.cnrm.cloud.google.com",
55 Version: "v1beta1",
56 Kind: "Test2Bar",
57 }
58 var desiredIntervalInSeconds uint32 = 100
59
60 serviceList := []dclmetadata.ServiceMetadata{
61 {
62 Name: "Test2",
63 APIVersion: "v1beta1",
64 ServiceNameUsedByDCL: "test2",
65 DCLVersion: "ga",
66 Resources: []dclmetadata.Resource{
67 {
68 Kind: "Test2Bar",
69 ReconciliationIntervalInSeconds: &desiredIntervalInSeconds,
70 },
71 },
72 },
73 }
74
75 serviceMetadataLoader := dclmetadata.NewFromServiceList(serviceList)
76 duration, err := jitter.GenerateJitteredReenqueuePeriod(gvk, nil, serviceMetadataLoader, &unstructured.Unstructured{})
77 if err != nil {
78 t.Fatalf("got unexpected err %v, expected nil", err)
79 }
80
81 if duration > time.Duration(desiredIntervalInSeconds)/2*3*time.Second || duration < time.Duration(desiredIntervalInSeconds)/2*time.Second {
82 t.Fatalf("got unexpected time duration %v for gvk %v", duration, gvk)
83 }
84 }
85
86 func TestGenerateIAMJitteredReenqueuePeriod(t *testing.T) {
87 t.Parallel()
88 gvk := iamv1beta1.IAMPolicyGVK
89
90 duration, err := jitter.GenerateJitteredReenqueuePeriod(gvk, nil, nil, &unstructured.Unstructured{})
91 if err != nil {
92 t.Fatalf("got unexpected err %v, expected nil", err)
93 }
94
95 if duration > k8s.MeanReconcileReenqueuePeriod/2*3 || duration < k8s.MeanReconcileReenqueuePeriod/2 {
96 t.Fatalf("got unexpected time duration %v for gvk %v", duration, gvk)
97 }
98 }
99
100 func TestGenerateJitteredReenqueuePeriodFromAnnotation(t *testing.T) {
101 t.Parallel()
102 gvk := iamv1beta1.IAMPolicyMemberGVK
103 var iamPolicyMember1 iamv1beta1.IAMPolicyMember
104 expectedMeanDurition1 := time.Duration(5) * time.Second
105 k8s.SetAnnotation(k8s.ReconcileIntervalInSecondsAnnotation, "5", &iamPolicyMember1)
106
107 var iamPolicyMember2 iamv1beta1.IAMPolicyMember
108 k8s.SetAnnotation(k8s.ReconcileIntervalInSecondsAnnotation, "0", &iamPolicyMember2)
109
110 var iamPolicyMember3 iamv1beta1.IAMPolicyMember
111 k8s.SetAnnotation(k8s.ReconcileIntervalInSecondsAnnotation, "1.5", &iamPolicyMember3)
112
113 duration, err := jitter.GenerateJitteredReenqueuePeriod(gvk, nil, nil, &iamPolicyMember1)
114 if err != nil {
115 t.Fatalf("got unexpected err %v, expected nil", err)
116 }
117 if duration > expectedMeanDurition1/2*3 || duration < expectedMeanDurition1/2 {
118 t.Fatalf("got unexpected time duration %v for gvk %v", duration, gvk)
119 }
120
121 duration, err = jitter.GenerateJitteredReenqueuePeriod(gvk, nil, nil, &iamPolicyMember2)
122 if err != nil {
123 t.Fatalf("got unexpected err %v, expected nil", err)
124 }
125 if duration != 0 {
126 t.Fatalf("got unexpected time duration %v for gvk %v", duration, gvk)
127 }
128
129 _, err = jitter.GenerateJitteredReenqueuePeriod(gvk, nil, nil, &iamPolicyMember3)
130 if err == nil {
131 t.Fatalf("got nil, expected error %v", err)
132 }
133
134 }
135
136 func TestGenerateDefaultJitteredReenqueuePeriod(t *testing.T) {
137 t.Parallel()
138
139 gvk1 := schema.GroupVersionKind{
140 Group: "test1.cnrm.cloud.google.com",
141 Version: "v1alpha1",
142 Kind: "Test1Bar",
143 }
144
145
146 gvk2 := schema.GroupVersionKind{
147 Group: "dcltest1.cnrm.cloud.google.com",
148 Version: "v1beta1",
149 Kind: "DclTest2Bar",
150 }
151
152
153 gvk3 := schema.GroupVersionKind{
154 Group: "foobar.cnrm.cloud.google.com",
155 Version: "v1beta1",
156 Kind: "FooBarBaz",
157 }
158
159 smLoader := servicemappingloader.NewFromServiceMappings(test.FakeServiceMappings())
160 serviceList := []dclmetadata.ServiceMetadata{
161 {
162 Name: "DclTest1",
163 APIVersion: "v1beta1",
164 ServiceNameUsedByDCL: "DclTest1",
165 DCLVersion: "ga",
166 Resources: []dclmetadata.Resource{
167 {
168 Kind: "DclTest1Bar",
169 },
170 },
171 },
172 }
173
174 serviceMetadataLoader := dclmetadata.NewFromServiceList(serviceList)
175
176
177 duration, err := jitter.GenerateJitteredReenqueuePeriod(gvk1, smLoader, serviceMetadataLoader, &unstructured.Unstructured{})
178 if err != nil {
179 t.Fatalf("got unexpected err %v, expected nil", err)
180 }
181
182 if duration > k8s.MeanReconcileReenqueuePeriod/2*3 || duration < k8s.MeanReconcileReenqueuePeriod/2 {
183 t.Fatalf("got unexpected time duration %v for gvk %v", duration, gvk1)
184 }
185
186
187 duration, err = jitter.GenerateJitteredReenqueuePeriod(gvk2, smLoader, serviceMetadataLoader, &unstructured.Unstructured{})
188 if err != nil {
189 t.Fatalf("got unexpected err %v, expected nil", err)
190 }
191
192 if duration > k8s.MeanReconcileReenqueuePeriod/2*3 || duration < k8s.MeanReconcileReenqueuePeriod/2 {
193 t.Fatalf("got unexpected time duration %v for gvk %v", duration, gvk2)
194 }
195
196
197 duration, err = jitter.GenerateJitteredReenqueuePeriod(gvk3, smLoader, serviceMetadataLoader, &unstructured.Unstructured{})
198 if err != nil {
199 t.Fatalf("got unexpected err %v, expected nil", err)
200 }
201
202 if duration > k8s.MeanReconcileReenqueuePeriod/2*3 || duration < k8s.MeanReconcileReenqueuePeriod/2 {
203 t.Fatalf("got unexpected time duration %v for gvk %v", duration, gvk2)
204 }
205 }
206
View as plain text