From 42cd3da59d5166e46d90c2963aec24351904f28e Mon Sep 17 00:00:00 2001 From: Julien Tant Date: Mon, 3 May 2021 10:55:36 -0700 Subject: [PATCH] add tests Signed-off-by: Julien Tant --- local/e2e/compose/cp_test.go | 120 ++++++++++++++++++ .../fixtures/cp-test/cp-folder/cp-me.txt | 1 + local/e2e/compose/fixtures/cp-test/cp-me.txt | 1 + .../fixtures/cp-test/docker-compose.yml | 3 + 4 files changed, 125 insertions(+) create mode 100644 local/e2e/compose/cp_test.go create mode 100644 local/e2e/compose/fixtures/cp-test/cp-folder/cp-me.txt create mode 100644 local/e2e/compose/fixtures/cp-test/cp-me.txt create mode 100644 local/e2e/compose/fixtures/cp-test/docker-compose.yml diff --git a/local/e2e/compose/cp_test.go b/local/e2e/compose/cp_test.go new file mode 100644 index 000000000..f11855469 --- /dev/null +++ b/local/e2e/compose/cp_test.go @@ -0,0 +1,120 @@ +/* + Copyright 2020 Docker Compose CLI authors + + 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 e2e + +import ( + "os" + "strings" + "testing" + + "gotest.tools/v3/assert" + "gotest.tools/v3/icmd" + + . "github.com/docker/compose-cli/utils/e2e" +) + +func TestCopy(t *testing.T) { + c := NewParallelE2eCLI(t, binDir) + + const projectName = "copy_e2e" + + t.Cleanup(func() { + c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "--project-name", projectName, "down") + + os.Remove("./fixtures/cp-test/from-default.txt") + os.Remove("./fixtures/cp-test/from-indexed.txt") + os.RemoveAll("./fixtures/cp-test/cp-folder2") + }) + + t.Run("start service", func(t *testing.T) { + c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "--project-name", projectName, "up", "--scale", "nginx=5", "-d") + }) + + t.Run("make sure service is running", func(t *testing.T) { + res := c.RunDockerCmd("compose", "-p", projectName, "ps") + res.Assert(t, icmd.Expected{Out: `nginx running`}) + }) + + t.Run("copy to container copies the file to the first container by default", func(t *testing.T) { + res := c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "-p", projectName, "cp", "./fixtures/cp-test/cp-me.txt", "nginx:/tmp/default.txt") + res.Assert(t, icmd.Expected{ExitCode: 0}) + + output := c.RunDockerCmd("exec", projectName+"_nginx_1", "cat", "/tmp/default.txt").Stdout() + assert.Assert(t, strings.Contains(output, `hello world`), output) + + res = c.RunDockerOrExitError("exec", projectName+"_nginx_2", "cat", "/tmp/default.txt") + res.Assert(t, icmd.Expected{ExitCode: 1}) + }) + + t.Run("copy to container with a given index copies the file to the given container", func(t *testing.T) { + res := c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "-p", projectName, "cp", "--index=3", "./fixtures/cp-test/cp-me.txt", "nginx:/tmp/indexed.txt") + res.Assert(t, icmd.Expected{ExitCode: 0}) + + output := c.RunDockerCmd("exec", projectName+"_nginx_3", "cat", "/tmp/indexed.txt").Stdout() + assert.Assert(t, strings.Contains(output, `hello world`), output) + + res = c.RunDockerOrExitError("exec", projectName+"_nginx_2", "cat", "/tmp/indexed.txt") + res.Assert(t, icmd.Expected{ExitCode: 1}) + }) + + t.Run("copy to container with the all flag copies the file to all containers", func(t *testing.T) { + res := c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "-p", projectName, "cp", "--all", "./fixtures/cp-test/cp-me.txt", "nginx:/tmp/all.txt") + res.Assert(t, icmd.Expected{ExitCode: 0}) + + output := c.RunDockerCmd("exec", projectName+"_nginx_1", "cat", "/tmp/all.txt").Stdout() + assert.Assert(t, strings.Contains(output, `hello world`), output) + + output = c.RunDockerCmd("exec", projectName+"_nginx_2", "cat", "/tmp/all.txt").Stdout() + assert.Assert(t, strings.Contains(output, `hello world`), output) + + output = c.RunDockerCmd("exec", projectName+"_nginx_3", "cat", "/tmp/all.txt").Stdout() + assert.Assert(t, strings.Contains(output, `hello world`), output) + }) + + t.Run("copy from a container copies the file to the host from the first container by default", func(t *testing.T) { + res := c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "-p", projectName, "cp", "nginx:/tmp/default.txt", "./fixtures/cp-test/from-default.txt") + res.Assert(t, icmd.Expected{ExitCode: 0}) + + data, err := os.ReadFile("./fixtures/cp-test/from-default.txt") + assert.NilError(t, err) + assert.Equal(t, `hello world`, string(data)) + }) + + t.Run("copy from a container with a given index copies the file to host", func(t *testing.T) { + res := c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "-p", projectName, "cp", "--index=3", "nginx:/tmp/indexed.txt", "./fixtures/cp-test/from-indexed.txt") + res.Assert(t, icmd.Expected{ExitCode: 0}) + + data, err := os.ReadFile("./fixtures/cp-test/from-indexed.txt") + assert.NilError(t, err) + assert.Equal(t, `hello world`, string(data)) + }) + + t.Run("copy to and from a container also work with folder", func(t *testing.T) { + res := c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "-p", projectName, "cp", "./fixtures/cp-test/cp-folder", "nginx:/tmp") + res.Assert(t, icmd.Expected{ExitCode: 0}) + + output := c.RunDockerCmd("exec", projectName+"_nginx_1", "cat", "/tmp/cp-folder/cp-me.txt").Stdout() + assert.Assert(t, strings.Contains(output, `hello world from folder`), output) + + res = c.RunDockerCmd("compose", "-f", "./fixtures/cp-test/docker-compose.yml", "-p", projectName, "cp", "nginx:/tmp/cp-folder", "./fixtures/cp-test/cp-folder2") + res.Assert(t, icmd.Expected{ExitCode: 0}) + + data, err := os.ReadFile("./fixtures/cp-test/cp-folder2/cp-me.txt") + assert.NilError(t, err) + assert.Equal(t, `hello world from folder`, string(data)) + }) +} diff --git a/local/e2e/compose/fixtures/cp-test/cp-folder/cp-me.txt b/local/e2e/compose/fixtures/cp-test/cp-folder/cp-me.txt new file mode 100644 index 000000000..a97acd876 --- /dev/null +++ b/local/e2e/compose/fixtures/cp-test/cp-folder/cp-me.txt @@ -0,0 +1 @@ +hello world from folder \ No newline at end of file diff --git a/local/e2e/compose/fixtures/cp-test/cp-me.txt b/local/e2e/compose/fixtures/cp-test/cp-me.txt new file mode 100644 index 000000000..95d09f2b1 --- /dev/null +++ b/local/e2e/compose/fixtures/cp-test/cp-me.txt @@ -0,0 +1 @@ +hello world \ No newline at end of file diff --git a/local/e2e/compose/fixtures/cp-test/docker-compose.yml b/local/e2e/compose/fixtures/cp-test/docker-compose.yml new file mode 100644 index 000000000..f835ebeeb --- /dev/null +++ b/local/e2e/compose/fixtures/cp-test/docker-compose.yml @@ -0,0 +1,3 @@ +services: + nginx: + image: nginx:alpine \ No newline at end of file