From 7c601002304e1f2227e45386d77f4e0b00886267 Mon Sep 17 00:00:00 2001 From: Navid Shaikh Date: Wed, 13 May 2020 20:20:18 +0530 Subject: [PATCH 1/5] fix(e2e): Create next namespace if one exists Do not error out if the namespace to run e2e into exists, try creating next one in row. Retry at 20 next namespaces, before erroring out. --- lib/test/integration.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/test/integration.go b/lib/test/integration.go index 0e8574cfb6..a062774a13 100644 --- a/lib/test/integration.go +++ b/lib/test/integration.go @@ -46,13 +46,22 @@ type KnTest struct { // NewKnTest creates a new KnTest object func NewKnTest() (*KnTest, error) { - ns := NextNamespace() - - err := CreateNamespace(ns) - if err != nil { - return nil, err + ns := "" + // try next 20 namespace before giving up creating a namespace if it already exists + for i := 0; i < 20; i++ { + ns = NextNamespace() + err := CreateNamespace(ns) + if err == nil { + break + } + if strings.Contains(err.Error(), "AlreadyExists") { + continue + } else { + return nil, err + } } - err = WaitForNamespaceCreated(ns) + + err := WaitForNamespaceCreated(ns) if err != nil { return nil, err } From 2b48afce56a775347b4a18ce6bdcd88601f20431 Mon Sep 17 00:00:00 2001 From: Navid Shaikh Date: Wed, 13 May 2020 20:24:08 +0530 Subject: [PATCH 2/5] Tag plugin tests as !serving and !eventing --- test/e2e/plugins_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/e2e/plugins_test.go b/test/e2e/plugins_test.go index d893a3e04c..b1d01b9a3f 100644 --- a/test/e2e/plugins_test.go +++ b/test/e2e/plugins_test.go @@ -13,6 +13,8 @@ // limitations under the License. // +build e2e +// +build !eventing +// +build !serving package e2e From 8b45fcef4dd8c8ccf3d52d9b73bd37d976c1ca43 Mon Sep 17 00:00:00 2001 From: Navid Shaikh Date: Wed, 13 May 2020 21:14:21 +0530 Subject: [PATCH 3/5] Debug: Create a test namespace to see if its skipped --- test/e2e-tests.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/e2e-tests.sh b/test/e2e-tests.sh index 80f6c54000..f9f32ee4b3 100755 --- a/test/e2e-tests.sh +++ b/test/e2e-tests.sh @@ -52,6 +52,7 @@ run() { integration_test() { header "Running tests for Knative Serving $KNATIVE_SERVING_VERSION and Eventing $KNATIVE_EVENTING_VERSION" + kubectl create namespace kne2etests0 go_test_e2e -timeout=45m ./test/e2e || fail_test } @@ -92,4 +93,4 @@ smoke_test() { } # Fire up -run $@ \ No newline at end of file +run $@ From d4293d850756d2fe9189aded1225912416359f08 Mon Sep 17 00:00:00 2001 From: Navid Shaikh Date: Thu, 14 May 2020 00:24:21 +0530 Subject: [PATCH 4/5] Revert "Debug: Create a test namespace to see if its skipped" This reverts commit 8b45fcef4dd8c8ccf3d52d9b73bd37d976c1ca43. --- test/e2e-tests.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/e2e-tests.sh b/test/e2e-tests.sh index f9f32ee4b3..80f6c54000 100755 --- a/test/e2e-tests.sh +++ b/test/e2e-tests.sh @@ -52,7 +52,6 @@ run() { integration_test() { header "Running tests for Knative Serving $KNATIVE_SERVING_VERSION and Eventing $KNATIVE_EVENTING_VERSION" - kubectl create namespace kne2etests0 go_test_e2e -timeout=45m ./test/e2e || fail_test } @@ -93,4 +92,4 @@ smoke_test() { } # Fire up -run $@ +run $@ \ No newline at end of file From 451fd49b5014efc0382aef7bdc592d1660e4d96e Mon Sep 17 00:00:00 2001 From: Navid Shaikh Date: Thu, 14 May 2020 00:58:58 +0530 Subject: [PATCH 5/5] Refactor file utils from e2e tests to test lib --- lib/test/utils.go | 19 ++++++++++++++++++- test/e2e/plugins_test.go | 19 +++++-------------- test/e2e/sinkprefix_test.go | 2 +- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/lib/test/utils.go b/lib/test/utils.go index 890b307873..93878ae6f4 100644 --- a/lib/test/utils.go +++ b/lib/test/utils.go @@ -14,7 +14,17 @@ package test -import "testing" +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" +) + +const ( + FileModeReadWrite = 0666 + FileModeExecutable = 0777 +) // GetResourceFieldsWithJSONPath returns output of given JSON path for given resource using kubectl and error if any func GetResourceFieldsWithJSONPath(t *testing.T, it *KnTest, resource, name, jsonpath string) (string, error) { @@ -25,3 +35,10 @@ func GetResourceFieldsWithJSONPath(t *testing.T, it *KnTest, resource, name, jso return out, nil } + +// CreateFile creates a file with given name, content, path, fileMode and returns absolute filepath and error if any +func CreateFile(fileName, fileContent, filePath string, fileMode os.FileMode) (string, error) { + file := filepath.Join(filePath, fileName) + err := ioutil.WriteFile(file, []byte(fileContent), fileMode) + return file, err +} diff --git a/test/e2e/plugins_test.go b/test/e2e/plugins_test.go index b1d01b9a3f..53b7bff4ae 100644 --- a/test/e2e/plugins_test.go +++ b/test/e2e/plugins_test.go @@ -37,9 +37,6 @@ const ( echo "Hello Knative, I'm a Kn plugin" echo " My plugin file is $0" echo " I received arguments: $1 $2 $3 $4"` - - FileModeReadWrite = 0666 - FileModeExecutable = 0777 ) type pluginTestConfig struct { @@ -55,27 +52,27 @@ func (pc *pluginTestConfig) setup() error { } pc.knPluginsDir = filepath.Join(pc.knConfigDir, "plugins") - err = os.MkdirAll(pc.knPluginsDir, FileModeExecutable) + err = os.MkdirAll(pc.knPluginsDir, test.FileModeExecutable) if err != nil { return err } pc.knPluginsDir2 = filepath.Join(pc.knConfigDir, "plugins2") - err = os.MkdirAll(pc.knPluginsDir2, FileModeExecutable) + err = os.MkdirAll(pc.knPluginsDir2, test.FileModeExecutable) if err != nil { return err } - pc.knConfigPath, err = createPluginFile("config.yaml", "", pc.knConfigDir, FileModeReadWrite) + pc.knConfigPath, err = test.CreateFile("config.yaml", "", pc.knConfigDir, test.FileModeReadWrite) if err != nil { return err } - pc.knPluginPath, err = createPluginFile("kn-helloe2e", TestPluginCode, pc.knPluginsDir, FileModeExecutable) + pc.knPluginPath, err = test.CreateFile("kn-helloe2e", TestPluginCode, pc.knPluginsDir, test.FileModeExecutable) if err != nil { return err } - pc.knPluginPath2, err = createPluginFile("kn-hello2e2e", TestPluginCode, pc.knPluginsDir2, FileModeExecutable) + pc.knPluginPath2, err = test.CreateFile("kn-hello2e2e", TestPluginCode, pc.knPluginsDir2, test.FileModeExecutable) if err != nil { return err } @@ -86,12 +83,6 @@ func (pc *pluginTestConfig) teardown() { os.RemoveAll(pc.knConfigDir) } -func createPluginFile(fileName, fileContent, filePath string, fileMode os.FileMode) (string, error) { - file := filepath.Join(filePath, fileName) - err := ioutil.WriteFile(file, []byte(fileContent), fileMode) - return file, err -} - func TestPluginWithoutLookup(t *testing.T) { t.Parallel() diff --git a/test/e2e/sinkprefix_test.go b/test/e2e/sinkprefix_test.go index 7020413502..91d2d1242c 100644 --- a/test/e2e/sinkprefix_test.go +++ b/test/e2e/sinkprefix_test.go @@ -47,7 +47,7 @@ func (tc *sinkprefixTestConfig) setup() error { if err != nil { return err } - tc.knConfigPath, err = createPluginFile("config.yaml", KnConfigContent, tc.knConfigDir, FileModeReadWrite) + tc.knConfigPath, err = test.CreateFile("config.yaml", KnConfigContent, tc.knConfigDir, test.FileModeReadWrite) if err != nil { return err }