From f0a65207aba9bf52e169a7ed783fbd946d5a82c0 Mon Sep 17 00:00:00 2001 From: Ken Cochrane Date: Wed, 13 Mar 2013 13:35:34 -0700 Subject: [PATCH] changed the fs.store.Register and fs.store.Create, so that it is a little cleaner, and easier to reuse. Also added a unit test --- fs/store.go | 37 +++++++++++++++---------------------- fs/store_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/fs/store.go b/fs/store.go index 7b8447105..84fdbec97 100644 --- a/fs/store.go +++ b/fs/store.go @@ -160,42 +160,35 @@ func (store *Store) Create(layerData Archive, parent *Image, pth, comment string if parent != nil { img.Parent = parent.Id } - // FIXME: we shouldn't have to pass os.Stderr to AddLayer()... // FIXME: Archive should contain compression info. For now we only support uncompressed. - _, err := store.layers.AddLayer(img.Id, layerData) + err := store.Register(layerData, img, pth) + return img, err +} + +func (store *Store) Register(layerData Archive, image *Image, pth string) error { + image.store = store + _, err := store.layers.AddLayer(image.Id, layerData) if err != nil { - return nil, errors.New(fmt.Sprintf("Could not add layer: %s", err)) + return errors.New(fmt.Sprintf("Could not add layer: %s", err)) } path := &Path{ Path: path.Clean(pth), - Image: img.Id, + Image: image.Id, } trans, err := store.orm.Begin() if err != nil { - return nil, errors.New(fmt.Sprintf("Could not begin transaction:", err)) + return errors.New(fmt.Sprintf("Could not begin transaction:", err)) } - if err := trans.Insert(img); err != nil { - return nil, errors.New(fmt.Sprintf("Could not insert image info: %s", err)) + if err := trans.Insert(image); err != nil { + return errors.New(fmt.Sprintf("Could not insert image info: %s", err)) } if err := trans.Insert(path); err != nil { - return nil, errors.New(fmt.Sprintf("Could not insert path info: %s", err)) + return errors.New(fmt.Sprintf("Could not insert path info: %s", err)) } if err := trans.Commit(); err != nil { - return nil, errors.New(fmt.Sprintf("Could not commit transaction: %s", err)) + return errors.New(fmt.Sprintf("Could not commit transaction: %s", err)) } - return img, nil -} - -func (store *Store) Register(image *Image, pth string) error { - image.store = store - // FIXME: import layer - trans, err := store.orm.Begin() - if err != nil { - return err - } - trans.Insert(image) - trans.Insert(&Path{Path: pth, Image: image.Id}) - return trans.Commit() + return nil } func (store *Store) Layers() []string { diff --git a/fs/store_test.go b/fs/store_test.go index f2cc06534..b8b251670 100644 --- a/fs/store_test.go +++ b/fs/store_test.go @@ -4,9 +4,11 @@ import ( "errors" "fmt" "github.com/dotcloud/docker/fake" + "github.com/dotcloud/docker/future" "io/ioutil" "os" "testing" + "time" ) func TestInit(t *testing.T) { @@ -52,6 +54,40 @@ func TestCreate(t *testing.T) { } } +func TestRegister(t *testing.T) { + store, err := TempStore("testregister") + if err != nil { + t.Fatal(err) + } + defer nuke(store) + archive, err := fake.FakeTar() + if err != nil { + t.Fatal(err) + } + image := &Image{ + Id: future.RandomId(), + Comment: "testing", + Created: time.Now().Unix(), + store: store, + } + err = store.Register(archive, image, "foo") + if err != nil { + t.Fatal(err) + } + if images, err := store.Images(); 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 images, err := store.List("foo"); err != nil { + t.Fatal(err) + } else if l := len(images); l != 1 { + t.Fatalf("Path foo has wrong number of images (should be %d, not %d)", 1, l) + } else if images[0].Id != image.Id { + t.Fatalf("Imported image should be listed at path foo (%s != %s)", images[0], image) + } +} + func TestTag(t *testing.T) { store, err := TempStore("testtag") if err != nil {