From 34d6f5e7ee2269597cb72f802d62458621c606ef Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 14 Mar 2023 00:20:55 +0100 Subject: [PATCH 1/6] integration: enforce features compat through env vars Signed-off-by: CrazyMax (cherry picked from commit e39c44de2410050b221c723039a875683d3483ef) --- hack/test | 4 +-- util/testutil/integration/sandbox.go | 40 +++++++++++++++++++--------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/hack/test b/hack/test index 929733db1db5..7b2ffa30cdff 100755 --- a/hack/test +++ b/hack/test @@ -72,7 +72,7 @@ if ! docker container inspect "$cacheVolume" >/dev/null 2>/dev/null; then fi if [ "$TEST_INTEGRATION" == 1 ]; then - cid=$(docker create --rm -v /tmp $coverageVol --volumes-from=$cacheVolume -e TEST_DOCKERD -e SKIP_INTEGRATION_TESTS ${BUILDKIT_INTEGRATION_SNAPSHOTTER:+"-eBUILDKIT_INTEGRATION_SNAPSHOTTER"} -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry --privileged $iid go test $coverageFlags ${TESTFLAGS:--v} ${TESTPKGS:-./...}) + cid=$(docker create --rm -v /tmp $coverageVol --volumes-from=$cacheVolume -e TEST_DOCKERD -e SKIP_INTEGRATION_TESTS -e BUILDKIT_TEST_ENABLE_FEATURES -e BUILDKIT_TEST_DISABLE_FEATURES ${BUILDKIT_INTEGRATION_SNAPSHOTTER:+"-eBUILDKIT_INTEGRATION_SNAPSHOTTER"} -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry --privileged $iid go test $coverageFlags ${TESTFLAGS:--v} ${TESTPKGS:-./...}) if [ "$TEST_DOCKERD" = "1" ]; then docker cp "$TEST_DOCKERD_BINARY" $cid:/usr/bin/dockerd fi @@ -112,7 +112,7 @@ if [ "$TEST_DOCKERFILE" == 1 ]; then if [ -s $tarout ]; then if [ "$release" = "mainline" ] || [ "$release" = "labs" ] || [ -n "$DOCKERFILE_RELEASES_CUSTOM" ] || [ "$GITHUB_ACTIONS" = "true" ]; then - cid=$(docker create -v /tmp $coverageVol --rm --privileged --volumes-from=$cacheVolume -e TEST_DOCKERD -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry -e BUILDKIT_WORKER_RANDOM -e FRONTEND_GATEWAY_ONLY=local:/$release.tar -e EXTERNAL_DF_FRONTEND=/dockerfile-frontend $iid go test $coverageFlags --count=1 -tags "$buildtags" ${TESTFLAGS:--v} ./frontend/dockerfile) + cid=$(docker create -v /tmp $coverageVol --rm --privileged --volumes-from=$cacheVolume -e TEST_DOCKERD -e BUILDKIT_TEST_ENABLE_FEATURES -e BUILDKIT_TEST_DISABLE_FEATURES -e BUILDKIT_REGISTRY_MIRROR_DIR=/root/.cache/registry -e BUILDKIT_WORKER_RANDOM -e FRONTEND_GATEWAY_ONLY=local:/$release.tar -e EXTERNAL_DF_FRONTEND=/dockerfile-frontend $iid go test $coverageFlags --count=1 -tags "$buildtags" ${TESTFLAGS:--v} ./frontend/dockerfile) docker cp $tarout $cid:/$release.tar if [ "$TEST_DOCKERD" = "1" ]; then docker cp "$TEST_DOCKERD_BINARY" $cid:/usr/bin/dockerd diff --git a/util/testutil/integration/sandbox.go b/util/testutil/integration/sandbox.go index 8eb90cdc0caa..b2b58abdfda8 100644 --- a/util/testutil/integration/sandbox.go +++ b/util/testutil/integration/sandbox.go @@ -46,6 +46,20 @@ func (b backend) Snapshotter() string { } func (b backend) isUnsupportedFeature(feature string) bool { + if enabledFeatures := os.Getenv("BUILDKIT_TEST_ENABLE_FEATURES"); enabledFeatures != "" { + for _, enabledFeature := range strings.Split(enabledFeatures, ",") { + if feature == enabledFeature { + return false + } + } + } + if disabledFeatures := os.Getenv("BUILDKIT_TEST_DISABLE_FEATURES"); disabledFeatures != "" { + for _, disabledFeature := range strings.Split(disabledFeatures, ",") { + if feature == disabledFeature { + return true + } + } + } for _, unsupportedFeature := range b.unsupportedFeatures { if feature == unsupportedFeature { return true @@ -266,22 +280,22 @@ func printLogs(logs map[string]*bytes.Buffer, f func(args ...interface{})) { } const ( - FeatureCacheExport = "cache export" - FeatureCacheImport = "cache import" - FeatureDirectPush = "direct push" - FeatureFrontendOutline = "frontend outline" - FeatureFrontendTargets = "frontend targets" - FeatureImageExporter = "image exporter" + FeatureCacheExport = "cache_export" + FeatureCacheImport = "cache_import" + FeatureDirectPush = "direct_push" + FeatureFrontendOutline = "frontend_outline" + FeatureFrontendTargets = "frontend_targets" + FeatureImageExporter = "image_exporter" FeatureInfo = "info" - FeatureMultiCacheExport = "multi cache export" - FeatureMultiPlatform = "multi-platform" - FeatureOCIExporter = "oci exporter" - FeatureOCILayout = "oci layout" + FeatureMultiCacheExport = "multi_cache_export" + FeatureMultiPlatform = "multi_platform" + FeatureOCIExporter = "oci_exporter" + FeatureOCILayout = "oci_layout" FeatureProvenance = "provenance" FeatureSBOM = "sbom" - FeatureSecurityMode = "security mode" - FeatureSourceDateEpoch = "source date epoch" - FeatureCNINetwork = "cni network" + FeatureSecurityMode = "security_mode" + FeatureSourceDateEpoch = "source_date_epoch" + FeatureCNINetwork = "cni_network" ) var features = map[string]struct{}{ From 8a6503c22ddce1caae1de93f9c880cfe69e43f47 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 14 Mar 2023 00:21:24 +0100 Subject: [PATCH 2/6] integration: add FeatureCacheBackend* compat Signed-off-by: CrazyMax (cherry picked from commit 19969b9ae34b59a8f8e0eddf4e175089d0426bee) --- client/client_test.go | 37 ++++++++----- frontend/dockerfile/dockerfile_test.go | 11 +++- util/testutil/integration/dockerd.go | 5 ++ util/testutil/integration/sandbox.go | 76 +++++++++++++++----------- 4 files changed, 81 insertions(+), 48 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index b97eb75f274b..230fd8352269 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -246,7 +246,7 @@ func newContainerd(cdAddress string) (*containerd.Client, error) { // moby/buildkit#1336 func testCacheExportCacheKeyLoop(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheBackendLocal) c, err := New(sb.Context(), sb.Address()) require.NoError(t, err) defer c.Close() @@ -3748,7 +3748,7 @@ func testBuildPushAndValidate(t *testing.T, sb integration.Sandbox) { } func testStargzLazyRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) requiresLinux(t) cdAddress := sb.ContainerdAddress() if cdAddress == "" || sb.Snapshotter() != "stargz" { @@ -3895,7 +3895,12 @@ func testStargzLazyRegistryCacheImportExport(t *testing.T, sb integration.Sandbo } func testStargzLazyInlineCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendInline, + integration.FeatureCacheBackendRegistry, + ) requiresLinux(t) cdAddress := sb.ContainerdAddress() if cdAddress == "" || sb.Snapshotter() != "stargz" { @@ -4310,7 +4315,7 @@ func testLazyImagePush(t *testing.T, sb integration.Sandbox) { } func testZstdLocalCacheExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheBackendLocal) c, err := New(sb.Context(), sb.Address()) require.NoError(t, err) defer c.Close() @@ -4369,7 +4374,7 @@ func testZstdLocalCacheExport(t *testing.T, sb integration.Sandbox) { } func testCacheExportIgnoreError(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheBackendLocal) c, err := New(sb.Context(), sb.Address()) require.NoError(t, err) defer c.Close() @@ -4476,7 +4481,7 @@ func testCacheExportIgnoreError(t *testing.T, sb integration.Sandbox) { } func testUncompressedLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendLocal) dir := t.TempDir() im := CacheOptionsEntry{ Type: "local", @@ -4496,7 +4501,7 @@ func testUncompressedLocalCacheImportExport(t *testing.T, sb integration.Sandbox } func testUncompressedRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { t.Skip(err.Error()) @@ -4521,7 +4526,7 @@ func testUncompressedRegistryCacheImportExport(t *testing.T, sb integration.Sand } func testZstdLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendLocal) dir := t.TempDir() im := CacheOptionsEntry{ Type: "local", @@ -4542,7 +4547,7 @@ func testZstdLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { } func testZstdRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { t.Skip(err.Error()) @@ -4630,7 +4635,7 @@ func testBasicCacheImportExport(t *testing.T, sb integration.Sandbox, cacheOptio } func testBasicRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { t.Skip(err.Error()) @@ -4647,7 +4652,7 @@ func testBasicRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { } func testMultipleRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { t.Skip(err.Error()) @@ -4670,7 +4675,7 @@ func testMultipleRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) } func testBasicLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendLocal) dir := t.TempDir() im := CacheOptionsEntry{ Type: "local", @@ -4688,7 +4693,13 @@ func testBasicLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { } func testBasicInlineCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureDirectPush, integration.FeatureCacheImport) + integration.CheckFeatureCompat(t, sb, + integration.FeatureDirectPush, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendInline, + integration.FeatureCacheBackendRegistry, + ) requiresLinux(t) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { diff --git a/frontend/dockerfile/dockerfile_test.go b/frontend/dockerfile/dockerfile_test.go index ed49f9c8502a..2ebcd9ab8f05 100644 --- a/frontend/dockerfile/dockerfile_test.go +++ b/frontend/dockerfile/dockerfile_test.go @@ -419,7 +419,7 @@ RUN [ "$(cat testfile)" == "contents0" ] } func testExportCacheLoop(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendLocal) f := getFrontend(t, sb) dockerfile := []byte(` @@ -3948,7 +3948,12 @@ ONBUILD RUN mkdir -p /out && echo -n 11 >> /out/foo } func testCacheMultiPlatformImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureDirectPush) + integration.CheckFeatureCompat(t, sb, + integration.FeatureDirectPush, + integration.FeatureCacheExport, + integration.FeatureCacheBackendInline, + integration.FeatureCacheBackendRegistry, + ) f := getFrontend(t, sb) registry, err := sb.NewRegistry() @@ -4071,7 +4076,7 @@ COPY --from=base arch / } func testCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheBackendLocal) f := getFrontend(t, sb) registry, err := sb.NewRegistry() diff --git a/util/testutil/integration/dockerd.go b/util/testutil/integration/dockerd.go index b56390ec9598..a69298607d6f 100644 --- a/util/testutil/integration/dockerd.go +++ b/util/testutil/integration/dockerd.go @@ -25,6 +25,11 @@ func InitDockerdWorker() { unsupported: []string{ FeatureCacheExport, FeatureCacheImport, + FeatureCacheBackendAzblob, + FeatureCacheBackendGha, + FeatureCacheBackendLocal, + FeatureCacheBackendRegistry, + FeatureCacheBackendS3, FeatureDirectPush, FeatureImageExporter, FeatureMultiCacheExport, diff --git a/util/testutil/integration/sandbox.go b/util/testutil/integration/sandbox.go index b2b58abdfda8..9210922560d6 100644 --- a/util/testutil/integration/sandbox.go +++ b/util/testutil/integration/sandbox.go @@ -280,41 +280,53 @@ func printLogs(logs map[string]*bytes.Buffer, f func(args ...interface{})) { } const ( - FeatureCacheExport = "cache_export" - FeatureCacheImport = "cache_import" - FeatureDirectPush = "direct_push" - FeatureFrontendOutline = "frontend_outline" - FeatureFrontendTargets = "frontend_targets" - FeatureImageExporter = "image_exporter" - FeatureInfo = "info" - FeatureMultiCacheExport = "multi_cache_export" - FeatureMultiPlatform = "multi_platform" - FeatureOCIExporter = "oci_exporter" - FeatureOCILayout = "oci_layout" - FeatureProvenance = "provenance" - FeatureSBOM = "sbom" - FeatureSecurityMode = "security_mode" - FeatureSourceDateEpoch = "source_date_epoch" - FeatureCNINetwork = "cni_network" + FeatureCacheExport = "cache_export" + FeatureCacheImport = "cache_import" + FeatureCacheBackendAzblob = "cache_backend_azblob" + FeatureCacheBackendGha = "cache_backend_gha" + FeatureCacheBackendInline = "cache_backend_inline" + FeatureCacheBackendLocal = "cache_backend_local" + FeatureCacheBackendRegistry = "cache_backend_registry" + FeatureCacheBackendS3 = "cache_backend_s3" + FeatureDirectPush = "direct_push" + FeatureFrontendOutline = "frontend_outline" + FeatureFrontendTargets = "frontend_targets" + FeatureImageExporter = "image_exporter" + FeatureInfo = "info" + FeatureMultiCacheExport = "multi_cache_export" + FeatureMultiPlatform = "multi_platform" + FeatureOCIExporter = "oci_exporter" + FeatureOCILayout = "oci_layout" + FeatureProvenance = "provenance" + FeatureSBOM = "sbom" + FeatureSecurityMode = "security_mode" + FeatureSourceDateEpoch = "source_date_epoch" + FeatureCNINetwork = "cni_network" ) var features = map[string]struct{}{ - FeatureCacheExport: {}, - FeatureCacheImport: {}, - FeatureDirectPush: {}, - FeatureFrontendOutline: {}, - FeatureFrontendTargets: {}, - FeatureImageExporter: {}, - FeatureInfo: {}, - FeatureMultiCacheExport: {}, - FeatureMultiPlatform: {}, - FeatureOCIExporter: {}, - FeatureOCILayout: {}, - FeatureProvenance: {}, - FeatureSBOM: {}, - FeatureSecurityMode: {}, - FeatureSourceDateEpoch: {}, - FeatureCNINetwork: {}, + FeatureCacheExport: {}, + FeatureCacheImport: {}, + FeatureCacheBackendAzblob: {}, + FeatureCacheBackendGha: {}, + FeatureCacheBackendInline: {}, + FeatureCacheBackendLocal: {}, + FeatureCacheBackendRegistry: {}, + FeatureCacheBackendS3: {}, + FeatureDirectPush: {}, + FeatureFrontendOutline: {}, + FeatureFrontendTargets: {}, + FeatureImageExporter: {}, + FeatureInfo: {}, + FeatureMultiCacheExport: {}, + FeatureMultiPlatform: {}, + FeatureOCIExporter: {}, + FeatureOCILayout: {}, + FeatureProvenance: {}, + FeatureSBOM: {}, + FeatureSecurityMode: {}, + FeatureSourceDateEpoch: {}, + FeatureCNINetwork: {}, } func CheckFeatureCompat(t *testing.T, sb Sandbox, reason ...string) { From fb08b70008846a760e59bc274d8ba8507fdab761 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 14 Mar 2023 00:23:41 +0100 Subject: [PATCH 3/6] integration: add FeatureMergeDiff compat Signed-off-by: CrazyMax (cherry picked from commit 5102c5a3bd9207e1324e979883df1b07b08623ae) --- client/client_test.go | 3 ++- client/mergediff_test.go | 1 + util/testutil/integration/sandbox.go | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/client/client_test.go b/client/client_test.go index 230fd8352269..0aed62c8965d 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -5625,6 +5625,7 @@ func testProxyEnv(t *testing.T, sb integration.Sandbox) { } func testMergeOp(t *testing.T, sb integration.Sandbox) { + integration.CheckFeatureCompat(t, sb, integration.FeatureMergeDiff) requiresLinux(t) c, err := New(sb.Context(), sb.Address()) @@ -5737,7 +5738,7 @@ func testMergeOpCacheMax(t *testing.T, sb integration.Sandbox) { func testMergeOpCache(t *testing.T, sb integration.Sandbox, mode string) { t.Helper() - integration.CheckFeatureCompat(t, sb, integration.FeatureDirectPush) + integration.CheckFeatureCompat(t, sb, integration.FeatureDirectPush, integration.FeatureMergeDiff) requiresLinux(t) cdAddress := sb.ContainerdAddress() diff --git a/client/mergediff_test.go b/client/mergediff_test.go index 61fdc9b5062c..b7fc957b4468 100644 --- a/client/mergediff_test.go +++ b/client/mergediff_test.go @@ -1187,6 +1187,7 @@ func (tc verifyContents) Name() string { } func (tc verifyContents) Run(t *testing.T, sb integration.Sandbox) { + integration.CheckFeatureCompat(t, sb, integration.FeatureMergeDiff) if tc.skipOnRootless && sb.Rootless() { t.Skip("rootless") } diff --git a/util/testutil/integration/sandbox.go b/util/testutil/integration/sandbox.go index 9210922560d6..1289bb52c5a9 100644 --- a/util/testutil/integration/sandbox.go +++ b/util/testutil/integration/sandbox.go @@ -293,6 +293,7 @@ const ( FeatureFrontendTargets = "frontend_targets" FeatureImageExporter = "image_exporter" FeatureInfo = "info" + FeatureMergeDiff = "merge_diff" FeatureMultiCacheExport = "multi_cache_export" FeatureMultiPlatform = "multi_platform" FeatureOCIExporter = "oci_exporter" @@ -318,6 +319,7 @@ var features = map[string]struct{}{ FeatureFrontendTargets: {}, FeatureImageExporter: {}, FeatureInfo: {}, + FeatureMergeDiff: {}, FeatureMultiCacheExport: {}, FeatureMultiPlatform: {}, FeatureOCIExporter: {}, From 7de4fb1908e232122f859979ca39ea5885f92ffe Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 14 Mar 2023 16:12:58 +0100 Subject: [PATCH 4/6] integration: missing feature compat check for cache Signed-off-by: CrazyMax (cherry picked from commit 7f6cae2b379c791e4c134618f56973a661c59fd6) --- client/client_test.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/client_test.go b/client/client_test.go index 0aed62c8965d..bacfe70a2601 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -4374,7 +4374,12 @@ func testZstdLocalCacheExport(t *testing.T, sb integration.Sandbox) { } func testCacheExportIgnoreError(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheBackendLocal) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheBackendS3, + integration.FeatureCacheBackendLocal, + integration.FeatureCacheBackendRegistry, + ) c, err := New(sb.Context(), sb.Address()) require.NoError(t, err) defer c.Close() From 837e0e97cb2e7fbd588177ce89c6c3313b15116e Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 14 Mar 2023 17:55:15 +0100 Subject: [PATCH 5/6] integration: split feature compat check for subtests Signed-off-by: CrazyMax (cherry picked from commit 365598b01f759c1f1ff92892ac14dc8602cf24bf) --- client/client_test.go | 72 +++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index bacfe70a2601..6ca36d2a71a6 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -975,7 +975,6 @@ func testSecurityModeErrors(t *testing.T, sb integration.Sandbox) { } func testFrontendImageNaming(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureOCIExporter, integration.FeatureDirectPush) requiresLinux(t) c, err := New(sb.Context(), sb.Address()) require.NoError(t, err) @@ -1084,12 +1083,15 @@ func testFrontendImageNaming(t *testing.T, sb integration.Sandbox) { switch exp { case ExporterOCI: + integration.CheckFeatureCompat(t, sb, integration.FeatureOCIExporter) t.Skip("oci exporter does not support named images") case ExporterDocker: + integration.CheckFeatureCompat(t, sb, integration.FeatureOCIExporter) outW, err := os.Create(out) require.NoError(t, err) so.Exports[0].Output = fixedWriteCloser(outW) case ExporterImage: + integration.CheckFeatureCompat(t, sb, integration.FeatureDirectPush) imageName = registry + "/" + imageName so.Exports[0].Attrs["push"] = "true" } @@ -3748,7 +3750,11 @@ func testBuildPushAndValidate(t *testing.T, sb integration.Sandbox) { } func testStargzLazyRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheBackendRegistry, + integration.FeatureOCIExporter, + ) requiresLinux(t) cdAddress := sb.ContainerdAddress() if cdAddress == "" || sb.Snapshotter() != "stargz" { @@ -3808,6 +3814,7 @@ func testStargzLazyRegistryCacheImportExport(t *testing.T, sb integration.Sandbo // clear all local state out ensurePruneAll(t, c, sb) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheImport, integration.FeatureDirectPush) // stargz layers should be lazy even for executing something on them def, err = baseDef. @@ -4374,12 +4381,7 @@ func testZstdLocalCacheExport(t *testing.T, sb integration.Sandbox) { } func testCacheExportIgnoreError(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, - integration.FeatureCacheExport, - integration.FeatureCacheBackendS3, - integration.FeatureCacheBackendLocal, - integration.FeatureCacheBackendRegistry, - ) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport) c, err := New(sb.Context(), sb.Address()) require.NoError(t, err) defer c.Close() @@ -4462,12 +4464,21 @@ func testCacheExportIgnoreError(t *testing.T, sb integration.Sandbox) { for _, ignoreError := range ignoreErrorValues { ignoreErrStr := strconv.FormatBool(ignoreError) for n, test := range tests { + n := n require.Equal(t, 1, len(test.Exports)) require.Equal(t, 1, len(test.CacheExports)) require.NotEmpty(t, test.CacheExports[0].Attrs) test.CacheExports[0].Attrs["ignore-error"] = ignoreErrStr testName := fmt.Sprintf("%s-%s", n, ignoreErrStr) t.Run(testName, func(t *testing.T) { + switch n { + case "local-ignore-error": + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheBackendLocal) + case "registry-ignore-error": + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheBackendRegistry) + case "s3-ignore-error": + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheBackendS3) + } _, err = c.Solve(sb.Context(), def, SolveOpt{ Exports: test.Exports, CacheExports: test.CacheExports, @@ -4486,7 +4497,11 @@ func testCacheExportIgnoreError(t *testing.T, sb integration.Sandbox) { } func testUncompressedLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendLocal) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendLocal, + ) dir := t.TempDir() im := CacheOptionsEntry{ Type: "local", @@ -4506,7 +4521,11 @@ func testUncompressedLocalCacheImportExport(t *testing.T, sb integration.Sandbox } func testUncompressedRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendRegistry, + ) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { t.Skip(err.Error()) @@ -4531,7 +4550,11 @@ func testUncompressedRegistryCacheImportExport(t *testing.T, sb integration.Sand } func testZstdLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendLocal) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendLocal, + ) dir := t.TempDir() im := CacheOptionsEntry{ Type: "local", @@ -4552,7 +4575,11 @@ func testZstdLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { } func testZstdRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendRegistry, + ) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { t.Skip(err.Error()) @@ -4640,7 +4667,11 @@ func testBasicCacheImportExport(t *testing.T, sb integration.Sandbox, cacheOptio } func testBasicRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendRegistry, + ) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { t.Skip(err.Error()) @@ -4657,7 +4688,11 @@ func testBasicRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { } func testMultipleRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendRegistry, + ) registry, err := sb.NewRegistry() if errors.Is(err, integration.ErrRequirements) { t.Skip(err.Error()) @@ -4680,7 +4715,11 @@ func testMultipleRegistryCacheImportExport(t *testing.T, sb integration.Sandbox) } func testBasicLocalCacheImportExport(t *testing.T, sb integration.Sandbox) { - integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendLocal) + integration.CheckFeatureCompat(t, sb, + integration.FeatureCacheExport, + integration.FeatureCacheImport, + integration.FeatureCacheBackendLocal, + ) dir := t.TempDir() im := CacheOptionsEntry{ Type: "local", @@ -4701,9 +4740,7 @@ func testBasicInlineCacheImportExport(t *testing.T, sb integration.Sandbox) { integration.CheckFeatureCompat(t, sb, integration.FeatureDirectPush, integration.FeatureCacheExport, - integration.FeatureCacheImport, integration.FeatureCacheBackendInline, - integration.FeatureCacheBackendRegistry, ) requiresLinux(t) registry, err := sb.NewRegistry() @@ -4756,6 +4793,7 @@ func testBasicInlineCacheImportExport(t *testing.T, sb integration.Sandbox) { require.NoError(t, err) ensurePruneAll(t, c, sb) + integration.CheckFeatureCompat(t, sb, integration.FeatureCacheImport, integration.FeatureCacheBackendRegistry) resp, err = c.Solve(sb.Context(), def, SolveOpt{ // specifying inline cache exporter is needed for reproducing containerimage.digest From 37f26340f5b5b9b9eb8ba67d5150d381b255d7f1 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Wed, 15 Mar 2023 11:12:02 +0100 Subject: [PATCH 6/6] integration: missing mergeDiff compat check Signed-off-by: CrazyMax (cherry picked from commit f5aa8416b2d29def1d245fd61aede5115e59bcc3) --- client/build_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/client/build_test.go b/client/build_test.go index 1376c1515ae9..75ebce6d3b32 100644 --- a/client/build_test.go +++ b/client/build_test.go @@ -1991,6 +1991,7 @@ func testClientGatewayContainerSignal(t *testing.T, sb integration.Sandbox) { } func testClientGatewayNilResult(t *testing.T, sb integration.Sandbox) { + integration.CheckFeatureCompat(t, sb, integration.FeatureMergeDiff) requiresLinux(t) c, err := New(sb.Context(), sb.Address()) require.NoError(t, err)