Skip to content

Commit

Permalink
test: multi exporters
Browse files Browse the repository at this point in the history
Signed-off-by: CrazyMax <[email protected]>
  • Loading branch information
crazy-max committed Mar 1, 2024
1 parent 97e1ab8 commit 7189b43
Showing 1 changed file with 124 additions and 1 deletion.
125 changes: 124 additions & 1 deletion tests/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/containerd/containerd/platforms"
"github.com/containerd/continuity/fs/fstest"
"github.com/creack/pty"
"github.com/moby/buildkit/identity"
"github.com/moby/buildkit/util/appdefaults"
"github.com/moby/buildkit/util/contentutil"
"github.com/moby/buildkit/util/testutil"
Expand Down Expand Up @@ -54,6 +55,8 @@ var buildTests = []func(t *testing.T, sb integration.Sandbox){
testBuildShmSize,
testBuildUlimit,
testBuildRef,
testBuildMultiExporters,
testBuildLoadPush,
}

func testBuild(t *testing.T, sb integration.Sandbox) {
Expand Down Expand Up @@ -437,7 +440,7 @@ func testBuildNetworkModeBridge(t *testing.T, sb integration.Sandbox) {
})

// TODO: use stable buildkit image when v0.13.0 released
out, err := createCmd(sb, withArgs("--driver", "docker-container", "--buildkitd-flags=--oci-worker-net=bridge --allow-insecure-entitlement=network.host", "--driver-opt", "image=moby/buildkit:master"))
out, err := createCmd(sb, withArgs("--driver", "docker-container", "--buildkitd-flags=--oci-worker-net=bridge --allow-insecure-entitlement=network.host", "--driver-opt", "image=moby/buildkit:v0.13.0-rc3"))
require.NoError(t, err, out)
builderName = strings.TrimSpace(out)

Expand Down Expand Up @@ -542,6 +545,126 @@ func testBuildRef(t *testing.T, sb integration.Sandbox) {
require.NotEmpty(t, md.BuildRef)
}

