filesystem_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package docker
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "os"
  6. "path"
  7. "testing"
  8. )
  9. func TestFilesystem(t *testing.T) {
  10. rootfs, err := ioutil.TempDir("", "docker-test-root")
  11. if err != nil {
  12. t.Fatal(err)
  13. }
  14. rwpath, err := ioutil.TempDir("", "docker-test-rw")
  15. if err != nil {
  16. t.Fatal(err)
  17. }
  18. filesystem := newFilesystem(rootfs, rwpath, []string{"/var/lib/docker/images/ubuntu"})
  19. if err := filesystem.Umount(); err == nil {
  20. t.Errorf("Umount succeeded even though the filesystem was not mounted")
  21. }
  22. if err := filesystem.Mount(); err != nil {
  23. t.Fatal(err)
  24. }
  25. if err := filesystem.Mount(); err == nil {
  26. t.Errorf("Double mount succeeded")
  27. }
  28. if err := filesystem.Umount(); err != nil {
  29. t.Fatal(err)
  30. }
  31. if err := filesystem.Umount(); err == nil {
  32. t.Errorf("Umount succeeded even though the filesystem was already umounted")
  33. }
  34. }
  35. func TestFilesystemMultiLayer(t *testing.T) {
  36. // Create a fake layer
  37. fakeLayer, err := ioutil.TempDir("", "docker-layer")
  38. if err != nil {
  39. t.Fatal(err)
  40. }
  41. data := []byte("hello world")
  42. if err := ioutil.WriteFile(path.Join(fakeLayer, "test_file"), data, 0700); err != nil {
  43. t.Fatal(err)
  44. }
  45. // Create the layered filesystem and add our fake layer on top
  46. rootfs, err := ioutil.TempDir("", "docker-test-root")
  47. if err != nil {
  48. t.Fatal(err)
  49. }
  50. rwpath, err := ioutil.TempDir("", "docker-test-rw")
  51. if err != nil {
  52. t.Fatal(err)
  53. }
  54. filesystem := newFilesystem(rootfs, rwpath, []string{"/var/lib/docker/images/ubuntu", fakeLayer})
  55. // Mount it
  56. if err := filesystem.Mount(); err != nil {
  57. t.Fatal(err)
  58. }
  59. defer func() {
  60. if err := filesystem.Umount(); err != nil {
  61. t.Fatal(err)
  62. }
  63. }()
  64. // Check to see whether we can access our fake layer
  65. if _, err := os.Stat(path.Join(rootfs, "test_file")); err != nil {
  66. t.Fatal(err)
  67. }
  68. fsdata, err := ioutil.ReadFile(path.Join(rootfs, "test_file"))
  69. if err != nil {
  70. t.Fatal(err)
  71. }
  72. if !bytes.Equal(data, fsdata) {
  73. t.Error(string(fsdata))
  74. }
  75. }