@@ -20,6 +20,7 @@ import (
20
20
"time"
21
21
22
22
"github.com/stretchr/testify/assert"
23
+ v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
23
24
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24
25
"k8s.io/apimachinery/pkg/runtime/schema"
25
26
"k8s.io/apimachinery/pkg/types"
@@ -196,3 +197,105 @@ func TestRootReconciler(t *testing.T) {
196
197
time .Sleep (time .Second )
197
198
assert .Equal (t , "group0" , e .Object .GetName ())
198
199
}
200
+
201
+ func TestOwnedByConfigSyncPredicate (t * testing.T ) {
202
+ type testCase struct {
203
+ name string
204
+ got bool
205
+ want bool
206
+ }
207
+
208
+ ownedByConfigSync := & v1alpha1.ResourceGroup {
209
+ ObjectMeta : metav1.ObjectMeta {
210
+ Labels : map [string ]string {
211
+ "app.kubernetes.io/managed-by" : "configmanagement.gke.io" ,
212
+ },
213
+ Namespace : "foo" ,
214
+ Name : "bar" ,
215
+ },
216
+ }
217
+ ownedByConfigSync .SetGroupVersionKind (v1alpha1 .SchemeGroupVersion .WithKind ("ResourceGroup" ))
218
+
219
+ ownedBySomeoneElse := & v1alpha1.ResourceGroup {
220
+ ObjectMeta : metav1.ObjectMeta {
221
+ Labels : map [string ]string {
222
+ "app.kubernetes.io/managed-by" : "someone-else" ,
223
+ },
224
+ Namespace : "foo" ,
225
+ Name : "bar" ,
226
+ },
227
+ }
228
+ ownedBySomeoneElse .SetGroupVersionKind (v1alpha1 .SchemeGroupVersion .WithKind ("ResourceGroup" ))
229
+
230
+ notOwned := & v1alpha1.ResourceGroup {
231
+ ObjectMeta : metav1.ObjectMeta {
232
+ Namespace : "foo" ,
233
+ Name : "bar" ,
234
+ },
235
+ }
236
+ notOwned .SetGroupVersionKind (v1alpha1 .SchemeGroupVersion .WithKind ("ResourceGroup" ))
237
+
238
+ notResourceGroup := & v1.CustomResourceDefinition {ObjectMeta : metav1.ObjectMeta {Name : "foo" }}
239
+ notResourceGroup .SetGroupVersionKind (v1 .SchemeGroupVersion .WithKind ("CustomResourceDefinition" ))
240
+
241
+ create := func (o client.Object ) bool {
242
+ return OwnedByConfigSyncPredicate {}.Create (
243
+ event.TypedCreateEvent [client.Object ]{Object : o },
244
+ )
245
+ }
246
+ update := func (o client.Object , n client.Object ) bool {
247
+ return OwnedByConfigSyncPredicate {}.Update (
248
+ event.TypedUpdateEvent [client.Object ]{ObjectOld : o , ObjectNew : n },
249
+ )
250
+ }
251
+
252
+ // not allowed to redefine delete, so we use a different name
253
+ yeet := func (o client.Object ) bool {
254
+ return OwnedByConfigSyncPredicate {}.Delete (
255
+ event.TypedDeleteEvent [client.Object ]{Object : o },
256
+ )
257
+ }
258
+
259
+ generic := func (o client.Object ) bool {
260
+ return OwnedByConfigSyncPredicate {}.Generic (
261
+ event.TypedGenericEvent [client.Object ]{Object : o },
262
+ )
263
+ }
264
+
265
+ testCases := []testCase {
266
+ {name : "create owned by configsync" , got : create (ownedByConfigSync ), want : true },
267
+ {name : "create owned by someone else" , got : create (ownedBySomeoneElse ), want : false },
268
+ {name : "create not owned" , got : create (notOwned ), want : false },
269
+ {name : "create non-resourcegroup owned by configsync" , got : create (notResourceGroup ), want : true },
270
+
271
+ {name : "update both owned by configsync" , got : update (ownedByConfigSync , ownedByConfigSync ), want : true },
272
+ {name : "update old owned by configsync, new owned by someone else" , got : update (ownedByConfigSync , ownedBySomeoneElse ), want : true },
273
+ {name : "update old owned by someone else, new owned by configsync" , got : update (ownedBySomeoneElse , ownedByConfigSync ), want : true },
274
+ {name : "update both owned by someone else" , got : update (ownedBySomeoneElse , ownedBySomeoneElse ), want : false },
275
+ {name : "update old not owned, new owned by configsync" , got : update (notOwned , ownedByConfigSync ), want : true },
276
+ {name : "update old owned by configsync, new not owned" , got : update (ownedByConfigSync , notOwned ), want : true },
277
+ {name : "update both not owned" , got : update (notOwned , notOwned ), want : false },
278
+ {name : "update old not owned, new owned by someone else" , got : update (notOwned , ownedBySomeoneElse ), want : false },
279
+ {name : "update old owned by someone else, new not owned" , got : update (ownedBySomeoneElse , notOwned ), want : false },
280
+ {name : "update non-resourcegroup owned by configsync" , got : update (notResourceGroup , notResourceGroup ), want : true },
281
+
282
+ {name : "delete owned by configsync" , got : yeet (ownedByConfigSync ), want : true },
283
+ {name : "delete owned by someone else" , got : yeet (ownedBySomeoneElse ), want : false },
284
+ {name : "delete not owned" , got : yeet (notOwned ), want : false },
285
+ {name : "delete non-resourcegroup owned by configsync" , got : yeet (notResourceGroup ), want : true },
286
+
287
+ {name : "generic owned by configsync" , got : generic (ownedByConfigSync ), want : true },
288
+ {name : "generic owned by someone else" , got : generic (ownedBySomeoneElse ), want : false },
289
+ {name : "generic not owned" , got : generic (notOwned ), want : false },
290
+ {name : "generic non-resourcegroup owned by configsync" , got : generic (notResourceGroup ), want : true },
291
+ }
292
+
293
+ for _ , testCase := range testCases {
294
+ t .Run (testCase .name , func (t * testing.T ) {
295
+ t .Parallel ()
296
+ if testCase .got != testCase .want {
297
+ t .Errorf ("%s = %v, want %v" , testCase .name , testCase .got , testCase .want )
298
+ }
299
+ })
300
+ }
301
+ }
0 commit comments