rm_test.go 1.1 KB

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