1// +build linux 2 3package overlay2 // import "github.com/docker/docker/daemon/graphdriver/overlay2" 4 5import ( 6 "io/ioutil" 7 "os" 8 "testing" 9 10 "github.com/docker/docker/daemon/graphdriver" 11 "github.com/docker/docker/daemon/graphdriver/graphtest" 12 "github.com/docker/docker/pkg/archive" 13 "github.com/docker/docker/pkg/reexec" 14) 15 16func init() { 17 // Do not sure chroot to speed run time and allow archive 18 // errors or hangs to be debugged directly from the test process. 19 untar = archive.UntarUncompressed 20 graphdriver.ApplyUncompressedLayer = archive.ApplyUncompressedLayer 21 22 reexec.Init() 23} 24 25func skipIfNaive(t *testing.T) { 26 td, err := ioutil.TempDir("", "naive-check-") 27 if err != nil { 28 t.Fatalf("Failed to create temp dir: %v", err) 29 } 30 defer os.RemoveAll(td) 31 32 if useNaiveDiff(td) { 33 t.Skipf("Cannot run test with naive diff") 34 } 35} 36 37// This avoids creating a new driver for each test if all tests are run 38// Make sure to put new tests between TestOverlaySetup and TestOverlayTeardown 39func TestOverlaySetup(t *testing.T) { 40 graphtest.GetDriver(t, driverName) 41} 42 43func TestOverlayCreateEmpty(t *testing.T) { 44 graphtest.DriverTestCreateEmpty(t, driverName) 45} 46 47func TestOverlayCreateBase(t *testing.T) { 48 graphtest.DriverTestCreateBase(t, driverName) 49} 50 51func TestOverlayCreateSnap(t *testing.T) { 52 graphtest.DriverTestCreateSnap(t, driverName) 53} 54 55func TestOverlay128LayerRead(t *testing.T) { 56 graphtest.DriverTestDeepLayerRead(t, 128, driverName) 57} 58 59func TestOverlayDiffApply10Files(t *testing.T) { 60 skipIfNaive(t) 61 graphtest.DriverTestDiffApply(t, 10, driverName) 62} 63 64func TestOverlayChanges(t *testing.T) { 65 t.Skipf("Cannot run test with naive change algorithm") 66 graphtest.DriverTestChanges(t, driverName) 67} 68 69func TestOverlayTeardown(t *testing.T) { 70 graphtest.PutDriver(t) 71} 72 73// Benchmarks should always setup new driver 74 75func BenchmarkExists(b *testing.B) { 76 graphtest.DriverBenchExists(b, driverName) 77} 78 79func BenchmarkGetEmpty(b *testing.B) { 80 graphtest.DriverBenchGetEmpty(b, driverName) 81} 82 83func BenchmarkDiffBase(b *testing.B) { 84 graphtest.DriverBenchDiffBase(b, driverName) 85} 86 87func BenchmarkDiffSmallUpper(b *testing.B) { 88 graphtest.DriverBenchDiffN(b, 10, 10, driverName) 89} 90 91func BenchmarkDiff10KFileUpper(b *testing.B) { 92 graphtest.DriverBenchDiffN(b, 10, 10000, driverName) 93} 94 95func BenchmarkDiff10KFilesBottom(b *testing.B) { 96 graphtest.DriverBenchDiffN(b, 10000, 10, driverName) 97} 98 99func BenchmarkDiffApply100(b *testing.B) { 100 graphtest.DriverBenchDiffApplyN(b, 100, driverName) 101} 102 103func BenchmarkDiff20Layers(b *testing.B) { 104 graphtest.DriverBenchDeepLayerDiff(b, 20, driverName) 105} 106 107func BenchmarkRead20Layers(b *testing.B) { 108 graphtest.DriverBenchDeepLayerRead(b, 20, driverName) 109} 110