github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/pkg/system/rm_test.go (about) 1 //go:build !darwin && !windows 2 // +build !darwin,!windows 3 4 package system // import "github.com/docker/docker/pkg/system" 5 6 import ( 7 "os" 8 "path/filepath" 9 "testing" 10 "time" 11 12 "github.com/moby/sys/mount" 13 "gotest.tools/v3/skip" 14 ) 15 16 func TestEnsureRemoveAllWithMount(t *testing.T) { 17 skip.If(t, os.Getuid() != 0, "skipping test that requires root") 18 19 dir1, err := os.MkdirTemp("", "test-ensure-removeall-with-dir1") 20 if err != nil { 21 t.Fatal(err) 22 } 23 dir2, err := os.MkdirTemp("", "test-ensure-removeall-with-dir2") 24 if err != nil { 25 t.Fatal(err) 26 } 27 defer os.RemoveAll(dir2) 28 29 bindDir := filepath.Join(dir1, "bind") 30 if err := os.MkdirAll(bindDir, 0755); err != nil { 31 t.Fatal(err) 32 } 33 34 if err := mount.Mount(dir2, bindDir, "none", "bind"); err != nil { 35 t.Fatal(err) 36 } 37 38 done := make(chan struct{}, 1) 39 go func() { 40 err = EnsureRemoveAll(dir1) 41 close(done) 42 }() 43 44 select { 45 case <-done: 46 if err != nil { 47 t.Fatal(err) 48 } 49 case <-time.After(5 * time.Second): 50 t.Fatal("timeout waiting for EnsureRemoveAll to finish") 51 } 52 53 if _, err := os.Stat(dir1); !os.IsNotExist(err) { 54 t.Fatalf("expected %q to not exist", dir1) 55 } 56 }