|
@@ -1,7 +1,10 @@
|
|
package docker
|
|
package docker
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "bytes"
|
|
"io/ioutil"
|
|
"io/ioutil"
|
|
|
|
+ "os"
|
|
|
|
+ "path"
|
|
"testing"
|
|
"testing"
|
|
)
|
|
)
|
|
|
|
|
|
@@ -15,7 +18,7 @@ func TestFilesystem(t *testing.T) {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
|
|
- filesystem := newFilesystem(rootfs, rwpath, []string{"/var/lib/docker/images/ubuntu", "/var/lib/docker/images/test"})
|
|
|
|
|
|
+ filesystem := newFilesystem(rootfs, rwpath, []string{"/var/lib/docker/images/ubuntu"})
|
|
|
|
|
|
if err := filesystem.Umount(); err == nil {
|
|
if err := filesystem.Umount(); err == nil {
|
|
t.Errorf("Umount succeeded even though the filesystem was not mounted")
|
|
t.Errorf("Umount succeeded even though the filesystem was not mounted")
|
|
@@ -25,6 +28,10 @@ func TestFilesystem(t *testing.T) {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if err := filesystem.Mount(); err == nil {
|
|
|
|
+ t.Errorf("Double mount succeeded")
|
|
|
|
+ }
|
|
|
|
+
|
|
if err := filesystem.Umount(); err != nil {
|
|
if err := filesystem.Umount(); err != nil {
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
@@ -33,3 +40,48 @@ func TestFilesystem(t *testing.T) {
|
|
t.Errorf("Umount succeeded even though the filesystem was already umounted")
|
|
t.Errorf("Umount succeeded even though the filesystem was already umounted")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func TestFilesystemMultiLayer(t *testing.T) {
|
|
|
|
+ // Create a fake layer
|
|
|
|
+ fakeLayer, err := ioutil.TempDir("", "docker-layer")
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ data := []byte("hello world")
|
|
|
|
+ if err := ioutil.WriteFile(path.Join(fakeLayer, "test_file"), data, 0700); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Create the layered filesystem and add our fake layer on top
|
|
|
|
+ rootfs, err := ioutil.TempDir("", "docker-test-root")
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ rwpath, err := ioutil.TempDir("", "docker-test-rw")
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ filesystem := newFilesystem(rootfs, rwpath, []string{"/var/lib/docker/images/ubuntu", fakeLayer})
|
|
|
|
+
|
|
|
|
+ // Mount it
|
|
|
|
+ if err := filesystem.Mount(); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ defer func() {
|
|
|
|
+ if err := filesystem.Umount(); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ // Check to see whether we can access our fake layer
|
|
|
|
+ if _, err := os.Stat(path.Join(rootfs, "test_file")); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ fsdata, err := ioutil.ReadFile(path.Join(rootfs, "test_file"))
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ if !bytes.Equal(data, fsdata) {
|
|
|
|
+ t.Error(string(fsdata))
|
|
|
|
+ }
|
|
|
|
+}
|