Ver código fonte

First ECS E2E test

Signed-off-by: Guillaume Tardif <[email protected]>
Guillaume Tardif 5 anos atrás
pai
commit
3a83d85d7a

+ 1 - 0
.github/PULL_REQUEST_TEMPLATE.md

@@ -6,6 +6,7 @@
 <!-- optional tests
 You can add a @ mention to run tests executed by default only on main branch : 
 * `test-aci` to run ACI E2E tests
+* `test-ecs` to run ECS E2E tests
 * `test-windows` to run tests & E2E tests on windows
 -->
 

+ 45 - 1
.github/workflows/optional-ci.yml

@@ -12,6 +12,7 @@ jobs:
     runs-on: ubuntu-latest
     outputs:
       trigger-aci: ${{steps.runacitest.outputs.triggered}}
+      trigger-ecs: ${{steps.runecstest.outputs.triggered}}
       trigger-windows: ${{steps.runwindowstest.outputs.triggered}}
     steps:
       - uses: khan/pull-request-comment-trigger@master
@@ -26,8 +27,14 @@ jobs:
         id: runwindowstest
         with:
           trigger: '@test-windows'
+      - uses: khan/pull-request-comment-trigger@master
+        name: Check if test ECS
+        if: github.event_name == 'pull_request'
+        id: runecstest
+        with:
+          trigger: '@test-ecs'
 
-  build:
+  aci-tests:
     name: ACI e2e tests
     runs-on: ubuntu-latest
     env:
@@ -59,6 +66,43 @@ jobs:
           AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
         run: make e2e-aci
 
+  ecs-tests:
+    name: ECS e2e tests
+    runs-on: ubuntu-latest
+    env:
+      GO111MODULE: "on"
+    needs: check-optional-tests
+    if: github.ref == 'refs/heads/main' || needs.check-optional-tests.outputs.trigger-ecs == 'true'
+    steps:
+      - name: Set up Go 1.15
+        uses: actions/setup-go@v1
+        with:
+          go-version: 1.15
+        id: go
+
+      - name: Checkout code into the Go module directory
+        uses: actions/checkout@v2
+
+      - uses: actions/cache@v2
+        with:
+          path: ~/go/pkg/mod
+          key: go-${{ hashFiles('**/go.sum') }}
+
+      - name: Build for ECS e2e tests
+        env:
+          BUILD_TAGS: ecs
+        run: make -f builder.Makefile cli
+
+      - name: create aws config folder
+        run: mkdir -p ~/.aws
+
+      - name: ECS e2e Test
+        env:
+          AWS_DEFAULT_REGION: us-west-2
+          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
+          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY }}
+        run: make e2e-ecs
+
   windows-build:
     name: Windows Build
     runs-on: windows-latest

+ 3 - 0
Makefile

@@ -52,6 +52,9 @@ e2e-win-ci: ## Run end to end local tests on Windows CI, no Docker for Linux con
 e2e-aci: ## Run End to end ACI tests. Set E2E_TEST=TestName to run a single test
 	go test -count=1 -v $(TEST_FLAGS) ./tests/aci-e2e
 
+e2e-ecs: ## Run End to end ECS tests. Set E2E_TEST=TestName to run a single test
+	go test -timeout 20m -count=1 -v $(TEST_FLAGS) ./tests/ecs-e2e
+
 cross: ## Compile the CLI for linux, darwin and windows
 	@docker build . --target cross \
 	--build-arg BUILD_TAGS \

+ 2 - 1
tests/composefiles/nginx.yaml

@@ -3,4 +3,5 @@ version: "3.7"
 services:
   nginx:
     image: nginx
-    isolation: FARGATE
+    ports:
+      - "80:80"

+ 99 - 0
tests/ecs-e2e/e2e-ecs_test.go

@@ -0,0 +1,99 @@
+/*
+   Copyright 2020 Docker, Inc.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package main
+
+import (
+	"fmt"
+	"gotest.tools/v3/assert"
+	"io/ioutil"
+	"net/http"
+	"os"
+	"strconv"
+	"strings"
+	"testing"
+	"time"
+
+	. "github.com/docker/api/tests/framework"
+	"gotest.tools/v3/icmd"
+)
+
+var binDir string
+
+func TestMain(m *testing.M) {
+	p, cleanup, err := SetupExistingCLI()
+	if err != nil {
+		fmt.Println(err)
+		os.Exit(1)
+	}
+	binDir = p
+	exitCode := m.Run()
+	cleanup()
+	os.Exit(exitCode)
+}
+
+func TestCompose(t *testing.T) {
+	startTime := strconv.Itoa(int(time.Now().UnixNano()))
+	c := NewE2eCLI(t, binDir)
+	contextName := "teste2e" + startTime
+	stack := contextName
+
+	t.Run("create context", func(t *testing.T) {
+		profile := contextName
+		region := os.Getenv("AWS_DEFAULT_REGION")
+		secretKey := os.Getenv("AWS_SECRET_ACCESS_KEY")
+		keyID := os.Getenv("AWS_ACCESS_KEY_ID")
+		res := c.RunDockerCmd("context", "create", "ecs", contextName, "--profile", profile, "--region", region, "--secret-key", secretKey, "--key-id", keyID)
+		res.Assert(t, icmd.Success)
+		res = c.RunDockerCmd("context", "use", contextName)
+		res.Assert(t, icmd.Expected{Out: contextName})
+		res = c.RunDockerCmd("context", "ls")
+		res.Assert(t, icmd.Expected{Out: contextName + " *"})
+	})
+
+	t.Run("compose up", func(t *testing.T) {
+		res := c.RunDockerCmd("compose", "up", "--project-name", stack, "-f", "../composefiles/nginx.yaml")
+		res.Assert(t, icmd.Success)
+	})
+
+
+	t.Run("compose ps", func(t *testing.T) {
+		res := c.RunDockerCmd("compose", "ps", "--project-name", stack)
+		res.Assert(t, icmd.Success)
+		lines := strings.Split(res.Stdout(), "\n")
+
+		assert.Equal(t,3,  len(lines))
+		fields := strings.Fields(lines[1])
+		assert.Equal(t, 4, len(fields))
+		assert.Check(t, strings.Contains(fields[0], stack))
+		assert.Equal(t, "nginx", fields[1])
+		assert.Equal(t, "1/1", fields[2])
+		assert.Check(t, strings.Contains(fields[3], "->80/http"))
+		url := "http://" + strings.Replace(fields[3], "->80/http", "", 1)
+
+		r, err := http.Get(url)
+		assert.NilError(t, err)
+		assert.Equal(t, r.StatusCode, http.StatusOK)
+		b, err := ioutil.ReadAll(r.Body)
+		assert.NilError(t, err)
+		assert.Assert(t, strings.Contains(string(b), "Welcome to nginx!"))
+	})
+
+	t.Run("compose down", func(t *testing.T) {
+		res := c.RunDockerCmd("compose", "down", "--project-name", stack, "-f", "../composefiles/nginx.yaml")
+		res.Assert(t, icmd.Success)
+	})
+}