func testBuildMultiExporters(t *testing.T, sb integration.Sandbox) {
if sb.Name() != "docker" {
t.Skip("skipping test for non-docker workers")
}

registry, err := sb.NewRegistry()
if errors.Is(err, integration.ErrRequirements) {
t.Skip(err.Error())
}
require.NoError(t, err)

targetReg := registry + "/buildx/registry:latest"
targetStore := "buildx:local-" + identity.NewID()

var builderName string
t.Cleanup(func() {
if builderName == "" {
return
}

cmd := dockerCmd(sb, withArgs("image", "rm", targetStore))
cmd.Stderr = os.Stderr
require.NoError(t, cmd.Run())

out, err := rmCmd(sb, withArgs(builderName))
require.NoError(t, err, out)
})

// TODO: use stable buildkit image when v0.13.0 released
out, err := createCmd(sb, withArgs("--driver", "docker-container", "--buildkitd-flags=--allow-insecure-entitlement=network.host", "--driver-opt", "image=moby/buildkit:v0.13.0-rc3"))
require.NoError(t, err, out)
builderName = strings.TrimSpace(out)

dir := createTestProject(t)

outputs := []string{
"--output", fmt.Sprintf("type=image,name=%s,push=true", targetReg),
"--output", fmt.Sprintf("type=docker,name=%s", targetStore),
"--output", fmt.Sprintf("type=oci,dest=%s/result", dir),
}
cmd := buildxCmd(sb, withArgs("build"), withArgs(outputs...), withArgs(dir))
cmd.Env = append(cmd.Env, "BUILDX_BUILDER="+builderName)
outb, err := cmd.CombinedOutput()
require.NoError(t, err, string(outb))

Check failure on line 591 in tests/build.go

View workflow job for this annotation

GitHub Actions / test-integration (docker, ./tests)

Failed: tests/TestIntegration/TestBuildMultiExporters/worker=docker

=== RUN TestIntegration/TestBuildMultiExporters/worker=docker === PAUSE TestIntegration/TestBuildMultiExporters/worker=docker === CONT TestIntegration/TestBuildMultiExporters/worker=docker build.go:591: Error Trace: /src/tests/build.go:591 /src/vendor/github.com/moby/buildkit/util/testutil/integration/run.go:93 /src/vendor/github.com/moby/buildkit/util/testutil/integration/run.go:207 Error: Received unexpected error: exit status 1 Test: TestIntegration/TestBuildMultiExporters/worker=docker Messages: #0 building with "sweet_neumann" instance using docker-container driver #1 [internal] booting buildkit #1 pulling image moby/buildkit:v0.13.0-rc3 #1 pulling image moby/buildkit:v0.13.0-rc3 3.4s done #1 creating container buildx_buildkit_sweet_neumann0 #1 creating container buildx_buildkit_sweet_neumann0 0.3s done #1 DONE 3.7s #2 [internal] load build definition from Dockerfile #2 transferring dockerfile: 154B done #2 DONE 0.0s #3 [internal] load metadata for docker.io/library/busybox:latest #3 DONE 0.5s #4 [internal] load .dockerignore #4 transferring context: 2B done #4 DONE 0.0s #5 [internal] load build context #5 transferring context: 33B done #5 DONE 0.0s #6 [base 1/3] FROM docker.io/library/busybox:latest@sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74 #6 resolve docker.io/library/busybox:latest@sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74 done #6 sha256:9ad63333ebc97e32b987ae66aa3cff81300e4c2e6d2f2395cef8a3ae18b249fe 2.22MB / 2.22MB 0.1s done #6 extracting sha256:9ad63333ebc97e32b987ae66aa3cff81300e4c2e6d2f2395cef8a3ae18b249fe 0.1s done #6 DONE 0.1s #7 [base 2/3] COPY foo /etc/foo #7 DONE 0.0s #8 [base 3/3] RUN cp /etc/foo /etc/bar #8 DONE 0.1s #9 [stage-1 1/1] COPY --from=base /etc/bar /bar #9 DONE 0.0s #10 exporting to docker image format #10 exporting layers 0.0s done #10 exporting manifest sha256:3ab03b299d3b62f500368b4fc717cb7b757adcc2c0bd94955cdf39ca249b5025 done #10 exporting config sha256:adc86d5b1d9470ab8ef23a489480406d95b54589f4b902719b7bfde4ad94f738 #10 exporting config sha256:adc86d5b1d9470ab8ef23a489480406d95b54589f4b902719b7bfde4ad94f738 done #10 sending tarball done #10 DONE 0.0s #11 exporting to oci image format #11 exporting layers 0.0s done #11 exporting manifest sha256:bdacc2ce7b23ea4af0e5367f1e36c9f1f5e0825fe4b63c93cab455f06eaab063 done #11 exporting config sha256:adc86d5b1d9470ab8ef23a489480406d95b54589f4b902719b7bfde4ad94f738 done #11 sending tarball done #11 DONE 0.0s #12 exporting to image #12 exporting layers 0.0s done #12 exporting manifest sha256:bdacc2ce7b23ea4af0e5367f1e36c9f1f5e0825fe4b63c93cab455f06eaab063 done #12 exporting config sha256:adc86d5b1d9470ab8ef23a48948040

// test registry
desc, provider, err := contentutil.ProviderFromRef(targetReg)
require.NoError(t, err)
_, err = testutil.ReadImages(sb.Context(), provider, desc)
require.NoError(t, err)

// test docker store
cmd = dockerCmd(sb, withArgs("image", "inspect", targetStore))
cmd.Stderr = os.Stderr
require.NoError(t, cmd.Run())

// test oci
_, err = os.ReadFile(fmt.Sprintf("%s/result", dir))
require.NoError(t, err)

// TODO: test metadata file when supported by multi exporters https:/docker/buildx/issues/2181
}

