From cab59f0f35334822c46cb864210d40973b72cf19 Mon Sep 17 00:00:00 2001 From: Raphael Ludwig Date: Tue, 16 Aug 2022 14:37:57 +0200 Subject: [PATCH] test: Add integration tests for global configuration (#346) * test: Add integration tests for global configuration Signed-off-by: Raphael Ludwig * chore: Make reviewdog happy Signed-off-by: Raphael Ludwig Signed-off-by: Raphael Ludwig --- test/data/e2e/jobconfig.project.config.yaml | 12 ++ test/data/e2e/jobconfig.service-1.config.yaml | 12 ++ test/data/e2e/jobconfig.stage-dev.config.yaml | 12 ++ test/e2e/jobconfig_test.go | 111 ++++++++++++++++++ .../events/e2e/jobconfig.dev-1.triggered.json | 10 ++ .../events/e2e/jobconfig.dev-2.triggered.json | 10 ++ test/events/e2e/jobconfig.prod.triggered.json | 10 ++ test/shipyard/e2e/jobconfig.deployment.yaml | 17 +++ 8 files changed, 194 insertions(+) create mode 100644 test/data/e2e/jobconfig.project.config.yaml create mode 100644 test/data/e2e/jobconfig.service-1.config.yaml create mode 100644 test/data/e2e/jobconfig.stage-dev.config.yaml create mode 100644 test/e2e/jobconfig_test.go create mode 100644 test/events/e2e/jobconfig.dev-1.triggered.json create mode 100644 test/events/e2e/jobconfig.dev-2.triggered.json create mode 100644 test/events/e2e/jobconfig.prod.triggered.json create mode 100644 test/shipyard/e2e/jobconfig.deployment.yaml diff --git a/test/data/e2e/jobconfig.project.config.yaml b/test/data/e2e/jobconfig.project.config.yaml new file mode 100644 index 00000000..086010c1 --- /dev/null +++ b/test/data/e2e/jobconfig.project.config.yaml @@ -0,0 +1,12 @@ +apiVersion: v2 +actions: + - name: "Hello World e2e test" + events: + - name: "sh.keptn.event.deployment.triggered" + tasks: + - name: "Greet the world" + image: "alpine" + cmd: + - echo + args: + - "Hello World" diff --git a/test/data/e2e/jobconfig.service-1.config.yaml b/test/data/e2e/jobconfig.service-1.config.yaml new file mode 100644 index 00000000..6586cbd7 --- /dev/null +++ b/test/data/e2e/jobconfig.service-1.config.yaml @@ -0,0 +1,12 @@ +apiVersion: v2 +actions: + - name: "Hello World e2e test" + events: + - name: "sh.keptn.event.deployment.triggered" + tasks: + - name: "Greet the world" + image: "alpine" + cmd: + - echo + args: + - "Hallo Welt" diff --git a/test/data/e2e/jobconfig.stage-dev.config.yaml b/test/data/e2e/jobconfig.stage-dev.config.yaml new file mode 100644 index 00000000..cedb467d --- /dev/null +++ b/test/data/e2e/jobconfig.stage-dev.config.yaml @@ -0,0 +1,12 @@ +apiVersion: v2 +actions: + - name: "Hello World e2e test" + events: + - name: "sh.keptn.event.deployment.triggered" + tasks: + - name: "Greet the world" + image: "alpine" + cmd: + - echo + args: + - "Buon Giorno" diff --git a/test/e2e/jobconfig_test.go b/test/e2e/jobconfig_test.go new file mode 100644 index 00000000..4ec417f3 --- /dev/null +++ b/test/e2e/jobconfig_test.go @@ -0,0 +1,111 @@ +package e2e + +import ( + "github.com/keptn/go-utils/pkg/api/models" + api "github.com/keptn/go-utils/pkg/api/utils" + "github.com/stretchr/testify/require" + "os" + "strings" + "testing" + "time" +) + +func TestJobConfig(t *testing.T) { + if !isE2ETestingAllowed() { + t.Skipf("Skipping %s, not allowed by environment", t.Name()) + } + + /* const */ + var jobConfigURI = "job/config.yaml" + + testEnv, err := newTestEnvironment( + "../events/e2e/jobconfig.dev-1.triggered.json", + "../shipyard/e2e/jobconfig.deployment.yaml", + "../data/e2e/jobconfig.service-1.config.yaml", + ) + + require.NoError(t, err) + + err = testEnv.SetupTestEnvironment() + require.NoError(t, err) + + // Make sure project is delete after the tests are completed + defer testEnv.Cleanup() + + // Upload the stage configuration + stageConfig, err := os.ReadFile("../data/e2e/jobconfig.stage-dev.config.yaml") + require.NoError(t, err) + + stageScope := api.NewResourceScope() + stageScope.Project(testEnv.EventData.Project) + stageScope.Stage("dev") + + _, err = testEnv.API.ResourceHandler.CreateResource([]*models.Resource{ + { + ResourceContent: string(stageConfig), + ResourceURI: &jobConfigURI, + }, + }, *stageScope) + require.NoError(t, err) + + // Upload the project configuration + projectConfig, err := os.ReadFile("../data/e2e/jobconfig.project.config.yaml") + require.NoError(t, err) + + projectScope := api.NewResourceScope() + projectScope.Project(testEnv.EventData.Project) + + _, err = testEnv.API.ResourceHandler.CreateResource([]*models.Resource{ + { + ResourceContent: string(projectConfig), + ResourceURI: &jobConfigURI, + }, + }, *projectScope) + require.NoError(t, err) + + tests := []struct { + Name string + Event string + ExpectedResult string + }{ + { + Name: "Service job configuration", + Event: "../events/e2e/jobconfig.dev-1.triggered.json", + ExpectedResult: "Hallo Welt", + }, + { + Name: "Stage job configuration", + Event: "../events/e2e/jobconfig.dev-2.triggered.json", + ExpectedResult: "Buon Giorno", + }, + { + Name: "Project job configuration", + Event: "../events/e2e/jobconfig.prod.triggered.json", + ExpectedResult: "Hello World", + }, + } + + for _, test := range tests { + t.Run(test.Name, func(t *testing.T) { + keptnEvent, err := readKeptnContextExtendedCE(test.Event) + require.NoError(t, err) + + keptnContext, err := testEnv.API.SendEvent(keptnEvent) + require.NoError(t, err) + + requireWaitForEvent(t, + testEnv.API, + 1*time.Minute, + 1*time.Second, + keptnContext, + "sh.keptn.event.deployment.finished", + func(event *models.KeptnContextExtendedCE) bool { + responseEventData, err := parseKeptnEventData(event) + require.NoError(t, err) + + return strings.Contains(responseEventData.Message, test.ExpectedResult) + }, + ) + }) + } +} diff --git a/test/events/e2e/jobconfig.dev-1.triggered.json b/test/events/e2e/jobconfig.dev-1.triggered.json new file mode 100644 index 00000000..65efb2ad --- /dev/null +++ b/test/events/e2e/jobconfig.dev-1.triggered.json @@ -0,0 +1,10 @@ +{ + "data": { + "project": "e2e-project", + "service": "service-1", + "stage": "dev" + }, + "source": "e2e-test", + "specversion": "1.0", + "type": "sh.keptn.event.dev.jes.triggered" +} diff --git a/test/events/e2e/jobconfig.dev-2.triggered.json b/test/events/e2e/jobconfig.dev-2.triggered.json new file mode 100644 index 00000000..20dcc23c --- /dev/null +++ b/test/events/e2e/jobconfig.dev-2.triggered.json @@ -0,0 +1,10 @@ +{ + "data": { + "project": "e2e-project", + "service": "service-2", + "stage": "dev" + }, + "source": "e2e-test", + "specversion": "1.0", + "type": "sh.keptn.event.dev.jes.triggered" +} diff --git a/test/events/e2e/jobconfig.prod.triggered.json b/test/events/e2e/jobconfig.prod.triggered.json new file mode 100644 index 00000000..146a660f --- /dev/null +++ b/test/events/e2e/jobconfig.prod.triggered.json @@ -0,0 +1,10 @@ +{ + "data": { + "project": "e2e-project", + "service": "service-1", + "stage": "prod" + }, + "source": "e2e-test", + "specversion": "1.0", + "type": "sh.keptn.event.prod.jes.triggered" +} diff --git a/test/shipyard/e2e/jobconfig.deployment.yaml b/test/shipyard/e2e/jobconfig.deployment.yaml new file mode 100644 index 00000000..5cb1dd67 --- /dev/null +++ b/test/shipyard/e2e/jobconfig.deployment.yaml @@ -0,0 +1,17 @@ +apiVersion: "spec.keptn.sh/0.2.2" +kind: "Shipyard" +metadata: + name: "e2e-deployment-shipyard" +spec: + stages: + - name: "dev" + sequences: + - name: "jes" + tasks: + - name: "deployment" + + - name: "prod" + sequences: + - name: "jes" + tasks: + - name: "deployment"