Skip to content

Commit

Permalink
integration: enforce features compat through env vars
Browse files Browse the repository at this point in the history
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
  • Loading branch information
crazy-max committed Mar 13, 2023
1 parent 5e0b785 commit fb2e9c9
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 53 deletions.
43 changes: 27 additions & 16 deletions client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,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()
Expand Down Expand Up @@ -3747,7 +3747,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" {
Expand Down Expand Up @@ -3945,7 +3945,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" {
Expand Down Expand Up @@ -4392,7 +4397,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()
Expand Down Expand Up @@ -4451,7 +4456,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()
Expand Down Expand Up @@ -4558,7 +4563,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",
Expand All @@ -4578,7 +4583,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())
Expand All @@ -4603,7 +4608,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",
Expand All @@ -4624,7 +4629,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())
Expand Down Expand Up @@ -4712,7 +4717,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())
Expand All @@ -4729,7 +4734,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())
Expand All @@ -4752,7 +4757,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",
Expand All @@ -4770,7 +4775,7 @@ func testBasicLocalCacheImportExport(t *testing.T, sb integration.Sandbox) {
}

func testBasicS3CacheImportExport(t *testing.T, sb integration.Sandbox) {
integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport)
integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendS3)

opts := integration.MinioOpts{
Region: "us-east-1",
Expand Down Expand Up @@ -4808,7 +4813,7 @@ func testBasicS3CacheImportExport(t *testing.T, sb integration.Sandbox) {
}

func testBasicAzblobCacheImportExport(t *testing.T, sb integration.Sandbox) {
integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport)
integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendAzblob)

opts := integration.AzuriteOpts{
AccountName: "azblobcacheaccount",
Expand Down Expand Up @@ -4841,7 +4846,13 @@ func testBasicAzblobCacheImportExport(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) {
Expand Down Expand Up @@ -5001,7 +5012,7 @@ func testBasicInlineCacheImportExport(t *testing.T, sb integration.Sandbox) {
}

func testBasicGhaCacheImportExport(t *testing.T, sb integration.Sandbox) {
integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport)
integration.CheckFeatureCompat(t, sb, integration.FeatureCacheExport, integration.FeatureCacheImport, integration.FeatureCacheBackendGha)
runtimeToken := os.Getenv("ACTIONS_RUNTIME_TOKEN")
cacheURL := os.Getenv("ACTIONS_CACHE_URL")
if runtimeToken == "" || cacheURL == "" {
Expand Down
11 changes: 8 additions & 3 deletions frontend/dockerfile/dockerfile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,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(`
Expand Down Expand Up @@ -3949,7 +3949,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()
Expand Down Expand Up @@ -4072,7 +4077,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()
Expand Down
6 changes: 6 additions & 0 deletions util/testutil/integration/dockerd.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ func InitDockerdWorker() {
unsupported: []string{
FeatureCacheExport,
FeatureCacheImport,
FeatureCacheBackendAzblob,
FeatureCacheBackendGha,
FeatureCacheBackendInline,
FeatureCacheBackendLocal,
FeatureCacheBackendRegistry,
FeatureCacheBackendS3,
FeatureDirectPush,
FeatureImageExporter,
FeatureMultiCacheExport,
Expand Down
95 changes: 61 additions & 34 deletions util/testutil/integration/sandbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"os/exec"
"path/filepath"
"runtime"
"strconv"
"strings"
"testing"
"time"
Expand Down Expand Up @@ -47,7 +48,13 @@ func (b backend) Snapshotter() string {

func (b backend) isUnsupportedFeature(feature string) bool {
for _, unsupportedFeature := range b.unsupportedFeatures {
if feature == unsupportedFeature {
var envFeature *bool
if v := os.Getenv("BUILDKIT_TEST_FEATURE_" + strings.ToUpper(feature)); v != "" {
if bb, err := strconv.ParseBool(v); err == nil {
envFeature = &bb
}
}
if feature == unsupportedFeature && (envFeature == nil || !*envFeature) {
return true
}
}
Expand Down Expand Up @@ -270,41 +277,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 = "cacheExport"
FeatureCacheImport = "cacheImport"
FeatureCacheBackendAzblob = "cacheBackendAzblob"
FeatureCacheBackendGha = "cacheBackendGha"
FeatureCacheBackendInline = "cacheBackendInline"
FeatureCacheBackendLocal = "cacheBackendLocal"
FeatureCacheBackendRegistry = "cacheBackendRegistry"
FeatureCacheBackendS3 = "cacheBackendS3"
FeatureDirectPush = "directPush"
FeatureFrontendOutline = "frontendOutline"
FeatureFrontendTargets = "frontendTargets"
FeatureImageExporter = "imageExporter"
FeatureInfo = "info"
FeatureMultiCacheExport = "multiCacheExport"
FeatureMultiPlatform = "multiPlatform"
FeatureOCIExporter = "ociExporter"
FeatureOCILayout = "ociLayout"
FeatureProvenance = "provenance"
FeatureSBOM = "sbom"
FeatureSecurityMode = "securityMode"
FeatureSourceDateEpoch = "sourceDateEpoch"
FeatureCNINetwork = "cniNetwork"
)

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) {
Expand All @@ -322,7 +341,15 @@ func CheckFeatureCompat(t *testing.T, sb Sandbox, reason ...string) {
var ereasons []string
for _, r := range reason {
if _, ok := features[r]; ok {
if b.isUnsupportedFeature(r) {
envFeatureName := "BUILDKIT_TEST_FEATURE_" + strings.ToUpper(r)
if v := os.Getenv(envFeatureName); v != "" {
if envFeatureEnabled, err := strconv.ParseBool(v); err != nil {
sb.ClearLogs()
t.Fatalf("failed to parse %s", envFeatureName)
} else if !envFeatureEnabled {
ereasons = append(ereasons, r)
}
} else if b.isUnsupportedFeature(r) {
ereasons = append(ereasons, r)
}
} else {
Expand Down

0 comments on commit fb2e9c9

Please sign in to comment.