filesystem_test.go 1.9 KB

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