compose/pkg/e2e/container_name_test.go
Nicolas De Loof 6bc1b36516 test(e2e): expose, container_name, ipc and wait scenarios
- TestExposeRange keeps its regression link (#13378), the invariant
  being simply that up accepts a port range in expose.
- TestUpContainerNameConflict interpolates a project-scoped
  container_name instead of the fixture's global 'test', so parallel
  runs cannot collide on it.
- TestIPC demonstrates the CLI() escape hatch: the external container
  the 'container:' mode points at is created eagerly before the steps,
  so its id is available to the declarative checks. (Runs only in CI:
  ipc container: mode is rejected by Docker Desktop and dind daemons —
  'restricted host mount' — for the legacy test as well.)
- wait scenarios observe which services exited instead of trusting the
  command's silence; TestWaitOnInfinity stays legacy, the DSL has no
  notion of a still-running command. The wait fixture stays for it;
  ipc-test and container_name fixtures are removed.

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2026-08-18 16:49:56 +02:00

44 lines
1.5 KiB
Go

//go:build !windows
/*
Copyright 2022 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 (
"testing"
)
func TestUpContainerNameConflict(t *testing.T) {
s := NewScenario(t, "two services claiming the same container_name must be rejected together, but each must run alone")
name := s.Project() + "-fixed"
s.Env("FIXED_NAME="+name).
Step("up with both services is rejected over the name conflict",
ComposeCmd("up").MayFail(),
ExitCode(1),
OutputContains(`container name "`+name+`" is already in use`)).
Step("the failed up leaves nothing behind",
ComposeCmd("down")).
Step("the first service runs alone under the shared name",
ComposeCmd("up", "test"),
ServiceState("test", "exited")).
Step("down frees the name",
ComposeCmd("down"),
ServiceNotCreated("test")).
Step("the other service runs alone under the shared name",
ComposeCmd("up", "another_test"),
ServiceState("another_test", "exited"))
}