2016-05-16 20:02:51 -04:00
|
|
|
// +build linux
|
|
|
|
|
|
|
|
package overlay2
|
|
|
|
|
|
|
|
import (
|
2016-11-10 16:52:22 -05:00
|
|
|
"io/ioutil"
|
2016-05-16 20:02:51 -04:00
|
|
|
"os"
|
|
|
|
"syscall"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/docker/docker/daemon/graphdriver"
|
|
|
|
"github.com/docker/docker/daemon/graphdriver/graphtest"
|
|
|
|
"github.com/docker/docker/pkg/archive"
|
|
|
|
"github.com/docker/docker/pkg/reexec"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
// Do not sure chroot to speed run time and allow archive
|
|
|
|
// errors or hangs to be debugged directly from the test process.
|
|
|
|
untar = archive.UntarUncompressed
|
|
|
|
graphdriver.ApplyUncompressedLayer = archive.ApplyUncompressedLayer
|
|
|
|
|
|
|
|
reexec.Init()
|
|
|
|
}
|
|
|
|
|
|
|
|
func cdMountFrom(dir, device, target, mType, label string) error {
|
|
|
|
wd, err := os.Getwd()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
os.Chdir(dir)
|
|
|
|
defer os.Chdir(wd)
|
|
|
|
|
|
|
|
return syscall.Mount(device, target, mType, 0, label)
|
|
|
|
}
|
|
|
|
|
2016-11-10 16:52:22 -05:00
|
|
|
func skipIfNaive(t *testing.T) {
|
|
|
|
td, err := ioutil.TempDir("", "naive-check-")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to create temp dir: %v", err)
|
|
|
|
}
|
|
|
|
defer os.RemoveAll(td)
|
|
|
|
|
|
|
|
if useNaiveDiff(td) {
|
|
|
|
t.Skipf("Cannot run test with naive diff")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-16 20:02:51 -04:00
|
|
|
// This avoids creating a new driver for each test if all tests are run
|
|
|
|
// Make sure to put new tests between TestOverlaySetup and TestOverlayTeardown
|
|
|
|
func TestOverlaySetup(t *testing.T) {
|
|
|
|
graphtest.GetDriver(t, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOverlayCreateEmpty(t *testing.T) {
|
|
|
|
graphtest.DriverTestCreateEmpty(t, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOverlayCreateBase(t *testing.T) {
|
|
|
|
graphtest.DriverTestCreateBase(t, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOverlayCreateSnap(t *testing.T) {
|
|
|
|
graphtest.DriverTestCreateSnap(t, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOverlay128LayerRead(t *testing.T) {
|
|
|
|
graphtest.DriverTestDeepLayerRead(t, 128, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOverlayDiffApply10Files(t *testing.T) {
|
2016-11-10 16:52:22 -05:00
|
|
|
skipIfNaive(t)
|
2016-05-16 20:02:51 -04:00
|
|
|
graphtest.DriverTestDiffApply(t, 10, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOverlayChanges(t *testing.T) {
|
2016-11-10 16:52:22 -05:00
|
|
|
skipIfNaive(t)
|
2016-05-16 20:02:51 -04:00
|
|
|
graphtest.DriverTestChanges(t, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOverlayTeardown(t *testing.T) {
|
|
|
|
graphtest.PutDriver(t)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Benchmarks should always setup new driver
|
|
|
|
|
|
|
|
func BenchmarkExists(b *testing.B) {
|
|
|
|
graphtest.DriverBenchExists(b, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkGetEmpty(b *testing.B) {
|
|
|
|
graphtest.DriverBenchGetEmpty(b, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkDiffBase(b *testing.B) {
|
|
|
|
graphtest.DriverBenchDiffBase(b, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkDiffSmallUpper(b *testing.B) {
|
|
|
|
graphtest.DriverBenchDiffN(b, 10, 10, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkDiff10KFileUpper(b *testing.B) {
|
|
|
|
graphtest.DriverBenchDiffN(b, 10, 10000, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkDiff10KFilesBottom(b *testing.B) {
|
|
|
|
graphtest.DriverBenchDiffN(b, 10000, 10, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkDiffApply100(b *testing.B) {
|
|
|
|
graphtest.DriverBenchDiffApplyN(b, 100, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkDiff20Layers(b *testing.B) {
|
|
|
|
graphtest.DriverBenchDeepLayerDiff(b, 20, driverName)
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkRead20Layers(b *testing.B) {
|
|
|
|
graphtest.DriverBenchDeepLayerRead(b, 20, driverName)
|
|
|
|
}
|