144 lines
3.0 KiB
Go
144 lines
3.0 KiB
Go
package graph
|
|
|
|
import (
|
|
"github.com/dotcloud/docker/fake"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestInit(t *testing.T) {
|
|
graph := tempGraph(t)
|
|
defer os.RemoveAll(graph.Root)
|
|
// Root should exist
|
|
if _, err := os.Stat(graph.Root); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// All() should be empty
|
|
if l, err := graph.All(); err != nil {
|
|
t.Fatal(err)
|
|
} else if len(l) != 0 {
|
|
t.Fatalf("List() should return %d, not %d", 0, len(l))
|
|
}
|
|
}
|
|
|
|
// FIXME: Do more extensive tests (ex: create multiple, delete, recreate;
|
|
// create multiple, check the amount of images and paths, etc..)
|
|
func TestCreate(t *testing.T) {
|
|
graph := tempGraph(t)
|
|
defer os.RemoveAll(graph.Root)
|
|
archive, err := fake.FakeTar()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
image, err := graph.Create(archive, "", "Testing")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := ValidateId(image.Id); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if image.Comment != "Testing" {
|
|
t.Fatalf("Wrong comment: should be '%s', not '%s'", "Testing", image.Comment)
|
|
}
|
|
if images, err := graph.All(); err != nil {
|
|
t.Fatal(err)
|
|
} else if l := len(images); l != 1 {
|
|
t.Fatalf("Wrong number of images. Should be %d, not %d", 1, l)
|
|
}
|
|
}
|
|
|
|
func TestRegister(t *testing.T) {
|
|
graph := tempGraph(t)
|
|
defer os.RemoveAll(graph.Root)
|
|
archive, err := fake.FakeTar()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
image := &Image{
|
|
Id: GenerateId(),
|
|
Comment: "testing",
|
|
Created: time.Now(),
|
|
}
|
|
err = graph.Register(archive, image)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if images, err := graph.All(); err != nil {
|
|
t.Fatal(err)
|
|
} else if l := len(images); l != 1 {
|
|
t.Fatalf("Wrong number of images. Should be %d, not %d", 1, l)
|
|
}
|
|
if resultImg, err := graph.Get(image.Id); err != nil {
|
|
t.Fatal(err)
|
|
} else {
|
|
if resultImg.Id != image.Id {
|
|
t.Fatalf("Wrong image ID. Should be '%s', not '%s'", image.Id, resultImg.Id)
|
|
}
|
|
if resultImg.Comment != image.Comment {
|
|
t.Fatalf("Wrong image comment. Should be '%s', not '%s'", image.Comment, resultImg.Comment)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMount(t *testing.T) {
|
|
graph := tempGraph(t)
|
|
defer os.RemoveAll(graph.Root)
|
|
archive, err := fake.FakeTar()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
image, err := graph.Create(archive, "", "Testing")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tmp, err := ioutil.TempDir("", "docker-test-graph-mount-")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(tmp)
|
|
rootfs := path.Join(tmp, "rootfs")
|
|
if err := os.MkdirAll(rootfs, 0700); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rw := path.Join(tmp, "rw")
|
|
if err := os.MkdirAll(rw, 0700); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := image.Mount(rootfs, rw); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// FIXME: test for mount contents
|
|
defer func() {
|
|
if err := Unmount(rootfs); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}()
|
|
}
|
|
|
|
/*
|
|
* HELPER FUNCTIONS
|
|
*/
|
|
|
|
func tempGraph(t *testing.T) *Graph {
|
|
tmp, err := ioutil.TempDir("", "docker-graph-")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
graph, err := New(tmp)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return graph
|
|
}
|
|
|
|
func testArchive(t *testing.T) Archive {
|
|
archive, err := fake.FakeTar()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return archive
|
|
}
|