diff --git a/pkg/compose/ls_test.go b/pkg/compose/ls_test.go index 279fb2d67..0d3b9dd5b 100644 --- a/pkg/compose/ls_test.go +++ b/pkg/compose/ls_test.go @@ -17,6 +17,7 @@ package compose import ( + "fmt" "testing" "github.com/docker/compose/v2/pkg/api" @@ -66,3 +67,56 @@ func TestStacksMixedStatus(t *testing.T) { assert.Equal(t, combinedStatus([]string{"running", "running", "running"}), "running(3)") assert.Equal(t, combinedStatus([]string{"running", "exited", "running"}), "exited(1), running(2)") } + +func TestCombinedConfigFiles(t *testing.T) { + containersByLabel := map[string][]moby.Container{ + "project1": { + { + ID: "service1", + State: "running", + Labels: map[string]string{api.ProjectLabel: "project1", api.ConfigFilesLabel: "/home/docker-compose.yaml"}, + }, + { + ID: "service2", + State: "running", + Labels: map[string]string{api.ProjectLabel: "project1", api.ConfigFilesLabel: "/home/docker-compose.yaml"}, + }, + }, + "project2": { + { + ID: "service3", + State: "running", + Labels: map[string]string{api.ProjectLabel: "project2", api.ConfigFilesLabel: "/home/project2-docker-compose.yaml"}, + }, + }, + "project3": { + { + ID: "service4", + State: "running", + Labels: map[string]string{api.ProjectLabel: "project3"}, + }, + }, + } + + testData := map[string]struct { + ConfigFiles string + Error error + }{ + "project1": {ConfigFiles: "/home/docker-compose.yaml", Error: nil}, + "project2": {ConfigFiles: "/home/project2-docker-compose.yaml", Error: nil}, + "project3": {ConfigFiles: "", Error: fmt.Errorf("No label %q set on container %q of compose project", api.ConfigFilesLabel, "service4")}, + } + + for project, containers := range containersByLabel { + configFiles, err := combinedConfigFiles(containers) + + expected := testData[project] + + if expected.Error != nil { + assert.Equal(t, err.Error(), expected.Error.Error()) + } else { + assert.Equal(t, err, expected.Error) + } + assert.Equal(t, configFiles, expected.ConfigFiles) + } +}