From bd0b425734408559b09a15e50a438f29a8ffd9b8 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:10:00 +0200 Subject: [PATCH] test: bake print Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- tests/bake.go | 46 ++++++++++++++++++++++++++++++++++++++++++++ tests/integration.go | 10 ++++++++++ 2 files changed, 56 insertions(+) diff --git a/tests/bake.go b/tests/bake.go index 47f85eac..364b697d 100644 --- a/tests/bake.go +++ b/tests/bake.go @@ -1,6 +1,7 @@ package tests import ( + "bytes" "encoding/json" "fmt" "os" @@ -9,6 +10,7 @@ import ( "testing" "github.com/containerd/continuity/fs/fstest" + "github.com/docker/buildx/bake" "github.com/docker/buildx/util/gitutil" "github.com/moby/buildkit/client" "github.com/moby/buildkit/identity" @@ -28,6 +30,7 @@ func bakeCmd(sb integration.Sandbox, opts ...cmdOpt) (string, error) { } var bakeTests = []func(t *testing.T, sb integration.Sandbox){ + testBakePrint, testBakeLocal, testBakeLocalMulti, testBakeRemote, @@ -55,6 +58,49 @@ var bakeTests = []func(t *testing.T, sb integration.Sandbox){ testBakeCallCheckFlag, } +func testBakePrint(t *testing.T, sb integration.Sandbox) { + dockerfile := []byte(` +FROM busybox +ARG HELLO +RUN echo "Hello ${HELLO}" + `) + bakefile := []byte(` +target "build" { + args = { + HELLO = "foo" + } +} +`) + dir := tmpdir( + t, + fstest.CreateFile("docker-bake.hcl", bakefile, 0600), + fstest.CreateFile("Dockerfile", dockerfile, 0600), + ) + + cmd := buildxCmd(sb, withDir(dir), withArgs("bake", "--print", "build")) + stdout := bytes.Buffer{} + stderr := bytes.Buffer{} + cmd.Stdout = &stdout + cmd.Stderr = &stderr + require.NoError(t, cmd.Run(), stdout.String(), stderr.String()) + + var def struct { + Group map[string]*bake.Group `json:"group,omitempty"` + Target map[string]*bake.Target `json:"target"` + } + require.NoError(t, json.Unmarshal(stdout.Bytes(), &def)) + + require.Len(t, def.Group, 1) + require.Contains(t, def.Group, "default") + + require.Equal(t, []string{"build"}, def.Group["default"].Targets) + require.Len(t, def.Target, 1) + require.Contains(t, def.Target, "build") + require.Equal(t, ".", *def.Target["build"].Context) + require.Equal(t, "Dockerfile", *def.Target["build"].Dockerfile) + require.Equal(t, map[string]*string{"HELLO": ptrstr("foo")}, def.Target["build"].Args) +} + func testBakeLocal(t *testing.T, sb integration.Sandbox) { dockerfile := []byte(` FROM scratch diff --git a/tests/integration.go b/tests/integration.go index 920d1dce..2a4e6a62 100644 --- a/tests/integration.go +++ b/tests/integration.go @@ -4,6 +4,7 @@ import ( "os" "os/exec" "path/filepath" + "reflect" "strconv" "strings" "sync" @@ -208,3 +209,12 @@ func skipNoCompatBuildKit(t *testing.T, sb integration.Sandbox, constraint strin t.Skipf("buildkit version %s does not match %s constraint (%s)", buildkitVersion(t, sb), constraint, msg) } } + +func ptrstr(s interface{}) *string { + var n *string + if reflect.ValueOf(s).Kind() == reflect.String { + ss := s.(string) + n = &ss + } + return n +}