github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/lib/scoped/token_retriever_test.go (about) 1 package scoped 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 corev1 "k8s.io/api/core/v1" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 ) 10 11 const serviceAccountName = "foo" 12 13 func TestFilterSecretsBySAName(t *testing.T) { 14 tests := []struct { 15 name string 16 secrets *corev1.SecretList 17 wantedSecretNames []string 18 }{ 19 { 20 name: "NoSecretFound", 21 secrets: &corev1.SecretList{ 22 Items: []corev1.Secret{ 23 *newSecret("aSecret"), 24 *newSecret("someSecret"), 25 *newSecret("zSecret"), 26 }, 27 }, 28 wantedSecretNames: []string{}, 29 }, 30 { 31 name: "FirstSecretFound", 32 secrets: &corev1.SecretList{ 33 Items: []corev1.Secret{ 34 *newSecret("aSecret", withAnnotations(map[string]string{corev1.ServiceAccountNameKey: serviceAccountName})), 35 *newSecret("someSecret"), 36 *newSecret("zSecret"), 37 }, 38 }, 39 wantedSecretNames: []string{"aSecret"}, 40 }, 41 { 42 name: "SecondSecretFound", 43 secrets: &corev1.SecretList{ 44 Items: []corev1.Secret{ 45 *newSecret("aSecret"), 46 *newSecret("someSecret", withAnnotations(map[string]string{corev1.ServiceAccountNameKey: serviceAccountName})), 47 *newSecret("zSecret"), 48 }, 49 }, 50 wantedSecretNames: []string{"someSecret"}, 51 }, 52 { 53 name: "ThirdSecretFound", 54 secrets: &corev1.SecretList{ 55 Items: []corev1.Secret{ 56 *newSecret("aSecret"), 57 *newSecret("someSecret"), 58 *newSecret("zSecret", withAnnotations(map[string]string{corev1.ServiceAccountNameKey: serviceAccountName})), 59 }, 60 }, 61 wantedSecretNames: []string{"zSecret"}, 62 }, 63 { 64 name: "TwoSecretsFound", 65 secrets: &corev1.SecretList{ 66 Items: []corev1.Secret{ 67 *newSecret("aSecret"), 68 *newSecret("someSecret", withAnnotations(map[string]string{corev1.ServiceAccountNameKey: serviceAccountName})), 69 *newSecret("zSecret", withAnnotations(map[string]string{corev1.ServiceAccountNameKey: serviceAccountName})), 70 }, 71 }, 72 wantedSecretNames: []string{"someSecret", "zSecret"}, 73 }, 74 { 75 name: "AllSecretsFound", 76 secrets: &corev1.SecretList{ 77 Items: []corev1.Secret{ 78 *newSecret("aSecret", withAnnotations(map[string]string{corev1.ServiceAccountNameKey: serviceAccountName})), 79 *newSecret("someSecret", withAnnotations(map[string]string{corev1.ServiceAccountNameKey: serviceAccountName})), 80 *newSecret("zSecret", withAnnotations(map[string]string{corev1.ServiceAccountNameKey: serviceAccountName})), 81 }, 82 }, 83 wantedSecretNames: []string{"aSecret", "someSecret", "zSecret"}, 84 }, 85 } 86 87 for _, tt := range tests { 88 t.Run(tt.name, func(t *testing.T) { 89 got := filterSecretsBySAName(serviceAccountName, tt.secrets) 90 require.Equal(t, len(tt.wantedSecretNames), len(got)) 91 for _, wantedSecretName := range tt.wantedSecretNames { 92 require.NotNil(t, got[wantedSecretName]) 93 require.Equal(t, wantedSecretName, got[wantedSecretName].GetName()) 94 } 95 }) 96 } 97 } 98 99 type secretOption func(*corev1.Secret) 100 101 func withAnnotations(annotations map[string]string) secretOption { 102 return func(s *corev1.Secret) { 103 s.SetAnnotations(annotations) 104 } 105 } 106 107 func newSecret(name string, opts ...secretOption) *corev1.Secret { 108 s := &corev1.Secret{ 109 ObjectMeta: metav1.ObjectMeta{ 110 Name: name, 111 }, 112 } 113 for _, opt := range opts { 114 opt(s) 115 } 116 return s 117 }