mirror of
https://github.com/docker/compose.git
synced 2025-07-07 13:54:34 +02:00
Merge pull request #1347 from gtardif/refacto_compose_e2e
Moving compose e2e tests in their own files
This commit is contained in:
commit
f212d61058
75
local/e2e/compose/compose_build_test.go
Normal file
75
local/e2e/compose/compose_build_test.go
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
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 (
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gotest.tools/v3/assert"
|
||||||
|
"gotest.tools/v3/icmd"
|
||||||
|
|
||||||
|
. "github.com/docker/compose-cli/utils/e2e"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestLocalComposeBuild(t *testing.T) {
|
||||||
|
c := NewParallelE2eCLI(t, binDir)
|
||||||
|
|
||||||
|
t.Run("build named and unnamed images", func(t *testing.T) {
|
||||||
|
// ensure local test run does not reuse previously build image
|
||||||
|
c.RunDockerOrExitError("rmi", "build-test_nginx")
|
||||||
|
c.RunDockerOrExitError("rmi", "custom-nginx")
|
||||||
|
|
||||||
|
res := c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "build")
|
||||||
|
|
||||||
|
res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"})
|
||||||
|
c.RunDockerCmd("image", "inspect", "build-test_nginx")
|
||||||
|
c.RunDockerCmd("image", "inspect", "custom-nginx")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("build as part of up", func(t *testing.T) {
|
||||||
|
c.RunDockerOrExitError("rmi", "build-test_nginx")
|
||||||
|
c.RunDockerOrExitError("rmi", "custom-nginx")
|
||||||
|
|
||||||
|
res := c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "up", "-d")
|
||||||
|
t.Cleanup(func() {
|
||||||
|
c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "down")
|
||||||
|
})
|
||||||
|
|
||||||
|
res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"})
|
||||||
|
|
||||||
|
output := HTTPGetWithRetry(t, "http://localhost:8070", http.StatusOK, 2*time.Second, 20*time.Second)
|
||||||
|
assert.Assert(t, strings.Contains(output, "Hello from Nginx container"))
|
||||||
|
|
||||||
|
c.RunDockerCmd("image", "inspect", "build-test_nginx")
|
||||||
|
c.RunDockerCmd("image", "inspect", "custom-nginx")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("no rebuild when up again", func(t *testing.T) {
|
||||||
|
res := c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "up", "-d")
|
||||||
|
|
||||||
|
assert.Assert(t, !strings.Contains(res.Stdout(), "COPY static /usr/share/nginx/html"), res.Stdout())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("cleanup build project", func(t *testing.T) {
|
||||||
|
c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "down")
|
||||||
|
c.RunDockerCmd("rmi", "build-test_nginx")
|
||||||
|
c.RunDockerCmd("rmi", "custom-nginx")
|
||||||
|
})
|
||||||
|
}
|
86
local/e2e/compose/compose_run_test.go
Normal file
86
local/e2e/compose/compose_run_test.go
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
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 (
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"gotest.tools/v3/assert"
|
||||||
|
"gotest.tools/v3/icmd"
|
||||||
|
|
||||||
|
. "github.com/docker/compose-cli/utils/e2e"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestLocalComposeRun(t *testing.T) {
|
||||||
|
c := NewParallelE2eCLI(t, binDir)
|
||||||
|
|
||||||
|
t.Run("compose run", func(t *testing.T) {
|
||||||
|
res := c.RunDockerCmd("compose", "-f", "./fixtures/run-test/compose.yml", "run", "back")
|
||||||
|
lines := Lines(res.Stdout())
|
||||||
|
assert.Equal(t, lines[len(lines)-1], "Hello there!!", res.Stdout())
|
||||||
|
assert.Assert(t, !strings.Contains(res.Combined(), "orphan"))
|
||||||
|
|
||||||
|
res = c.RunDockerCmd("compose", "-f", "./fixtures/run-test/compose.yml", "run", "back", "echo", "Hello one more time")
|
||||||
|
lines = Lines(res.Stdout())
|
||||||
|
assert.Equal(t, lines[len(lines)-1], "Hello one more time", res.Stdout())
|
||||||
|
assert.Assert(t, !strings.Contains(res.Combined(), "orphan"))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("check run container exited", func(t *testing.T) {
|
||||||
|
res := c.RunDockerCmd("ps", "--all")
|
||||||
|
lines := Lines(res.Stdout())
|
||||||
|
var runContainerID string
|
||||||
|
var truncatedSlug string
|
||||||
|
for _, line := range lines {
|
||||||
|
fields := strings.Fields(line)
|
||||||
|
containerID := fields[len(fields)-1]
|
||||||
|
assert.Assert(t, !strings.HasPrefix(containerID, "run-test_front"))
|
||||||
|
if strings.HasPrefix(containerID, "run-test_back") {
|
||||||
|
// only the one-off container for back service
|
||||||
|
assert.Assert(t, strings.HasPrefix(containerID, "run-test_back_run_"), containerID)
|
||||||
|
truncatedSlug = strings.Replace(containerID, "run-test_back_run_", "", 1)
|
||||||
|
runContainerID = containerID
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(containerID, "run-test_db_1") {
|
||||||
|
assert.Assert(t, strings.Contains(line, "Up"), line)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.Assert(t, runContainerID != "")
|
||||||
|
res = c.RunDockerCmd("inspect", runContainerID)
|
||||||
|
res.Assert(t, icmd.Expected{Out: ` "Status": "exited"`})
|
||||||
|
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.container-number": "1"`})
|
||||||
|
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.project": "run-test"`})
|
||||||
|
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.oneoff": "True",`})
|
||||||
|
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.slug": "` + truncatedSlug})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("compose run --rm", func(t *testing.T) {
|
||||||
|
res := c.RunDockerCmd("compose", "-f", "./fixtures/run-test/compose.yml", "run", "--rm", "back", "/bin/sh", "-c", "echo Hello again")
|
||||||
|
lines := Lines(res.Stdout())
|
||||||
|
assert.Equal(t, lines[len(lines)-1], "Hello again", res.Stdout())
|
||||||
|
|
||||||
|
res = c.RunDockerCmd("ps", "--all")
|
||||||
|
assert.Assert(t, strings.Contains(res.Stdout(), "run-test_back"), res.Stdout())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("down", func(t *testing.T) {
|
||||||
|
c.RunDockerCmd("compose", "-f", "./fixtures/run-test/compose.yml", "down")
|
||||||
|
res := c.RunDockerCmd("ps", "--all")
|
||||||
|
assert.Assert(t, !strings.Contains(res.Stdout(), "run-test"), res.Stdout())
|
||||||
|
})
|
||||||
|
}
|
@ -115,199 +115,6 @@ func TestLocalComposeUp(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLocalComposeRun(t *testing.T) {
|
|
||||||
c := NewParallelE2eCLI(t, binDir)
|
|
||||||
|
|
||||||
t.Run("compose run", func(t *testing.T) {
|
|
||||||
res := c.RunDockerCmd("compose", "-f", "./fixtures/run-test/compose.yml", "run", "back")
|
|
||||||
lines := Lines(res.Stdout())
|
|
||||||
assert.Equal(t, lines[len(lines)-1], "Hello there!!", res.Stdout())
|
|
||||||
assert.Assert(t, !strings.Contains(res.Combined(), "orphan"))
|
|
||||||
|
|
||||||
res = c.RunDockerCmd("compose", "-f", "./fixtures/run-test/compose.yml", "run", "back", "echo", "Hello one more time")
|
|
||||||
lines = Lines(res.Stdout())
|
|
||||||
assert.Equal(t, lines[len(lines)-1], "Hello one more time", res.Stdout())
|
|
||||||
assert.Assert(t, !strings.Contains(res.Combined(), "orphan"))
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("check run container exited", func(t *testing.T) {
|
|
||||||
res := c.RunDockerCmd("ps", "--all")
|
|
||||||
lines := Lines(res.Stdout())
|
|
||||||
var runContainerID string
|
|
||||||
var truncatedSlug string
|
|
||||||
for _, line := range lines {
|
|
||||||
fields := strings.Fields(line)
|
|
||||||
containerID := fields[len(fields)-1]
|
|
||||||
assert.Assert(t, !strings.HasPrefix(containerID, "run-test_front"))
|
|
||||||
if strings.HasPrefix(containerID, "run-test_back") {
|
|
||||||
// only the one-off container for back service
|
|
||||||
assert.Assert(t, strings.HasPrefix(containerID, "run-test_back_run_"), containerID)
|
|
||||||
truncatedSlug = strings.Replace(containerID, "run-test_back_run_", "", 1)
|
|
||||||
runContainerID = containerID
|
|
||||||
}
|
|
||||||
if strings.HasPrefix(containerID, "run-test_db_1") {
|
|
||||||
assert.Assert(t, strings.Contains(line, "Up"), line)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert.Assert(t, runContainerID != "")
|
|
||||||
res = c.RunDockerCmd("inspect", runContainerID)
|
|
||||||
res.Assert(t, icmd.Expected{Out: ` "Status": "exited"`})
|
|
||||||
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.container-number": "1"`})
|
|
||||||
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.project": "run-test"`})
|
|
||||||
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.oneoff": "True",`})
|
|
||||||
res.Assert(t, icmd.Expected{Out: `"com.docker.compose.slug": "` + truncatedSlug})
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("compose run --rm", func(t *testing.T) {
|
|
||||||
res := c.RunDockerCmd("compose", "-f", "./fixtures/run-test/compose.yml", "run", "--rm", "back", "/bin/sh", "-c", "echo Hello again")
|
|
||||||
lines := Lines(res.Stdout())
|
|
||||||
assert.Equal(t, lines[len(lines)-1], "Hello again", res.Stdout())
|
|
||||||
|
|
||||||
res = c.RunDockerCmd("ps", "--all")
|
|
||||||
assert.Assert(t, strings.Contains(res.Stdout(), "run-test_back"), res.Stdout())
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("down", func(t *testing.T) {
|
|
||||||
c.RunDockerCmd("compose", "-f", "./fixtures/run-test/compose.yml", "down")
|
|
||||||
res := c.RunDockerCmd("ps", "--all")
|
|
||||||
assert.Assert(t, !strings.Contains(res.Stdout(), "run-test"), res.Stdout())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNetworks(t *testing.T) {
|
|
||||||
c := NewParallelE2eCLI(t, binDir)
|
|
||||||
|
|
||||||
const projectName = "network_e2e"
|
|
||||||
|
|
||||||
t.Run("ensure we do not reuse previous networks", func(t *testing.T) {
|
|
||||||
c.RunDockerOrExitError("network", "rm", projectName+"_dbnet")
|
|
||||||
c.RunDockerOrExitError("network", "rm", "microservices")
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("up", func(t *testing.T) {
|
|
||||||
c.RunDockerCmd("compose", "-f", "./fixtures/network-test/compose.yaml", "--project-name", projectName, "up", "-d")
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("check running project", func(t *testing.T) {
|
|
||||||
res := c.RunDockerCmd("compose", "-p", projectName, "ps")
|
|
||||||
res.Assert(t, icmd.Expected{Out: `web`})
|
|
||||||
|
|
||||||
endpoint := "http://localhost:80"
|
|
||||||
output := HTTPGetWithRetry(t, endpoint+"/words/noun", http.StatusOK, 2*time.Second, 20*time.Second)
|
|
||||||
assert.Assert(t, strings.Contains(output, `"word":`))
|
|
||||||
|
|
||||||
res = c.RunDockerCmd("network", "ls")
|
|
||||||
res.Assert(t, icmd.Expected{Out: projectName + "_dbnet"})
|
|
||||||
res.Assert(t, icmd.Expected{Out: "microservices"})
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("down", func(t *testing.T) {
|
|
||||||
_ = c.RunDockerCmd("compose", "--project-name", projectName, "down")
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("check networks after down", func(t *testing.T) {
|
|
||||||
res := c.RunDockerCmd("network", "ls")
|
|
||||||
assert.Assert(t, !strings.Contains(res.Combined(), projectName), res.Combined())
|
|
||||||
assert.Assert(t, !strings.Contains(res.Combined(), "microservices"), res.Combined())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLocalComposeBuild(t *testing.T) {
|
|
||||||
c := NewParallelE2eCLI(t, binDir)
|
|
||||||
|
|
||||||
t.Run("build named and unnamed images", func(t *testing.T) {
|
|
||||||
// ensure local test run does not reuse previously build image
|
|
||||||
c.RunDockerOrExitError("rmi", "build-test_nginx")
|
|
||||||
c.RunDockerOrExitError("rmi", "custom-nginx")
|
|
||||||
|
|
||||||
res := c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "build")
|
|
||||||
|
|
||||||
res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"})
|
|
||||||
c.RunDockerCmd("image", "inspect", "build-test_nginx")
|
|
||||||
c.RunDockerCmd("image", "inspect", "custom-nginx")
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("build as part of up", func(t *testing.T) {
|
|
||||||
c.RunDockerOrExitError("rmi", "build-test_nginx")
|
|
||||||
c.RunDockerOrExitError("rmi", "custom-nginx")
|
|
||||||
|
|
||||||
res := c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "up", "-d")
|
|
||||||
t.Cleanup(func() {
|
|
||||||
c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "down")
|
|
||||||
})
|
|
||||||
|
|
||||||
res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"})
|
|
||||||
|
|
||||||
output := HTTPGetWithRetry(t, "http://localhost:8070", http.StatusOK, 2*time.Second, 20*time.Second)
|
|
||||||
assert.Assert(t, strings.Contains(output, "Hello from Nginx container"))
|
|
||||||
|
|
||||||
c.RunDockerCmd("image", "inspect", "build-test_nginx")
|
|
||||||
c.RunDockerCmd("image", "inspect", "custom-nginx")
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("no rebuild when up again", func(t *testing.T) {
|
|
||||||
res := c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "up", "-d")
|
|
||||||
|
|
||||||
assert.Assert(t, !strings.Contains(res.Stdout(), "COPY static /usr/share/nginx/html"), res.Stdout())
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("cleanup build project", func(t *testing.T) {
|
|
||||||
c.RunDockerCmd("compose", "--workdir", "fixtures/build-test", "down")
|
|
||||||
c.RunDockerCmd("rmi", "build-test_nginx")
|
|
||||||
c.RunDockerCmd("rmi", "custom-nginx")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLocalComposeVolume(t *testing.T) {
|
|
||||||
c := NewParallelE2eCLI(t, binDir)
|
|
||||||
|
|
||||||
const projectName = "compose-e2e-volume"
|
|
||||||
|
|
||||||
t.Run("up with build and no image name, volume", func(t *testing.T) {
|
|
||||||
// ensure local test run does not reuse previously build image
|
|
||||||
c.RunDockerOrExitError("rmi", "compose-e2e-volume_nginx")
|
|
||||||
c.RunDockerOrExitError("volume", "rm", projectName+"_staticVol")
|
|
||||||
c.RunDockerOrExitError("volume", "rm", "myvolume")
|
|
||||||
c.RunDockerCmd("compose", "--workdir", "fixtures/volume-test", "--project-name", projectName, "up", "-d")
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("access bind mount data", func(t *testing.T) {
|
|
||||||
output := HTTPGetWithRetry(t, "http://localhost:8090", http.StatusOK, 2*time.Second, 20*time.Second)
|
|
||||||
assert.Assert(t, strings.Contains(output, "Hello from Nginx container"))
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("check container volume specs", func(t *testing.T) {
|
|
||||||
res := c.RunDockerCmd("inspect", "compose-e2e-volume_nginx2_1", "--format", "{{ json .Mounts }}")
|
|
||||||
output := res.Stdout()
|
|
||||||
// nolint
|
|
||||||
assert.Assert(t, strings.Contains(output, `"Destination":"/usr/src/app/node_modules","Driver":"local","Mode":"","RW":true,"Propagation":""`), output)
|
|
||||||
assert.Assert(t, strings.Contains(output, `"Destination":"/myconfig","Mode":"","RW":false,"Propagation":"rprivate"`), output)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("check config content", func(t *testing.T) {
|
|
||||||
output := c.RunDockerCmd("exec", "compose-e2e-volume_nginx2_1", "cat", "/myconfig").Stdout()
|
|
||||||
assert.Assert(t, strings.Contains(output, `Hello from Nginx container`), output)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("check secrets content", func(t *testing.T) {
|
|
||||||
output := c.RunDockerCmd("exec", "compose-e2e-volume_nginx2_1", "cat", "/run/secrets/mysecret").Stdout()
|
|
||||||
assert.Assert(t, strings.Contains(output, `Hello from Nginx container`), output)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("check container bind-mounts specs", func(t *testing.T) {
|
|
||||||
res := c.RunDockerCmd("inspect", "compose-e2e-volume_nginx_1", "--format", "{{ json .HostConfig.Mounts }}")
|
|
||||||
output := res.Stdout()
|
|
||||||
// nolint
|
|
||||||
assert.Assert(t, strings.Contains(output, `"Type":"bind"`))
|
|
||||||
assert.Assert(t, strings.Contains(output, `"Target":"/usr/share/nginx/html"`))
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("cleanup volume project", func(t *testing.T) {
|
|
||||||
c.RunDockerCmd("compose", "--project-name", projectName, "down")
|
|
||||||
c.RunDockerCmd("volume", "rm", projectName+"_staticVol")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestComposePull(t *testing.T) {
|
func TestComposePull(t *testing.T) {
|
||||||
c := NewParallelE2eCLI(t, binDir)
|
c := NewParallelE2eCLI(t, binDir)
|
||||||
|
|
||||||
|
67
local/e2e/compose/networks_test.go
Normal file
67
local/e2e/compose/networks_test.go
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
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 (
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gotest.tools/v3/assert"
|
||||||
|
"gotest.tools/v3/icmd"
|
||||||
|
|
||||||
|
. "github.com/docker/compose-cli/utils/e2e"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNetworks(t *testing.T) {
|
||||||
|
c := NewParallelE2eCLI(t, binDir)
|
||||||
|
|
||||||
|
const projectName = "network_e2e"
|
||||||
|
|
||||||
|
t.Run("ensure we do not reuse previous networks", func(t *testing.T) {
|
||||||
|
c.RunDockerOrExitError("network", "rm", projectName+"_dbnet")
|
||||||
|
c.RunDockerOrExitError("network", "rm", "microservices")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("up", func(t *testing.T) {
|
||||||
|
c.RunDockerCmd("compose", "-f", "./fixtures/network-test/compose.yaml", "--project-name", projectName, "up", "-d")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("check running project", func(t *testing.T) {
|
||||||
|
res := c.RunDockerCmd("compose", "-p", projectName, "ps")
|
||||||
|
res.Assert(t, icmd.Expected{Out: `web`})
|
||||||
|
|
||||||
|
endpoint := "http://localhost:80"
|
||||||
|
output := HTTPGetWithRetry(t, endpoint+"/words/noun", http.StatusOK, 2*time.Second, 20*time.Second)
|
||||||
|
assert.Assert(t, strings.Contains(output, `"word":`))
|
||||||
|
|
||||||
|
res = c.RunDockerCmd("network", "ls")
|
||||||
|
res.Assert(t, icmd.Expected{Out: projectName + "_dbnet"})
|
||||||
|
res.Assert(t, icmd.Expected{Out: "microservices"})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("down", func(t *testing.T) {
|
||||||
|
_ = c.RunDockerCmd("compose", "--project-name", projectName, "down")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("check networks after down", func(t *testing.T) {
|
||||||
|
res := c.RunDockerCmd("network", "ls")
|
||||||
|
assert.Assert(t, !strings.Contains(res.Combined(), projectName), res.Combined())
|
||||||
|
assert.Assert(t, !strings.Contains(res.Combined(), "microservices"), res.Combined())
|
||||||
|
})
|
||||||
|
}
|
78
local/e2e/compose/volumes_test.go
Normal file
78
local/e2e/compose/volumes_test.go
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
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 (
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gotest.tools/v3/assert"
|
||||||
|
|
||||||
|
. "github.com/docker/compose-cli/utils/e2e"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestLocalComposeVolume(t *testing.T) {
|
||||||
|
c := NewParallelE2eCLI(t, binDir)
|
||||||
|
|
||||||
|
const projectName = "compose-e2e-volume"
|
||||||
|
|
||||||
|
t.Run("up with build and no image name, volume", func(t *testing.T) {
|
||||||
|
// ensure local test run does not reuse previously build image
|
||||||
|
c.RunDockerOrExitError("rmi", "compose-e2e-volume_nginx")
|
||||||
|
c.RunDockerOrExitError("volume", "rm", projectName+"_staticVol")
|
||||||
|
c.RunDockerOrExitError("volume", "rm", "myvolume")
|
||||||
|
c.RunDockerCmd("compose", "--workdir", "fixtures/volume-test", "--project-name", projectName, "up", "-d")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("access bind mount data", func(t *testing.T) {
|
||||||
|
output := HTTPGetWithRetry(t, "http://localhost:8090", http.StatusOK, 2*time.Second, 20*time.Second)
|
||||||
|
assert.Assert(t, strings.Contains(output, "Hello from Nginx container"))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("check container volume specs", func(t *testing.T) {
|
||||||
|
res := c.RunDockerCmd("inspect", "compose-e2e-volume_nginx2_1", "--format", "{{ json .Mounts }}")
|
||||||
|
output := res.Stdout()
|
||||||
|
// nolint
|
||||||
|
assert.Assert(t, strings.Contains(output, `"Destination":"/usr/src/app/node_modules","Driver":"local","Mode":"","RW":true,"Propagation":""`), output)
|
||||||
|
assert.Assert(t, strings.Contains(output, `"Destination":"/myconfig","Mode":"","RW":false,"Propagation":"rprivate"`), output)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("check config content", func(t *testing.T) {
|
||||||
|
output := c.RunDockerCmd("exec", "compose-e2e-volume_nginx2_1", "cat", "/myconfig").Stdout()
|
||||||
|
assert.Assert(t, strings.Contains(output, `Hello from Nginx container`), output)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("check secrets content", func(t *testing.T) {
|
||||||
|
output := c.RunDockerCmd("exec", "compose-e2e-volume_nginx2_1", "cat", "/run/secrets/mysecret").Stdout()
|
||||||
|
assert.Assert(t, strings.Contains(output, `Hello from Nginx container`), output)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("check container bind-mounts specs", func(t *testing.T) {
|
||||||
|
res := c.RunDockerCmd("inspect", "compose-e2e-volume_nginx_1", "--format", "{{ json .HostConfig.Mounts }}")
|
||||||
|
output := res.Stdout()
|
||||||
|
// nolint
|
||||||
|
assert.Assert(t, strings.Contains(output, `"Type":"bind"`))
|
||||||
|
assert.Assert(t, strings.Contains(output, `"Target":"/usr/share/nginx/html"`))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("cleanup volume project", func(t *testing.T) {
|
||||||
|
c.RunDockerCmd("compose", "--project-name", projectName, "down")
|
||||||
|
c.RunDockerCmd("volume", "rm", projectName+"_staticVol")
|
||||||
|
})
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user