@@ -8,15 +8,17 @@ import (
8
8
"github.com/sirupsen/logrus/hooks/test"
9
9
"github.com/stretchr/testify/assert"
10
10
"github.com/stretchr/testify/require"
11
- "k8s.io/client-go/metadata/metadatalister"
12
-
11
+ rbacv1 "k8s.io/api/rbac/v1"
13
12
"k8s.io/apimachinery/pkg/api/errors"
14
13
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
14
"k8s.io/apimachinery/pkg/labels"
15
+ "k8s.io/client-go/metadata/metadatalister"
16
16
ktesting "k8s.io/client-go/testing"
17
17
18
18
"github.com/operator-framework/api/pkg/operators/v1alpha1"
19
19
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned/fake"
20
+ "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver/cache"
21
+ "github.com/operator-framework/operator-registry/pkg/registry"
20
22
)
21
23
22
24
func TestCopyToNamespace (t * testing.T ) {
@@ -407,3 +409,69 @@ func TestCSVCopyPrototype(t *testing.T) {
407
409
},
408
410
}, dst )
409
411
}
412
+
413
+ func TestOperator_getClusterRoleAggregationRule (t * testing.T ) {
414
+ type args struct {
415
+ apis cache.APISet
416
+ suffix string
417
+ }
418
+ tests := []struct {
419
+ name string
420
+ apis cache.APISet
421
+ suffix string
422
+ want func (* testing.T , * rbacv1.AggregationRule )
423
+ wantErr require.ErrorAssertionFunc
424
+ }{
425
+ {
426
+ name : "no aggregation rule when no APIs" ,
427
+ apis : cache.APISet {},
428
+ suffix : "admin" ,
429
+ want : func (t * testing.T , rule * rbacv1.AggregationRule ) {
430
+ require .Nil (t , rule )
431
+ },
432
+ wantErr : require .NoError ,
433
+ },
434
+ {
435
+ name : "ordered selectors in aggregation rule" ,
436
+ apis : cache.APISet {
437
+ registry.APIKey {Group : "example.com" , Version : "v1alpha1" , Kind : "Foo" }: {},
438
+ registry.APIKey {Group : "example.com" , Version : "v1alpha2" , Kind : "Foo" }: {},
439
+ registry.APIKey {Group : "example.com" , Version : "v1alpha3" , Kind : "Foo" }: {},
440
+ registry.APIKey {Group : "example.com" , Version : "v1alpha4" , Kind : "Foo" }: {},
441
+ registry.APIKey {Group : "example.com" , Version : "v1alpha5" , Kind : "Foo" }: {},
442
+ registry.APIKey {Group : "example.com" , Version : "v1alpha1" , Kind : "Bar" }: {},
443
+ registry.APIKey {Group : "example.com" , Version : "v1alpha2" , Kind : "Bar" }: {},
444
+ registry.APIKey {Group : "example.com" , Version : "v1alpha3" , Kind : "Bar" }: {},
445
+ registry.APIKey {Group : "example.com" , Version : "v1alpha4" , Kind : "Bar" }: {},
446
+ registry.APIKey {Group : "example.com" , Version : "v1alpha5" , Kind : "Bar" }: {},
447
+ },
448
+ suffix : "admin" ,
449
+ want : func (t * testing.T , rule * rbacv1.AggregationRule ) {
450
+ getOneKey := func (t * testing.T , m map [string ]string ) string {
451
+ require .Len (t , m , 1 )
452
+ for k := range m {
453
+ return k
454
+ }
455
+ t .Fatalf ("no keys found in map" )
456
+ return ""
457
+ }
458
+
459
+ a := getOneKey (t , rule .ClusterRoleSelectors [0 ].MatchLabels )
460
+ for _ , selector := range rule .ClusterRoleSelectors [1 :] {
461
+ b := getOneKey (t , selector .MatchLabels )
462
+ require .Lessf (t , a , b , "expected selector match labels keys to be in sorted ascending order" )
463
+ a = b
464
+ }
465
+ },
466
+ wantErr : require .NoError ,
467
+ },
468
+ }
469
+ for _ , tt := range tests {
470
+ t .Run (tt .name , func (t * testing.T ) {
471
+ a := & Operator {}
472
+ got , err := a .getClusterRoleAggregationRule (tt .apis , tt .suffix )
473
+ tt .wantErr (t , err )
474
+ tt .want (t , got )
475
+ })
476
+ }
477
+ }
0 commit comments