rm_test.go 1.1 KB

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