diff --git a/option/option.go b/option/option.go index 39fbb67..d2bee36 100644 --- a/option/option.go +++ b/option/option.go @@ -6,8 +6,10 @@ package option import ( "errors" + "fmt" "os" "os/exec" + "strings" ) // Option customizes how tests are run. @@ -50,3 +52,31 @@ func (o *Option) NewCmd(args ...string) *exec.Cmd { cmd.Env = append(os.Environ(), o.env...) return cmd } + +// UpdateEnv updates the environment variable for the key name of the input. +func (o *Option) UpdateEnv(envKey, envValue string) { + env := fmt.Sprintf("%s=%s", envKey, envValue) + if i, exists := containsEnv(o.env, envKey); exists { + o.env[i] = env + } else { + o.env = append(o.env, env) + } +} + +// DeleteEnv deletes the environment variable for the key name of the input. +func (o *Option) DeleteEnv(envKey string) { + if i, exists := containsEnv(o.env, envKey); exists { + o.env = append(o.env[:i], o.env[i+1:]...) + } +} + +// containsEnv determines whether an environment variable exists. +func containsEnv(envs []string, targetEnvKey string) (int, bool) { + for i, env := range envs { + if strings.Split(env, "=")[0] == targetEnvKey { + return i, true + } + } + + return -1, false +} diff --git a/tests/compose_build.go b/tests/compose_build.go index 3ece4d7..effe1af 100644 --- a/tests/compose_build.go +++ b/tests/compose_build.go @@ -44,6 +44,22 @@ func ComposeBuild(o *option.Option) { gomega.Expect(output).Should(gomega.Equal("Compose build test")) }) + ginkgo.It("should build services defined in the compose file specified by the COMPOSE_FILE environment variable", func() { + envKey := "COMPOSE_FILE" + o.UpdateEnv(envKey, composeFilePath) + + command.Run(o, "compose", "build") + + imageList := command.GetAllImageNames(o) + gomega.Expect(imageList).Should(gomega.ContainElement(gomega.HaveSuffix(imageSuffix[0]))) + gomega.Expect(imageList).Should(gomega.ContainElement(gomega.HaveSuffix(imageSuffix[1]))) + // The built image should print 'Compose build test' when run. + output := command.StdoutStr(o, "run", localImages[defaultImage]) + gomega.Expect(output).Should(gomega.Equal("Compose build test")) + + o.DeleteEnv(envKey) + }) + ginkgo.It("should output progress in plain text format", func() { composeBuildOutput := command.StderrStr(o, "compose", "build", "--progress", "plain", "--no-cache", "--file", composeFilePath)