From 099fa1ca5c6415718fb9762b2cc0b2bf8b87449a Mon Sep 17 00:00:00 2001 From: immanuwell Date: Tue, 26 May 2026 22:00:31 +0400 Subject: [PATCH] test: skip overlay tests when overlayfs mounts are unavailable Signed-off-by: immanuwell --- util/overlay/overlay_linux_test.go | 49 ++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/util/overlay/overlay_linux_test.go b/util/overlay/overlay_linux_test.go index 1f8f8658a94e..b62dc9aed3aa 100644 --- a/util/overlay/overlay_linux_test.go +++ b/util/overlay/overlay_linux_test.go @@ -8,6 +8,7 @@ import ( "os" "path/filepath" "strings" + "sync" "testing" "time" @@ -17,6 +18,11 @@ import ( "github.com/pkg/errors" ) +var overlayMountProbe struct { + once sync.Once + err error +} + // This test file contains tests that are required in continuity project. // (https://github.com/containerd/continuity/blob/v0.1.0/fs/diff_test.go) // Most of them are ported from that project and patched to test our @@ -335,6 +341,8 @@ func TestLchtimes(t *testing.T) { } func testDiffWithBase(t *testing.T, base, diff fstest.Applier, expected []TestChange, opts ...string) error { + requireOverlayMount(t) + t1 := t.TempDir() if err := base.Apply(t1); err != nil { @@ -361,6 +369,47 @@ func testDiffWithBase(t *testing.T, base, diff fstest.Applier, expected []TestCh }) } +func requireOverlayMount(t *testing.T) { + t.Helper() + + overlayMountProbe.once.Do(func() { + lowerdir, err := os.MkdirTemp("", "buildkit-overlay-lowerdir") + if err != nil { + overlayMountProbe.err = err + return + } + defer os.RemoveAll(lowerdir) + + upperdir, err := os.MkdirTemp("", "buildkit-overlay-upperdir") + if err != nil { + overlayMountProbe.err = err + return + } + defer os.RemoveAll(upperdir) + + workdir, err := os.MkdirTemp("", "buildkit-overlay-workdir") + if err != nil { + overlayMountProbe.err = err + return + } + defer os.RemoveAll(workdir) + + overlayMountProbe.err = mount.WithTempMount(context.Background(), []mount.Mount{ + { + Type: "overlay", + Source: "overlay", + Options: []string{fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lowerdir, upperdir, workdir)}, + }, + }, func(string) error { + return nil + }) + }) + + if overlayMountProbe.err != nil { + t.Skipf("overlayfs mounts are unavailable: %v", overlayMountProbe.err) + } +} + func checkChanges(root string, changes, expected []TestChange) error { if len(changes) != len(expected) { return errors.Errorf("Unexpected number of changes:\n%s", diffString(changes, expected))