From 03ecb3644078156c1cbba2a71e37d4e39cd61662 Mon Sep 17 00:00:00 2001 From: Martin Gencur Date: Fri, 26 Jul 2019 08:46:43 +0200 Subject: [PATCH] Add E2E tests for Service, Revision, Route (#291) * Add E2E tests for Service, revision, route * service, revision, route describe and describe with print flags * route list with print flags * service create for a duplicate service * Test serviceDeleteNonexistent and fixes --- test/e2e/basic_workflow_test.go | 75 ++++++++++++++++++++++++++++-- test/e2e/revision_workflow_test.go | 50 ++++++++++++++++---- 2 files changed, 112 insertions(+), 13 deletions(-) diff --git a/test/e2e/basic_workflow_test.go b/test/e2e/basic_workflow_test.go index 609b709ee..446217179 100644 --- a/test/e2e/basic_workflow_test.go +++ b/test/e2e/basic_workflow_test.go @@ -38,9 +38,14 @@ func TestBasicWorkflow(t *testing.T) { test.serviceCreate(t, "hello") }) + t.Run("create hello service again and get service already exists error", func(t *testing.T) { + test.serviceCreateDuplicate(t, "hello") + }) + t.Run("returns valid info about hello service", func(t *testing.T) { test.serviceList(t, "hello") test.serviceDescribe(t, "hello") + test.serviceDescribeWithPrintFlags(t, "hello") }) t.Run("update hello service's configuration and returns no error", func(t *testing.T) { @@ -59,6 +64,12 @@ func TestBasicWorkflow(t *testing.T) { t.Run("returns a list of routes associated with hello and svc2 services", func(t *testing.T) { test.routeList(t) test.routeListWithArgument(t, "hello") + test.routeListWithPrintFlags(t, "hello", "svc2") + }) + + t.Run("describe route from hello service", func(t *testing.T) { + test.routeDescribe(t, "hello") + test.routeDescribeWithPrintFlags(t, "hello") }) t.Run("delete hello and svc2 services and returns no error", func(t *testing.T) { @@ -66,6 +77,10 @@ func TestBasicWorkflow(t *testing.T) { test.serviceDelete(t, "svc2") }) + t.Run("delete hello service again and get an error", func(t *testing.T) { + test.serviceDeleteNonexistent(t, "hello") + }) + t.Run("returns no service after completing tests", func(t *testing.T) { test.serviceListEmpty(t) }) @@ -81,8 +96,7 @@ func (test *e2eTest) serviceListEmpty(t *testing.T) { } func (test *e2eTest) serviceCreate(t *testing.T, serviceName string) { - out, err := test.kn.RunWithOpts([]string{"service", "create", - fmt.Sprintf("%s", serviceName), + out, err := test.kn.RunWithOpts([]string{"service", "create", serviceName, "--image", KnDefaultTestImage}, runOpts{NoNamespace: false}) assert.NilError(t, err) @@ -93,8 +107,17 @@ func (test *e2eTest) serviceList(t *testing.T, serviceName string) { out, err := test.kn.RunWithOpts([]string{"service", "list", serviceName}, runOpts{NoNamespace: false}) assert.NilError(t, err) - expectedOutput := fmt.Sprintf("%s", serviceName) - assert.Check(t, util.ContainsAll(out, expectedOutput)) + assert.Check(t, util.ContainsAll(out, serviceName)) +} + +func (test *e2eTest) serviceCreateDuplicate(t *testing.T, serviceName string) { + out, err := test.kn.RunWithOpts([]string{"service", "list", serviceName}, runOpts{NoNamespace: false}) + assert.Check(t, strings.Contains(out, serviceName), "The service does not exist yet") + + _, err = test.kn.RunWithOpts([]string{"service", "create", serviceName, + "--image", KnDefaultTestImage}, runOpts{NoNamespace: false, AllowError: true}) + + assert.ErrorContains(t, err, "the service already exists") } func (test *e2eTest) revisionListForService(t *testing.T, serviceName string) { @@ -132,6 +155,14 @@ func (test *e2eTest) serviceUpdate(t *testing.T, serviceName string, args []stri assert.Check(t, util.ContainsAll(out, expectedOutput)) } +func (test *e2eTest) serviceDescribeWithPrintFlags(t *testing.T, serviceName string) { + out, err := test.kn.RunWithOpts([]string{"service", "describe", serviceName, "-o=name"}, runOpts{}) + assert.NilError(t, err) + + expectedName := fmt.Sprintf("service.serving.knative.dev/%s", serviceName) + assert.Equal(t, strings.TrimSpace(out), expectedName) +} + func (test *e2eTest) routeList(t *testing.T) { out, err := test.kn.RunWithOpts([]string{"route", "list"}, runOpts{}) assert.NilError(t, err) @@ -154,3 +185,39 @@ func (test *e2eTest) serviceDelete(t *testing.T, serviceName string) { assert.Check(t, util.ContainsAll(out, "Service", serviceName, "successfully deleted in namespace", test.kn.namespace)) } + +func (test *e2eTest) serviceDeleteNonexistent(t *testing.T, serviceName string) { + out, err := test.kn.RunWithOpts([]string{"service", "list", serviceName}, runOpts{NoNamespace: false}) + assert.Check(t, !strings.Contains(out, serviceName), "The service exists") + + _, err = test.kn.RunWithOpts([]string{"service", "delete", serviceName}, runOpts{NoNamespace: false, AllowError: true}) + + expectedErr := fmt.Sprintf(`services.serving.knative.dev "%s" not found`, serviceName) + assert.ErrorContains(t, err, expectedErr) +} + +func (test *e2eTest) routeDescribe(t *testing.T, routeName string) { + out, err := test.kn.RunWithOpts([]string{"route", "describe", routeName}, runOpts{}) + assert.NilError(t, err) + + expectedGVK := `apiVersion: serving.knative.dev/v1alpha1 +kind: Route` + expectedNamespace := fmt.Sprintf("namespace: %s", test.kn.namespace) + expectedServiceLabel := fmt.Sprintf("serving.knative.dev/service: %s", routeName) + assert.Check(t, util.ContainsAll(out, expectedGVK, expectedNamespace, expectedServiceLabel)) +} + +func (test *e2eTest) routeDescribeWithPrintFlags(t *testing.T, routeName string) { + out, err := test.kn.RunWithOpts([]string{"route", "describe", routeName, "-o=name"}, runOpts{}) + assert.NilError(t, err) + + expectedName := fmt.Sprintf("route.serving.knative.dev/%s", routeName) + assert.Equal(t, strings.TrimSpace(out), expectedName) +} + +func (test *e2eTest) routeListWithPrintFlags(t *testing.T, names ...string) { + out, err := test.kn.RunWithOpts([]string{"route", "list", "-o=jsonpath={.items[*].metadata.name}"}, runOpts{}) + assert.NilError(t, err) + + assert.Check(t, util.ContainsAll(out, names...)) +} diff --git a/test/e2e/revision_workflow_test.go b/test/e2e/revision_workflow_test.go index f07ad2838..add5c5f31 100644 --- a/test/e2e/revision_workflow_test.go +++ b/test/e2e/revision_workflow_test.go @@ -17,6 +17,7 @@ package e2e import ( + "fmt" "strings" "testing" @@ -33,8 +34,13 @@ func TestRevisionWorkflow(t *testing.T) { test.serviceCreate(t, "hello") }) + t.Run("describe revision from hello service", func(t *testing.T) { + test.revisionDescribe(t, "hello") + test.revisionDescribeWithPrintFlags(t, "hello") + }) + t.Run("delete latest revision from hello service and returns no error", func(t *testing.T) { - test.deleteRevision(t, "hello") + test.revisionDelete(t, "hello") }) t.Run("delete hello service and returns no error", func(t *testing.T) { @@ -42,17 +48,43 @@ func TestRevisionWorkflow(t *testing.T) { }) } -// Private - -func (test *e2eTest) deleteRevision(t *testing.T, serviceName string) { - revName, err := test.kn.RunWithOpts([]string{"revision", "list", "-o=jsonpath={.items[0].metadata.name}"}, runOpts{}) - assert.NilError(t, err) - if strings.Contains(revName, "No resources found.") { - t.Errorf("Could not find revision name.") - } +func (test *e2eTest) revisionDelete(t *testing.T, serviceName string) { + revName := test.findRevision(t, serviceName) out, err := test.kn.RunWithOpts([]string{"revision", "delete", revName}, runOpts{}) assert.NilError(t, err) assert.Check(t, util.ContainsAll(out, "Revision", revName, "deleted", "namespace", test.kn.namespace)) } + +func (test *e2eTest) revisionDescribe(t *testing.T, serviceName string) { + revName := test.findRevision(t, serviceName) + + out, err := test.kn.RunWithOpts([]string{"revision", "describe", revName}, runOpts{}) + assert.NilError(t, err) + + expectedGVK := `apiVersion: serving.knative.dev/v1alpha1 +kind: Revision` + expectedNamespace := fmt.Sprintf("namespace: %s", test.kn.namespace) + expectedServiceLabel := fmt.Sprintf("serving.knative.dev/service: %s", serviceName) + assert.Check(t, util.ContainsAll(out, expectedGVK, expectedNamespace, expectedServiceLabel)) +} + +func (test *e2eTest) revisionDescribeWithPrintFlags(t *testing.T, serviceName string) { + revName := test.findRevision(t, serviceName) + + out, err := test.kn.RunWithOpts([]string{"revision", "describe", revName, "-o=name"}, runOpts{}) + assert.NilError(t, err) + + expectedName := fmt.Sprintf("revision.serving.knative.dev/%s", revName) + assert.Equal(t, strings.TrimSpace(out), expectedName) +} + +func (test *e2eTest) findRevision(t *testing.T, serviceName string) string { + revName, err := test.kn.RunWithOpts([]string{"revision", "list", "-o=jsonpath={.items[0].metadata.name}"}, runOpts{}) + assert.NilError(t, err) + if strings.Contains(revName, "No resources found.") { + t.Errorf("Could not find revision name.") + } + return revName +}