Work In Progress: fix devmapper plugin, first independent test passes.
This commit is contained in:
parent
86dd2473c1
commit
d64df7c765
2 changed files with 90 additions and 11 deletions
|
@ -1,32 +1,50 @@
|
||||||
package devmapper
|
package devmapper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
"github.com/dotcloud/docker/archive"
|
"github.com/dotcloud/docker/archive"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Placeholder interfaces, to be replaced
|
||||||
|
// at integration.
|
||||||
|
|
||||||
type Image interface {
|
type Image interface {
|
||||||
ID() string
|
ID() string
|
||||||
Parent() (Image, error)
|
Parent() (Image, error)
|
||||||
Path() string
|
Path() string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Change interface {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// End of placeholder interfaces.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
type DMBackend struct {
|
type DMBackend struct {
|
||||||
*DeviceSet
|
*DeviceSet
|
||||||
|
home string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *DMBackend) Init(home string) error {
|
func Init(home string) (*DMBackend, error) {
|
||||||
b.DeviceSet = NewDeviceSet(home)
|
b := &DMBackend{
|
||||||
|
DeviceSet: NewDeviceSet(home),
|
||||||
|
home: home,
|
||||||
|
}
|
||||||
if err := b.DeviceSet.ensureInit(); err != nil {
|
if err := b.DeviceSet.ensureInit(); err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
return nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *DMBackend) Shutdown() error {
|
func (b *DMBackend) Cleanup() error {
|
||||||
return b.DeviceSet.Shutdown()
|
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)
|
// Determine the source of the snapshot (parent id or init device)
|
||||||
var parentID string
|
var parentID string
|
||||||
if parent, err := img.Parent(); err != nil {
|
if parent, err := img.Parent(); err != nil {
|
||||||
|
@ -39,11 +57,11 @@ func (b *DMBackend) Create(img image, layer archive.Archive) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Mount the device in rootfs
|
// Mount the device in rootfs
|
||||||
mp := b.mountpoint(id)
|
mp := b.mountpoint(img.ID())
|
||||||
if err := os.MkdirAll(mp); err != nil {
|
if err := os.MkdirAll(mp, 0700); err != nil {
|
||||||
return err
|
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
|
return err
|
||||||
}
|
}
|
||||||
// Apply the layer as a diff
|
// 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")
|
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")
|
return nil, fmt.Errorf("Not implemented")
|
||||||
}
|
}
|
||||||
|
|
61
devmapper/plugin_test.go
Normal file
61
devmapper/plugin_test.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue