Work In Progress: fix devmapper plugin, first independent test passes.

This commit is contained in:
Solomon Hykes 2013-11-01 19:04:08 +00:00
parent 86dd2473c1
commit d64df7c765
2 changed files with 90 additions and 11 deletions

View File

@ -1,32 +1,50 @@
package devmapper
import (
"fmt"
"os"
"path"
"github.com/dotcloud/docker/archive"
)
// Placeholder interfaces, to be replaced
// at integration.
type Image interface {
ID() string
Parent() (Image, error)
Path() string
}
type Change interface {
}
// End of placeholder interfaces.
type DMBackend struct {
*DeviceSet
home string
}
func (b *DMBackend) Init(home string) error {
b.DeviceSet = NewDeviceSet(home)
if err := b.DeviceSet.ensureInit(); err != nil {
return err
func Init(home string) (*DMBackend, error) {
b := &DMBackend{
DeviceSet: NewDeviceSet(home),
home: home,
}
return nil
if err := b.DeviceSet.ensureInit(); err != nil {
return nil, err
}
return b, nil
}
func (b *DMBackend) Shutdown() error {
func (b *DMBackend) Cleanup() error {
return b.DeviceSet.Shutdown()
}
func (b *DMBackend) Create(img image, layer archive.Archive) error {
func (b *DMBackend) Create(img Image, layer archive.Archive) error {
// Determine the source of the snapshot (parent id or init device)
var parentID string
if parent, err := img.Parent(); err != nil {
@ -39,11 +57,11 @@ func (b *DMBackend) Create(img image, layer archive.Archive) error {
return err
}
// Mount the device in rootfs
mp := b.mountpoint(id)
if err := os.MkdirAll(mp); err != nil {
mp := b.mountpoint(img.ID())
if err := os.MkdirAll(mp, 0700); err != nil {
return err
}
if err := b.DeviceSet.MountDevice(id, mp, false); err != nil {
if err := b.DeviceSet.MountDevice(img.ID(), mp, false); err != nil {
return err
}
// Apply the layer as a diff
@ -67,6 +85,6 @@ func (b *DMBackend) Changes(img *Image, dest string) ([]Change, error) {
return nil, fmt.Errorf("Not implemented")
}
func (b *DMBackend) Layer(img *Image, dest string) (Archive, error) {
func (b *DMBackend) Layer(img *Image, dest string) (archive.Archive, error) {
return nil, fmt.Errorf("Not implemented")
}

61
devmapper/plugin_test.go Normal file
View File

@ -0,0 +1,61 @@
package devmapper
import (
"io/ioutil"
_ "os"
"testing"
)
type TestImage struct {
id string
path string
}
func (img *TestImage) ID() string {
return img.id
}
func (img *TestImage) Path() string {
return img.path
}
func (img *TestImage) Parent() (Image, error) {
return nil, nil
}
func mkTestImage(t *testing.T) Image {
return &TestImage{
path: mkTestDirectory(t),
id: "4242",
}
}
func mkTestDirectory(t *testing.T) string {
dir, err := ioutil.TempDir("", "docker-test-devmapper-")
if err != nil {
t.Fatal(err)
}
return dir
}
func TestInit(t *testing.T) {
home := mkTestDirectory(t)
// defer os.RemoveAll(home)
plugin, err := Init(home)
if err != nil {
t.Fatal(err)
}
defer func() {
return
if err := plugin.Cleanup(); err != nil {
t.Fatal(err)
}
}()
img := mkTestImage(t)
// defer os.RemoveAll(img.(*TestImage).path)
if err := plugin.Create(img, nil); err != nil {
t.Fatal(err)
}
}