First ECS E2E test

Signed-off-by: Guillaume Tardif <guillaume.tardif@docker.com>
This commit is contained in:
Guillaume Tardif 2020-08-18 17:06:47 +02:00
parent 23bb628724
commit 3a83d85d7a
5 changed files with 150 additions and 2 deletions

View File

@ -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
-->

View File

@ -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

View File

@ -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 \

View File

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

View File

@ -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)
})
}