lifecycle/acceptance/acceptance_test.go

160 lines
4.1 KiB
Go

package acceptance
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"runtime"
"testing"
"github.com/sclevine/spec"
"github.com/sclevine/spec/report"
"github.com/buildpacks/lifecycle/api"
h "github.com/buildpacks/lifecycle/testhelpers"
)
const (
expectedVersion = "some-version"
expectedCommit = "asdf123"
)
var (
latestPlatformAPI = api.Platform.Latest().String()
buildDir string
)
func TestVersion(t *testing.T) {
var err error
buildDir, err = os.MkdirTemp("", "lifecycle-acceptance")
h.AssertNil(t, err)
t.Cleanup(func() {
h.AssertNil(t, os.RemoveAll(buildDir))
})
outDir := filepath.Join(buildDir, fmt.Sprintf("%s-%s", runtime.GOOS, runtime.GOARCH), "lifecycle")
h.AssertNil(t, os.MkdirAll(outDir, 0755))
h.MakeAndCopyLifecycle(t,
runtime.GOOS,
runtime.GOARCH,
outDir,
"LIFECYCLE_VERSION=some-version",
"SCM_COMMIT="+expectedCommit,
)
spec.Run(t, "acceptance", testVersion, spec.Parallel(), spec.Report(report.Terminal{}))
}
type testCase struct {
description string
focus bool
command string
args []string
}
func testVersion(t *testing.T, when spec.G, it spec.S) {
when("All", func() {
when("version flag is set", func() {
for _, tc := range []testCase{
{
description: "detector: only -version is present",
command: "detector",
args: []string{"-version"},
},
{
description: "detector: other params are set",
command: "detector",
args: []string{"-app=/some/dir", "-version"},
},
{
description: "analyzer: only -version is present",
command: "analyzer",
args: []string{"-version"},
},
{
description: "analyzer: other params are set",
command: "analyzer",
args: []string{"-daemon", "-version"},
},
{
description: "restorer: only -version is present",
command: "restorer",
args: []string{"-version"},
},
{
description: "restorer: other params are set",
command: "restorer",
args: []string{"-cache-dir=/some/dir", "-version"},
},
{
description: "restorer: only -version is present",
command: "restorer",
args: []string{"-version"},
},
{
description: "restorer: other params are set",
command: "restorer",
args: []string{"-cache-dir=/some/dir", "-version"},
},
{
description: "builder: only -version is present",
command: "builder",
args: []string{"-version"},
},
{
description: "builder: other params are set",
command: "builder",
args: []string{"-app=/some/dir", "-version"},
},
{
description: "exporter: only -version is present",
command: "exporter",
args: []string{"-version"},
},
{
description: "exporter: other params are set",
command: "exporter",
args: []string{"-app=/some/dir", "-version"},
},
{
description: "rebaser: only -version is present",
command: "rebaser",
args: []string{"-version"},
},
{
description: "rebaser: other params are set",
command: "rebaser",
args: []string{"-daemon", "-version"},
},
{
description: "lifecycle -version",
command: "lifecycle",
args: []string{"-version"},
},
} {
tc := tc
w := when
if tc.focus {
w = when.Focus
}
w(tc.description, func() {
it("only prints the version", func() {
cmd := lifecycleCmd(tc.command, tc.args...)
cmd.Env = []string{fmt.Sprintf("CNB_PLATFORM_API=%s", api.Platform.Latest().String())}
output, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("failed to run %v\n OUTPUT: %s\n ERROR: %s\n", cmd.Args, output, err)
}
h.AssertStringContains(t, string(output), expectedVersion+"+"+expectedCommit)
})
})
}
})
})
}
func lifecycleCmd(phase string, args ...string) *exec.Cmd {
return exec.Command(filepath.Join(buildDir, fmt.Sprintf("%s-%s", runtime.GOOS, runtime.GOARCH), "lifecycle", phase), args...) // #nosec G204
}