Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions util/overlay/overlay_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"os"
"path/filepath"
"strings"
"sync"
"testing"
"time"

Expand All @@ -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
Expand Down Expand Up @@ -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 {
Expand All @@ -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))
Expand Down
Loading