Skip to content

Commit 24310cd

Browse files
committed
fix(e2e): Fix several RBAC-related e2e test cases
Create token secret for ServiceAccount to ensure those SA is valid for scoped client use. Signed-off-by: Vu Dinh <[email protected]>
1 parent 6bd3f14 commit 24310cd

5 files changed

+47
-8
lines changed

Diff for: test/e2e/installplan_e2e_test.go

+6
Original file line numberDiff line numberDiff line change
@@ -3709,6 +3709,9 @@ var _ = Describe("Install Plan", func() {
37093709
}
37103710
_, err = c.KubernetesInterface().CoreV1().ServiceAccounts(ns.GetName()).Create(context.Background(), sa, metav1.CreateOptions{})
37113711
Expect(err).ToNot(HaveOccurred())
3712+
// Create token secret for the serviceaccount
3713+
_, cleanupSE := newTokenSecret(c, ns.GetName(), sa.GetName())
3714+
defer cleanupSE()
37123715

37133716
// role has no explicit permissions
37143717
role := &rbacv1.ClusterRole{
@@ -3950,6 +3953,9 @@ var _ = Describe("Install Plan", func() {
39503953
}
39513954
_, err = c.KubernetesInterface().CoreV1().ServiceAccounts(ns.GetName()).Create(context.Background(), sa, metav1.CreateOptions{})
39523955
Expect(err).ToNot(HaveOccurred())
3956+
// Create token secret for the serviceaccount
3957+
_, cleanupSE := newTokenSecret(c, ns.GetName(), sa.GetName())
3958+
defer cleanupSE()
39533959

39543960
// see https://github.com/operator-framework/operator-lifecycle-manager/blob/master/doc/design/scoped-operator-install.md
39553961
role := &rbacv1.ClusterRole{

Diff for: test/e2e/operator_groups_e2e_test.go

+6
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,9 @@ var _ = Describe("Operator Group", func() {
16271627

16281628
_, err = c.CreateServiceAccount(serviceAccount)
16291629
require.NoError(GinkgoT(), err)
1630+
// Create token secret for the serviceaccount
1631+
_, cleanupSE := newTokenSecret(c, newNamespaceName, serviceAccount.GetName())
1632+
defer cleanupSE()
16301633

16311634
log("wait for CSV to fail")
16321635
err = wait.Poll(pollInterval, pollDuration, func() (bool, error) {
@@ -1760,6 +1763,9 @@ var _ = Describe("Operator Group", func() {
17601763

17611764
_, err = c.CreateServiceAccount(serviceAccount)
17621765
require.NoError(GinkgoT(), err)
1766+
// Create token secret for the serviceaccount
1767+
_, cleanupSE := newTokenSecret(c, newNamespaceName, serviceAccount.GetName())
1768+
defer cleanupSE()
17631769

17641770
log("wait for CSV to fail")
17651771
err = wait.Poll(pollInterval, pollDuration, func() (bool, error) {

Diff for: test/e2e/scoped_client_test.go

+3-8
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,9 @@ var _ = Describe("Scoped Client bound to a service account can be used to make A
8585
saName := genName("user-defined-")
8686
sa, cleanupSA := newServiceAccount(kubeclient, namespace, saName)
8787
defer cleanupSA()
88-
89-
By("Wait for ServiceAccount secret to be available")
90-
Eventually(func() (*corev1.ServiceAccount, error) {
91-
sa, err := kubeclient.KubernetesInterface().CoreV1().ServiceAccounts(sa.GetNamespace()).Get(context.TODO(), sa.GetName(), metav1.GetOptions{})
92-
return sa, err
93-
}).ShouldNot(WithTransform(func(v *corev1.ServiceAccount) []corev1.ObjectReference {
94-
return v.Secrets
95-
}, BeEmpty()))
88+
// Create token secret for the serviceaccount
89+
_, cleanupSE := newTokenSecret(kubeclient, namespace, saName)
90+
defer cleanupSE()
9691

9792
strategy := scoped.NewClientAttenuator(logger, config, kubeclient)
9893
getter := func() (reference *corev1.ObjectReference, err error) {

Diff for: test/e2e/user_defined_sa_test.go

+9
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ var _ = Describe("User defined service account", func() {
5454
saName := genName("scoped-sa-")
5555
_, cleanupSA := newServiceAccount(c, generatedNamespace.GetName(), saName)
5656
defer cleanupSA()
57+
// Create token secret for the serviceaccount
58+
_, cleanupSE := newTokenSecret(c, generatedNamespace.GetName(), saName)
59+
defer cleanupSE()
5760

5861
// Add an OperatorGroup and specify the service account.
5962
ogName := genName("scoped-og-")
@@ -104,6 +107,9 @@ var _ = Describe("User defined service account", func() {
104107
saName := genName("scoped-sa")
105108
_, cleanupSA := newServiceAccount(c, generatedNamespace.GetName(), saName)
106109
defer cleanupSA()
110+
// Create token secret for the serviceaccount
111+
_, cleanupSE := newTokenSecret(c, generatedNamespace.GetName(), saName)
112+
defer cleanupSE()
107113
cleanupPerm := grantPermission(GinkgoT(), c, generatedNamespace.GetName(), saName)
108114
defer cleanupPerm()
109115

@@ -153,6 +159,9 @@ var _ = Describe("User defined service account", func() {
153159
saName := genName("scoped-sa-")
154160
_, cleanupSA := newServiceAccount(c, generatedNamespace.GetName(), saName)
155161
defer cleanupSA()
162+
// Create token secret for the serviceaccount
163+
_, cleanupSE := newTokenSecret(c, generatedNamespace.GetName(), saName)
164+
defer cleanupSE()
156165

157166
// Add an OperatorGroup and specify the service account.
158167
ogName := genName("scoped-og-")

Diff for: test/e2e/util.go

+23
Original file line numberDiff line numberDiff line change
@@ -1074,3 +1074,26 @@ func inKind(client operatorclient.ClientInterface) (bool, error) {
10741074
func K8sSafeCurrentTestDescription() string {
10751075
return nonAlphaNumericRegexp.ReplaceAllString(CurrentSpecReport().LeafNodeText, "")
10761076
}
1077+
1078+
func newTokenSecret(client operatorclient.ClientInterface, namespace, saName string) (se *corev1.Secret, cleanup cleanupFunc) {
1079+
seName := saName + "-token"
1080+
secret := &corev1.Secret{
1081+
ObjectMeta: metav1.ObjectMeta{
1082+
Name: seName,
1083+
Namespace: namespace,
1084+
Annotations: map[string]string{corev1.ServiceAccountNameKey: saName},
1085+
},
1086+
Type: corev1.SecretTypeServiceAccountToken,
1087+
}
1088+
1089+
se, err := client.KubernetesInterface().CoreV1().Secrets(namespace).Create(context.TODO(), secret, metav1.CreateOptions{})
1090+
Expect(err).ToNot(HaveOccurred())
1091+
Expect(se).ToNot(BeNil())
1092+
1093+
cleanup = func() {
1094+
err := client.KubernetesInterface().CoreV1().Secrets(namespace).Delete(context.TODO(), se.GetName(), metav1.DeleteOptions{})
1095+
Expect(err).ToNot(HaveOccurred())
1096+
}
1097+
1098+
return se, cleanup
1099+
}

0 commit comments

Comments
 (0)