rm_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package system
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "path/filepath"
  6. "runtime"
  7. "testing"
  8. "time"
  9. "github.com/docker/docker/pkg/mount"
  10. )
  11. func TestEnsureRemoveAllNotExist(t *testing.T) {
  12. // should never return an error for a non-existent path
  13. if err := EnsureRemoveAll("/non/existent/path"); err != nil {
  14. t.Fatal(err)
  15. }
  16. }
  17. func TestEnsureRemoveAllWithDir(t *testing.T) {
  18. dir, err := ioutil.TempDir("", "test-ensure-removeall-with-dir")
  19. if err != nil {
  20. t.Fatal(err)
  21. }
  22. if err := EnsureRemoveAll(dir); err != nil {
  23. t.Fatal(err)
  24. }
  25. }
  26. func TestEnsureRemoveAllWithFile(t *testing.T) {
  27. tmp, err := ioutil.TempFile("", "test-ensure-removeall-with-dir")
  28. if err != nil {
  29. t.Fatal(err)
  30. }
  31. tmp.Close()
  32. if err := EnsureRemoveAll(tmp.Name()); err != nil {
  33. t.Fatal(err)
  34. }
  35. }
  36. func TestEnsureRemoveAllWithMount(t *testing.T) {
  37. if runtime.GOOS == "windows" {
  38. t.Skip("mount not supported on Windows")
  39. }
  40. dir1, err := ioutil.TempDir("", "test-ensure-removeall-with-dir1")
  41. if err != nil {
  42. t.Fatal(err)
  43. }
  44. dir2, err := ioutil.TempDir("", "test-ensure-removeall-with-dir2")
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. defer os.RemoveAll(dir2)
  49. bindDir := filepath.Join(dir1, "bind")
  50. if err := os.MkdirAll(bindDir, 0755); err != nil {
  51. t.Fatal(err)
  52. }
  53. if err := mount.Mount(dir2, bindDir, "none", "bind"); err != nil {
  54. t.Fatal(err)
  55. }
  56. done := make(chan struct{})
  57. go func() {
  58. err = EnsureRemoveAll(dir1)
  59. close(done)
  60. }()
  61. select {
  62. case <-done:
  63. if err != nil {
  64. t.Fatal(err)
  65. }
  66. case <-time.After(5 * time.Second):
  67. t.Fatal("timeout waiting for EnsureRemoveAll to finish")
  68. }
  69. if _, err := os.Stat(dir1); !os.IsNotExist(err) {
  70. t.Fatalf("expected %q to not exist", dir1)
  71. }
  72. }