github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/lib/scoped/querier_test.go (about) 1 package scoped 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/sirupsen/logrus/hooks/test" 8 "github.com/stretchr/testify/require" 9 corev1 "k8s.io/api/core/v1" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 12 v1 "github.com/operator-framework/api/pkg/operators/v1" 13 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned" 14 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned/fake" 15 ) 16 17 func TestUserDefinedServiceAccountQuerier(t *testing.T) { 18 tests := []struct { 19 name string 20 crclient versioned.Interface 21 namespace string 22 wantReference *corev1.ObjectReference 23 wantErr bool 24 err error 25 }{ 26 { 27 name: "NoOperatorGroup", 28 crclient: fake.NewSimpleClientset(), 29 namespace: "ns", 30 wantErr: true, 31 err: fmt.Errorf("no operator group found that is managing this namespace"), 32 }, 33 { 34 name: "OperatorGroup/NamespaceNotInSpec", 35 crclient: fake.NewSimpleClientset(&v1.OperatorGroup{ 36 ObjectMeta: metav1.ObjectMeta{ 37 Name: "og", 38 Namespace: "ns", 39 }, 40 Spec: v1.OperatorGroupSpec{ 41 TargetNamespaces: []string{"other"}, 42 }, 43 }), 44 namespace: "ns", 45 wantErr: true, 46 err: fmt.Errorf("no operator group found that is managing this namespace"), 47 }, 48 { 49 name: "OperatorGroup/NamespaceNotInStatus", 50 crclient: fake.NewSimpleClientset(&v1.OperatorGroup{ 51 ObjectMeta: metav1.ObjectMeta{ 52 Name: "og", 53 Namespace: "ns", 54 }, 55 Spec: v1.OperatorGroupSpec{ 56 TargetNamespaces: []string{"ns"}, 57 }, 58 }), 59 namespace: "ns", 60 wantErr: true, 61 err: fmt.Errorf("no operator group found that is managing this namespace"), 62 }, 63 { 64 name: "OperatorGroup/Multiple", 65 crclient: fake.NewSimpleClientset( 66 &v1.OperatorGroup{ 67 ObjectMeta: metav1.ObjectMeta{ 68 Name: "og", 69 Namespace: "ns", 70 }, 71 Spec: v1.OperatorGroupSpec{ 72 TargetNamespaces: []string{"ns"}, 73 }, 74 Status: v1.OperatorGroupStatus{ 75 Namespaces: []string{"ns"}, 76 }, 77 }, 78 &v1.OperatorGroup{ 79 ObjectMeta: metav1.ObjectMeta{ 80 Name: "og2", 81 Namespace: "ns", 82 }, 83 Spec: v1.OperatorGroupSpec{ 84 TargetNamespaces: []string{"ns"}, 85 }, 86 Status: v1.OperatorGroupStatus{ 87 Namespaces: []string{"ns"}, 88 }, 89 }, 90 ), 91 namespace: "ns", 92 wantErr: true, 93 err: fmt.Errorf("more than one operator group(s) are managing this namespace count=2"), 94 }, 95 { 96 name: "OperatorGroup/NamespaceInStatus/NoSA", 97 crclient: fake.NewSimpleClientset(&v1.OperatorGroup{ 98 ObjectMeta: metav1.ObjectMeta{ 99 Name: "og", 100 Namespace: "ns", 101 }, 102 Spec: v1.OperatorGroupSpec{ 103 TargetNamespaces: []string{"ns"}, 104 }, 105 Status: v1.OperatorGroupStatus{ 106 Namespaces: []string{"ns"}, 107 }, 108 }), 109 namespace: "ns", 110 wantErr: false, 111 err: nil, 112 }, 113 { 114 name: "OperatorGroup/NamespaceInStatus/ServiceAccountRef", 115 crclient: fake.NewSimpleClientset(&v1.OperatorGroup{ 116 ObjectMeta: metav1.ObjectMeta{ 117 Name: "og", 118 Namespace: "ns", 119 }, 120 Spec: v1.OperatorGroupSpec{ 121 TargetNamespaces: []string{"ns"}, 122 ServiceAccountName: "sa", 123 }, 124 Status: v1.OperatorGroupStatus{ 125 Namespaces: []string{"ns"}, 126 ServiceAccountRef: &corev1.ObjectReference{ 127 Kind: "ServiceAccount", 128 Namespace: "ns", 129 Name: "sa", 130 }, 131 }, 132 }), 133 namespace: "ns", 134 wantErr: false, 135 err: nil, 136 wantReference: &corev1.ObjectReference{ 137 Kind: "ServiceAccount", 138 Namespace: "ns", 139 Name: "sa", 140 }, 141 }, 142 } 143 for _, tt := range tests { 144 t.Run(tt.name, func(t *testing.T) { 145 logger, _ := test.NewNullLogger() 146 f := &UserDefinedServiceAccountQuerier{ 147 crclient: tt.crclient, 148 logger: logger, 149 } 150 gotReference, err := f.NamespaceQuerier(tt.namespace)() 151 if tt.wantErr { 152 require.Equal(t, tt.err.Error(), err.Error()) 153 } else { 154 require.Nil(t, tt.err) 155 } 156 require.Equal(t, tt.wantReference, gotReference) 157 }) 158 } 159 }