chore(e2e): Namespace specific k8s resources for tests (#597)

* chore(e2e): Namespace specific k8s resources for tests

 Completes #576
 - For ApiServer source: ClusteRole and ClusterRoleBinding name(s)
   are now test-namespace specific. They are cleared in test's tearDown method.
 - Use constant prefix as:
  clusterRolePrefix        = "apiserver-role-"
  clusterRoleBindingPrefix = "apiserver-binding-"
 - Use constant ServiceAccountName as:
  testServiceAccount = "apiserver-sa"
 - Rename methods and cleanup.

* Use correct format specifier for error as %v instead of %s
This commit is contained in:
Navid Shaikh 2020-01-10 20:20:56 +05:30 committed by Knative Prow Robot
parent ac2170c1e2
commit 6ab9980e16
1 changed files with 34 additions and 17 deletions

View File

@ -18,23 +18,30 @@
package e2e package e2e
import ( import (
"fmt" "strings"
"testing" "testing"
"gotest.tools/assert" "gotest.tools/assert"
"knative.dev/client/pkg/util" "knative.dev/client/pkg/util"
) )
const (
testServiceAccount = "apiserver-sa"
// use following prefix + current namespace to generate ClusterRole and ClusterRoleBinding names
clusterRolePrefix = "apiserver-role-"
clusterRoleBindingPrefix = "apiserver-binding-"
)
func TestSourceApiServer(t *testing.T) { func TestSourceApiServer(t *testing.T) {
t.Parallel() t.Parallel()
test := NewE2eTest(t) test := NewE2eTest(t)
test.Setup(t) test.Setup(t)
defer func() { defer func() {
test.deleteServiceAccountForApiserver(t, "testsa") test.tearDownForSourceApiServer(t)
test.Teardown(t) test.Teardown(t)
}() }()
test.setupServiceAccountForApiserver(t, "testsa") test.setupForSourceApiServer(t)
test.serviceCreate(t, "testsvc0") test.serviceCreate(t, "testsvc0")
t.Run("create apiserver sources with a sink to a service", func(t *testing.T) { t.Run("create apiserver sources with a sink to a service", func(t *testing.T) {
@ -82,37 +89,47 @@ func (test *e2eTest) apiServerSourceDelete(t *testing.T, sourceName string) {
assert.Check(t, util.ContainsAllIgnoreCase(out, "apiserver", "source", sourceName, "deleted", "namespace", test.kn.namespace)) assert.Check(t, util.ContainsAllIgnoreCase(out, "apiserver", "source", sourceName, "deleted", "namespace", test.kn.namespace))
} }
func (test *e2eTest) setupServiceAccountForApiserver(t *testing.T, name string) { func (test *e2eTest) setupForSourceApiServer(t *testing.T) {
kubectl := kubectl{t, Logger{}} kubectl := kubectl{t, Logger{}}
_, err := kubectl.RunWithOpts([]string{"create", "serviceaccount", name, "--namespace", test.kn.namespace}, runOpts{}) saCmd := []string{"create", "serviceaccount", testServiceAccount, "--namespace", test.kn.namespace}
_, err := kubectl.RunWithOpts(saCmd, runOpts{})
if err != nil { if err != nil {
t.Fatalf(fmt.Sprintf("Error executing 'kubectl create serviceaccount test-sa'. Error: %s", err.Error())) t.Fatalf("Error executing '%s'. Error: %v", strings.Join(saCmd, " "), err.Error())
} }
_, err = kubectl.RunWithOpts([]string{"create", "clusterrole", "testsa-role", "--verb=get,list,watch", "--resource=events,namespaces"}, runOpts{})
crCmd := []string{"create", "clusterrole", clusterRolePrefix + test.kn.namespace, "--verb=get,list,watch", "--resource=events,namespaces"}
_, err = kubectl.RunWithOpts(crCmd, runOpts{})
if err != nil { if err != nil {
t.Fatalf(fmt.Sprintf("Error executing 'kubectl create clusterrole testsa-role'. Error: %s", err.Error())) t.Fatalf("Error executing '%s'. Error: %v", strings.Join(crCmd, " "), err.Error())
} }
_, err = kubectl.RunWithOpts([]string{"create", "clusterrolebinding", "testsa-binding", "--clusterrole=testsa-role", "--serviceaccount=" + test.kn.namespace + ":" + name}, runOpts{})
crbCmd := []string{"create", "clusterrolebinding", clusterRoleBindingPrefix + test.kn.namespace, "--clusterrole=" + clusterRolePrefix + test.kn.namespace, "--serviceaccount=" + test.kn.namespace + ":" + testServiceAccount}
_, err = kubectl.RunWithOpts(crbCmd, runOpts{})
if err != nil { if err != nil {
t.Fatalf(fmt.Sprintf("Error executing 'kubectl create clusterrolebinding testsa-binding'. Error: %s", err.Error())) t.Fatalf("Error executing '%s'. Error: %v", strings.Join(crbCmd, " "), err.Error())
} }
} }
func (test *e2eTest) deleteServiceAccountForApiserver(t *testing.T, name string) { func (test *e2eTest) tearDownForSourceApiServer(t *testing.T) {
kubectl := kubectl{t, Logger{}} kubectl := kubectl{t, Logger{}}
_, err := kubectl.RunWithOpts([]string{"delete", "serviceaccount", name, "--namespace", test.kn.namespace}, runOpts{}) saCmd := []string{"delete", "serviceaccount", testServiceAccount, "--namespace", test.kn.namespace}
_, err := kubectl.RunWithOpts(saCmd, runOpts{})
if err != nil { if err != nil {
t.Fatalf(fmt.Sprintf("Error executing 'kubectl delete serviceaccount test-sa'. Error: %s", err.Error())) t.Fatalf("Error executing '%s'. Error: %v", strings.Join(saCmd, " "), err.Error())
} }
_, err = kubectl.RunWithOpts([]string{"delete", "clusterrole", "testsa-role"}, runOpts{})
crCmd := []string{"delete", "clusterrole", clusterRolePrefix + test.kn.namespace}
_, err = kubectl.RunWithOpts(crCmd, runOpts{})
if err != nil { if err != nil {
t.Fatalf(fmt.Sprintf("Error executing 'kubectl delete clusterrole testsa-role'. Error: %s", err.Error())) t.Fatalf("Error executing '%s'. Error: %v", strings.Join(crCmd, " "), err.Error())
} }
_, err = kubectl.RunWithOpts([]string{"delete", "clusterrolebinding", "testsa-binding"}, runOpts{})
crbCmd := []string{"delete", "clusterrolebinding", clusterRoleBindingPrefix + test.kn.namespace}
_, err = kubectl.RunWithOpts(crbCmd, runOpts{})
if err != nil { if err != nil {
t.Fatalf(fmt.Sprintf("Error executing 'kubectl delete clusterrolebinding testsa-binding'. Error: %s", err.Error())) t.Fatalf("Error executing '%s'. Error: %v", strings.Join(crbCmd, " "), err.Error())
} }
} }