func testBuildLoadPush(t *testing.T, sb integration.Sandbox) {
if sb.Name() != "docker" {
t.Skip("skipping test for non-docker workers")
}

registry, err := sb.NewRegistry()
if errors.Is(err, integration.ErrRequirements) {
t.Skip(err.Error())
}
require.NoError(t, err)

target := registry + "/buildx/registry:" + identity.NewID()

var builderName string
t.Cleanup(func() {
if builderName == "" {
return
}

cmd := dockerCmd(sb, withArgs("image", "rm", target))
cmd.Stderr = os.Stderr
require.NoError(t, cmd.Run())

out, err := rmCmd(sb, withArgs(builderName))
require.NoError(t, err, out)
})

// TODO: use stable buildkit image when v0.13.0 released
out, err := createCmd(sb, withArgs("--driver", "docker-container", "--buildkitd-flags=--allow-insecure-entitlement=network.host", "--driver-opt", "image=moby/buildkit:v0.13.0-rc3"))
require.NoError(t, err, out)
builderName = strings.TrimSpace(out)

dir := createTestProject(t)

cmd := buildxCmd(sb, withArgs(
"build", "--push", "--load",
fmt.Sprintf("-t=%s", target),
dir,
))
cmd.Env = append(cmd.Env, "BUILDX_BUILDER="+builderName)
outb, err := cmd.CombinedOutput()
require.NoError(t, err, string(outb))

Check failure on line 652 in tests/build.go

View workflow job for this annotation

GitHub Actions / test-integration (docker, ./tests)

Failed: tests/TestIntegration/TestBuildLoadPush/worker=docker

=== RUN TestIntegration/TestBuildLoadPush/worker=docker === PAUSE TestIntegration/TestBuildLoadPush/worker=docker === CONT TestIntegration/TestBuildLoadPush/worker=docker build.go:652: Error Trace: /src/tests/build.go:652 /src/vendor/github.com/moby/buildkit/util/testutil/integration/run.go:93 /src/vendor/github.com/moby/buildkit/util/testutil/integration/run.go:207 Error: Received unexpected error: exit status 1 Test: TestIntegration/TestBuildLoadPush/worker=docker Messages: #0 building with "awesome_colden" instance using docker-container driver #1 [internal] booting buildkit #1 pulling image moby/buildkit:v0.13.0-rc3 #1 pulling image moby/buildkit:v0.13.0-rc3 3.6s done #1 creating container buildx_buildkit_awesome_colden0 #1 creating container buildx_buildkit_awesome_colden0 0.3s done #1 DONE 3.9s #2 [internal] load build definition from Dockerfile #2 transferring dockerfile: 154B done #2 DONE 0.0s #3 [internal] load metadata for docker.io/library/busybox:latest #3 DONE 0.6s #4 [internal] load .dockerignore #4 transferring context: 2B done #4 DONE 0.0s #5 [internal] load build context #5 transferring context: 33B done #5 DONE 0.0s #6 [base 1/3] FROM docker.io/library/busybox:latest@sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74 #6 resolve docker.io/library/busybox:latest@sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74 done #6 sha256:9ad63333ebc97e32b987ae66aa3cff81300e4c2e6d2f2395cef8a3ae18b249fe 2.22MB / 2.22MB 0.1s done #6 extracting sha256:9ad63333ebc97e32b987ae66aa3cff81300e4c2e6d2f2395cef8a3ae18b249fe 0.1s done #6 DONE 0.2s #7 [base 2/3] COPY foo /etc/foo #7 DONE 0.0s #8 [base 3/3] RUN cp /etc/foo /etc/bar #8 DONE 0.1s #9 [stage-1 1/1] COPY --from=base /etc/bar /bar #9 DONE 0.0s #10 exporting to image #10 exporting layers 0.0s done #10 exporting manifest sha256:04bb1af404b7c750c43d58766d64b033cb64387ea8eda221265529e3b162f512 done #10 exporting config sha256:f2c664e8dac9c1c4618fccb93d6eb15b546f2270c675b469f82ccb5822499b1b #10 exporting config sha256:f2c664e8dac9c1c4618fccb93d6eb15b546f2270c675b469f82ccb5822499b1b 0.6s done #10 exporting attestation manifest sha256:b25a01fa38fed96069091aa7558268fb57f93150b9437673273b512bb12d113a done #10 exporting manifest list sha256:ded0236f7d48579fad3dc6f102fe0032eeba188215ef1de33ef4ed5b0132e6df done #10 pushing layers done #10 ERROR: failed to push localhost:34183/buildx/registry:hivxvoi8f1qmd2co77laf7pv6: failed to do request: Head "http://localhost:34183/v2/buildx/registry/blobs/sha256:f2c664e8dac9c1c4618fccb93d6eb15b546f2270c675b469f82ccb5822499b1b": dial tcp 127.0.0.1:34183: connect: connection refused #11 exporting to docker image format #11 exporting layers 0.0s done #11 exporting manifest sha256:1af29845f88959f70595745f0c2cce94da2428d1d8caf452516a9d62a0fa1117 done

// test registry
desc, provider, err := contentutil.ProviderFromRef(target)
require.NoError(t, err)
_, err = testutil.ReadImages(sb.Context(), provider, desc)
require.NoError(t, err)

// test docker store
cmd = dockerCmd(sb, withArgs("image", "inspect", target))
cmd.Stderr = os.Stderr
require.NoError(t, cmd.Run())

// TODO: test metadata file when supported by multi exporters https:/docker/buildx/issues/2181
}

func createTestProject(t *testing.T) string {
dockerfile := []byte(`
FROM busybox:latest AS base
Expand Down

0 comments on commit 7189b43

Please sign in to comment.