@@ -10,11 +10,13 @@ import (
10
10
"k8s.io/apimachinery/pkg/runtime"
11
11
"k8s.io/apimachinery/pkg/types"
12
12
k8sfake "k8s.io/client-go/kubernetes/fake"
13
+ apiregv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
13
14
apiregistrationfake "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/fake"
14
15
15
16
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
16
17
operatorsfake "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned/fake"
17
18
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
19
+ "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/ownerutil"
18
20
)
19
21
20
22
func TestCrossOwnerReferenceRemoval (t * testing.T ) {
@@ -352,8 +354,9 @@ func TestCleanupOwnerReferences(t *testing.T) {
352
354
clusterRoleKind := "ClusterRole"
353
355
354
356
type fields struct {
355
- k8sObjs []runtime.Object
356
- clientObjs []runtime.Object
357
+ k8sObjs []runtime.Object
358
+ clientObjs []runtime.Object
359
+ apiServices []runtime.Object
357
360
}
358
361
type expected struct {
359
362
err error
@@ -362,6 +365,7 @@ func TestCleanupOwnerReferences(t *testing.T) {
362
365
clusterRoleBindings []rbacv1.ClusterRoleBinding
363
366
roles []rbacv1.Role
364
367
roleBindings []rbacv1.RoleBinding
368
+ apiServices []apiregv1.APIService
365
369
}
366
370
tests := []struct {
367
371
description string
@@ -381,6 +385,9 @@ func TestCleanupOwnerReferences(t *testing.T) {
381
385
newClusterServiceVersion ("ns-b" , "csv-b" , "csv-b-uid" ),
382
386
newClusterServiceVersion ("ns-a" , "csv-a" , "csv-a-uid" , newOwnerReference (v1alpha1 .ClusterServiceVersionKind , "csv-b-uid" )),
383
387
},
388
+ apiServices : []runtime.Object {
389
+ newAPIService ("apisvc" , "apisvc-a-uid" , nil , newOwnerReference (v1alpha1 .ClusterServiceVersionKind , "csv-b-uid" )),
390
+ },
384
391
},
385
392
expected : expected {
386
393
csvs : []v1alpha1.ClusterServiceVersion {
@@ -399,6 +406,9 @@ func TestCleanupOwnerReferences(t *testing.T) {
399
406
roleBindings : []rbacv1.RoleBinding {
400
407
* newRoleBinding ("ns-a" , "rb" , "rb-a-uid" ),
401
408
},
409
+ apiServices : []apiregv1.APIService {
410
+ * newAPIService ("apisvc" , "apisvc-a-uid" , nil ),
411
+ },
402
412
},
403
413
},
404
414
{
@@ -462,7 +472,7 @@ func TestCleanupOwnerReferences(t *testing.T) {
462
472
for _ , tt := range tests {
463
473
t .Run (tt .description , func (t * testing.T ) {
464
474
k8sClient := k8sfake .NewSimpleClientset (tt .fields .k8sObjs ... )
465
- c := operatorclient .NewClient (k8sClient , apiextensionsfake .NewSimpleClientset (), apiregistrationfake .NewSimpleClientset ())
475
+ c := operatorclient .NewClient (k8sClient , apiextensionsfake .NewSimpleClientset (), apiregistrationfake .NewSimpleClientset (tt . fields . apiServices ... ))
466
476
crc := operatorsfake .NewSimpleClientset (tt .fields .clientObjs ... )
467
477
require .Equal (t , tt .expected .err , cleanupOwnerReferences (c , crc ))
468
478
@@ -486,10 +496,111 @@ func TestCleanupOwnerReferences(t *testing.T) {
486
496
roleBindings , err := c .KubernetesInterface ().RbacV1 ().RoleBindings (metav1 .NamespaceAll ).List (listOpts )
487
497
require .NoError (t , err )
488
498
require .ElementsMatch (t , tt .expected .roleBindings , roleBindings .Items )
499
+
500
+ apiService , err := c .ApiregistrationV1Interface ().ApiregistrationV1 ().APIServices ().List (listOpts )
501
+ require .NoError (t , err )
502
+ require .ElementsMatch (t , tt .expected .apiServices , apiService .Items )
489
503
})
490
504
}
491
505
}
492
506
507
+ func TestCheckAPIServiceLabels (t * testing.T ) {
508
+ type fields struct {
509
+ apiServices []runtime.Object
510
+ }
511
+
512
+ type expected struct {
513
+ err error
514
+ apiServices []apiregv1.APIService
515
+ }
516
+
517
+ tests := []struct {
518
+ description string
519
+ fields fields
520
+ expected expected
521
+ }{
522
+ {
523
+ description : "NoLabel/UpdateAPIService" ,
524
+ fields : fields {
525
+ apiServices : []runtime.Object {
526
+ newAPIService ("v1.packages.operators.coreos.com" , "apisvc-a-uid" , map [string ]string {}),
527
+ },
528
+ },
529
+ expected : expected {
530
+ apiServices : []apiregv1.APIService {
531
+ * newAPIService ("v1.packages.operators.coreos.com" , "apisvc-a-uid" , map [string ]string {ownerutil .OwnerKey : ownerutil .OwnerPackageServer }),
532
+ },
533
+ },
534
+ },
535
+ {
536
+ description : "WrongLabel/UpdateAPIService" ,
537
+ fields : fields {
538
+ apiServices : []runtime.Object {
539
+ newAPIService ("v1.packages.operators.coreos.com" , "apisvc-a-uid" , map [string ]string {ownerutil .OwnerKey : "banana" }),
540
+ },
541
+ },
542
+ expected : expected {
543
+ apiServices : []apiregv1.APIService {
544
+ * newAPIService ("v1.packages.operators.coreos.com" , "apisvc-a-uid" , map [string ]string {ownerutil .OwnerKey : ownerutil .OwnerPackageServer }),
545
+ },
546
+ },
547
+ },
548
+ {
549
+ description : "CorrectLabel/NoUpdate" ,
550
+ fields : fields {
551
+ apiServices : []runtime.Object {
552
+ newAPIService ("v1.packages.operators.coreos.com" , "apisvc-a-uid" , map [string ]string {ownerutil .OwnerKey : ownerutil .OwnerPackageServer }),
553
+ },
554
+ },
555
+ expected : expected {
556
+ apiServices : []apiregv1.APIService {
557
+ * newAPIService ("v1.packages.operators.coreos.com" , "apisvc-a-uid" , map [string ]string {ownerutil .OwnerKey : ownerutil .OwnerPackageServer }),
558
+ },
559
+ },
560
+ },
561
+ {
562
+ description : "WrongAPIService/NoUpdate" ,
563
+ fields : fields {
564
+ apiServices : []runtime.Object {
565
+ newAPIService ("banana" , "apisvc-a-uid" , map [string ]string {ownerutil .OwnerKey : "banana" }),
566
+ },
567
+ },
568
+ expected : expected {
569
+ apiServices : []apiregv1.APIService {
570
+ * newAPIService ("banana" , "apisvc-a-uid" , map [string ]string {ownerutil .OwnerKey : "banana" }),
571
+ },
572
+ },
573
+ },
574
+ {
575
+ description : "NoLabels/Update" ,
576
+ fields : fields {
577
+ apiServices : []runtime.Object {
578
+ newAPIService ("v1.packages.operators.coreos.com" , "apisvc-a-uid" , nil ),
579
+ },
580
+ },
581
+ expected : expected {
582
+ apiServices : []apiregv1.APIService {
583
+ * newAPIService ("v1.packages.operators.coreos.com" , "apisvc-a-uid" , map [string ]string {ownerutil .OwnerKey : ownerutil .OwnerPackageServer }),
584
+ },
585
+ },
586
+ },
587
+ }
588
+
589
+ for _ , tt := range tests {
590
+ t .Run (tt .description , func (t * testing.T ) {
591
+ listOpts := metav1.ListOptions {}
592
+ k8sClient := k8sfake .NewSimpleClientset ()
593
+ c := operatorclient .NewClient (k8sClient , apiextensionsfake .NewSimpleClientset (), apiregistrationfake .NewSimpleClientset (tt .fields .apiServices ... ))
594
+ require .Equal (t , tt .expected .err , ensureAPIServiceLabels (c .ApiregistrationV1Interface ()))
595
+
596
+ apiService , err := c .ApiregistrationV1Interface ().ApiregistrationV1 ().APIServices ().List (listOpts )
597
+ require .NoError (t , err )
598
+ require .ElementsMatch (t , tt .expected .apiServices , apiService .Items )
599
+ })
600
+ }
601
+
602
+ }
603
+
493
604
func newOwnerReference (kind string , uid types.UID ) metav1.OwnerReference {
494
605
return metav1.OwnerReference {
495
606
Kind : kind ,
@@ -540,3 +651,12 @@ func newRoleBinding(namespace, name string, uid types.UID, ownerRefs ...metav1.O
540
651
roleBinding .SetOwnerReferences (ownerRefs )
541
652
return roleBinding
542
653
}
654
+
655
+ func newAPIService (name string , uid types.UID , labels map [string ]string , ownerRefs ... metav1.OwnerReference ) * apiregv1.APIService {
656
+ apiService := & apiregv1.APIService {}
657
+ apiService .SetUID (uid )
658
+ apiService .SetName (name )
659
+ apiService .SetOwnerReferences (ownerRefs )
660
+ apiService .SetLabels (labels )
661
+ return apiService
662
+ }
0 commit comments