From 93984f8c6810be98bed0481c2932d3f01783bf4e Mon Sep 17 00:00:00 2001 From: Guillaume Tardif Date: Tue, 9 Jun 2020 07:22:40 +0200 Subject: [PATCH] Removed test requiring linux containers --- .gitattributes | 2 +- .github/workflows/ci.yml | 14 +-- Makefile | 5 +- tests/e2e/e2e_test.go | 81 +------------- tests/skip-win-ci-e2e/skip_win_ci_test.go | 127 ++++++++++++++++++++++ 5 files changed, 135 insertions(+), 94 deletions(-) create mode 100644 tests/skip-win-ci-e2e/skip_win_ci_test.go diff --git a/.gitattributes b/.gitattributes index 9f24d02b5..9c91b7996 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,2 @@ core.autocrlf false -*.golden text eol=lf \ No newline at end of file +*.golden text eol=lf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09b301b16..889000a07 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: - name: Run golangci-lint run: | curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b . v1.27.0 - ./golangci-lint run + ./golangci-lint run --timeout 10m0s build: name: Build @@ -63,7 +63,6 @@ jobs: - name: E2E Test run: make e2e-local - windows-build: name: Windows Build runs-on: windows-latest @@ -92,14 +91,5 @@ jobs: - name: Build run: make -f builder.Makefile cli - - name: Install Protoc - uses: arduino/setup-protoc@master - with: - version: "3.9.1" - - - uses: actions/setup-node@v1 - with: - node-version: "10.x" - - name: E2E Test - run: make e2e-local + run: make e2e-win-ci diff --git a/Makefile b/Makefile index aec719638..78bf00fb0 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,10 @@ cli: ## Compile the cli --output ./bin e2e-local: ## Run End to end local tests - go test -v ./tests/e2e ./moby/e2e + go test -v ./tests/e2e ./tests/skip-win-ci-e2e ./moby/e2e + +e2e-win-ci: ## Run End to end local tests on windows CI, no docker for linux containers available ATM + go test -v ./tests/e2e e2e-aci: ## Run End to end ACI tests (requires azure login) go test -v ./tests/aci-e2e diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index e33ad169c..bd39c83e9 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -28,13 +28,8 @@ package main import ( - "fmt" - "io/ioutil" - "log" "os" - "os/exec" "path/filepath" - "strings" "testing" "time" @@ -115,37 +110,6 @@ func (s *E2eSuite) TestSetupError() { }) } -func (s *E2eSuite) TestKillChildOnCancel() { - It("should kill docker-classic if parent command is cancelled", func() { - out := s.ListProcessesCommand().ExecOrDie() - Expect(out).NotTo(ContainSubstring("docker-classic")) - - dir := s.ConfigDir - Expect(ioutil.WriteFile(filepath.Join(dir, "Dockerfile"), []byte(`FROM alpine:3.10 -RUN sleep 100`), 0644)).To(Succeed()) - shutdown := make(chan time.Time) - errs := make(chan error) - ctx := s.NewDockerCommand("build", "--no-cache", "-t", "test-sleep-image", ".").WithinDirectory(dir).WithTimeout(shutdown) - go func() { - _, err := ctx.Exec() - errs <- err - }() - err := WaitFor(time.Second, 10*time.Second, errs, func() bool { - out := s.ListProcessesCommand().ExecOrDie() - return strings.Contains(out, "docker-classic") - }) - Expect(err).NotTo(HaveOccurred()) - log.Println("Killing docker process") - - close(shutdown) - err = WaitFor(time.Second, 12*time.Second, nil, func() bool { - out := s.ListProcessesCommand().ExecOrDie() - return !strings.Contains(out, "docker-classic") - }) - Expect(err).NotTo(HaveOccurred()) - }) -} - func (s *E2eSuite) TestLegacy() { It("should list all legacy commands", func() { output := s.NewDockerCommand("--help").ExecOrDie() @@ -159,7 +123,7 @@ func (s *E2eSuite) TestLegacy() { It("should run local container in less than 10 secs", func() { s.NewDockerCommand("pull", "hello-world").ExecOrDie() - output := s.NewDockerCommand("run", "--rm", "hello-world").WithTimeout(time.NewTimer(10 * time.Second).C).ExecOrDie() + output := s.NewDockerCommand("run", "--rm", "hello-world").WithTimeout(time.NewTimer(20 * time.Second).C).ExecOrDie() Expect(output).To(ContainSubstring("Hello from Docker!")) }) } @@ -222,49 +186,6 @@ func (s *E2eSuite) TestMockBackend() { }) } -func (s *E2eSuite) TestAPIServer() { - _, err := exec.LookPath("yarn") - if err != nil || os.Getenv("SKIP_NODE") != "" { - s.T().Skip("skipping, yarn not installed") - } - It("can run 'serve' command", func() { - cName := "test-example" - s.NewDockerCommand("context", "create", cName, "example").ExecOrDie() - - //sPath := fmt.Sprintf("unix:///%s/docker.sock", s.ConfigDir) - sPath, cliAddress := s.getGrpcServerAndCLientAddress() - server, err := serveAPI(s.ConfigDir, sPath) - Expect(err).To(BeNil()) - defer killProcess(server) - - s.NewCommand("yarn", "install").WithinDirectory("../node-client").ExecOrDie() - output := s.NewCommand("yarn", "run", "start", cName, cliAddress).WithinDirectory("../node-client").ExecOrDie() - Expect(output).To(ContainSubstring("nginx")) - }) -} - -func (s *E2eSuite) getGrpcServerAndCLientAddress() (string, string) { - if IsWindows() { - return "npipe:////./pipe/clibackend", "unix:////./pipe/clibackend" - } - socketName := fmt.Sprintf("unix:///%s/docker.sock", s.ConfigDir) - return socketName, socketName -} - func TestE2e(t *testing.T) { suite.Run(t, new(E2eSuite)) } - -func killProcess(process *os.Process) { - err := process.Kill() - Expect(err).To(BeNil()) -} - -func serveAPI(configDir string, address string) (*os.Process, error) { - cmd := exec.Command("../../bin/docker", "--config", configDir, "serve", "--address", address) - err := cmd.Start() - if err != nil { - return nil, err - } - return cmd.Process, nil -} diff --git a/tests/skip-win-ci-e2e/skip_win_ci_test.go b/tests/skip-win-ci-e2e/skip_win_ci_test.go new file mode 100644 index 000000000..cf055464c --- /dev/null +++ b/tests/skip-win-ci-e2e/skip_win_ci_test.go @@ -0,0 +1,127 @@ +/* + Copyright (c) 2020 Docker Inc. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH + THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +package main + +import ( + "fmt" + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" + "strings" + "testing" + "time" + + . "github.com/onsi/gomega" + "github.com/stretchr/testify/suite" + + . "github.com/docker/api/tests/framework" +) + +type NonWinCIE2eSuite struct { + Suite +} + +func (s *NonWinCIE2eSuite) TestKillChildOnCancel() { + It("should kill docker-classic if parent command is cancelled", func() { + out := s.ListProcessesCommand().ExecOrDie() + Expect(out).NotTo(ContainSubstring("docker-classic")) + + dir := s.ConfigDir + Expect(ioutil.WriteFile(filepath.Join(dir, "Dockerfile"), []byte(`FROM alpine:3.10 +RUN sleep 100`), 0644)).To(Succeed()) + shutdown := make(chan time.Time) + errs := make(chan error) + ctx := s.NewDockerCommand("build", "--no-cache", "-t", "test-sleep-image", ".").WithinDirectory(dir).WithTimeout(shutdown) + go func() { + _, err := ctx.Exec() + errs <- err + }() + err := WaitFor(time.Second, 10*time.Second, errs, func() bool { + out := s.ListProcessesCommand().ExecOrDie() + return strings.Contains(out, "docker-classic") + }) + Expect(err).NotTo(HaveOccurred()) + log.Println("Killing docker process") + + close(shutdown) + err = WaitFor(time.Second, 12*time.Second, nil, func() bool { + out := s.ListProcessesCommand().ExecOrDie() + return !strings.Contains(out, "docker-classic") + }) + Expect(err).NotTo(HaveOccurred()) + }) +} + +func (s *NonWinCIE2eSuite) TestAPIServer() { + _, err := exec.LookPath("yarn") + if err != nil || os.Getenv("SKIP_NODE") != "" { + s.T().Skip("skipping, yarn not installed") + } + It("can run 'serve' command", func() { + cName := "test-example" + s.NewDockerCommand("context", "create", cName, "example").ExecOrDie() + + //sPath := fmt.Sprintf("unix:///%s/docker.sock", s.ConfigDir) + sPath, cliAddress := s.getGrpcServerAndCLientAddress() + server, err := serveAPI(s.ConfigDir, sPath) + Expect(err).To(BeNil()) + defer killProcess(server) + + s.NewCommand("yarn", "install").WithinDirectory("../node-client").ExecOrDie() + output := s.NewCommand("yarn", "run", "start", cName, cliAddress).WithinDirectory("../node-client").ExecOrDie() + Expect(output).To(ContainSubstring("nginx")) + }) +} + +func (s *NonWinCIE2eSuite) getGrpcServerAndCLientAddress() (string, string) { + if IsWindows() { + return "npipe:////./pipe/clibackend", "unix:////./pipe/clibackend" + } + socketName := fmt.Sprintf("unix:///%s/docker.sock", s.ConfigDir) + return socketName, socketName +} + +func TestE2e(t *testing.T) { + suite.Run(t, new(NonWinCIE2eSuite)) +} + +func killProcess(process *os.Process) { + err := process.Kill() + Expect(err).To(BeNil()) +} + +func serveAPI(configDir string, address string) (*os.Process, error) { + cmd := exec.Command("../../bin/docker", "--config", configDir, "serve", "--address", address) + err := cmd.Start() + if err != nil { + return nil, err + } + return cmd.Process, nil +}