issue #65 automatically download busybox for unittests
This commit is contained in:
parent
e5e66716df
commit
de753d5a90
|
@ -4,17 +4,28 @@ import (
|
||||||
"github.com/dotcloud/docker/fs"
|
"github.com/dotcloud/docker/fs"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
const testLayerPath string = "/var/lib/docker/docker-ut.tar"
|
const testLayerPath string = "/var/lib/docker/docker-ut.tar"
|
||||||
|
const unitTestImageName string = "busybox"
|
||||||
|
|
||||||
|
var unitTestStoreBase string
|
||||||
|
var srv *Server
|
||||||
|
|
||||||
func nuke(docker *Docker) error {
|
func nuke(docker *Docker) error {
|
||||||
return os.RemoveAll(docker.root)
|
return os.RemoveAll(docker.root)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CopyDirectory(source, dest string) error {
|
||||||
|
if _, err := exec.Command("cp", "-ra", source, dest).Output(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func layerArchive(tarfile string) (io.Reader, error) {
|
func layerArchive(tarfile string) (io.Reader, error) {
|
||||||
// FIXME: need to close f somewhere
|
// FIXME: need to close f somewhere
|
||||||
f, err := os.Open(tarfile)
|
f, err := os.Open(tarfile)
|
||||||
|
@ -28,15 +39,29 @@ func init() {
|
||||||
// Hack to run sys init during unit testing
|
// Hack to run sys init during unit testing
|
||||||
if SelfPath() == "/sbin/init" {
|
if SelfPath() == "/sbin/init" {
|
||||||
SysInit()
|
SysInit()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the unit test image is there
|
// Create a temp directory
|
||||||
if _, err := os.Stat(testLayerPath); err != nil {
|
root, err := ioutil.TempDir("", "docker-test")
|
||||||
if !os.IsNotExist(err) {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
log.Fatalf("Unit test base image not found. Please fix the problem by running \"debootstrap --arch=amd64 quantal %v\"", testLayerPath)
|
unitTestStoreBase = root
|
||||||
return
|
|
||||||
|
// Make it our Store root
|
||||||
|
docker, err := NewFromDirectory(root)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
// Create the "Server"
|
||||||
|
srv := &Server{
|
||||||
|
images: docker.Store,
|
||||||
|
containers: docker,
|
||||||
|
}
|
||||||
|
// Retrieve the Image
|
||||||
|
if err := srv.CmdImport(os.Stdin, os.Stdout, unitTestImageName); err != nil {
|
||||||
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,19 +70,19 @@ func newTestDocker() (*Docker, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if err := os.Remove(root); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := CopyDirectory(unitTestStoreBase, root); err != nil {
|
||||||
|
panic(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
docker, err := NewFromDirectory(root)
|
docker, err := NewFromDirectory(root)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if layer, err := layerArchive(testLayerPath); err != nil {
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
_, err = docker.Store.Create(layer, nil, "docker-ut", "unit tests")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return docker, nil
|
return docker, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,25 +256,22 @@ func TestGet(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRestore(t *testing.T) {
|
func TestRestore(t *testing.T) {
|
||||||
|
|
||||||
root, err := ioutil.TempDir("", "docker-test")
|
root, err := ioutil.TempDir("", "docker-test")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
if err := os.Remove(root); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := CopyDirectory(unitTestStoreBase, root); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
docker1, err := NewFromDirectory(root)
|
docker1, err := NewFromDirectory(root)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer nuke(docker1)
|
|
||||||
|
|
||||||
if layer, err := layerArchive(testLayerPath); err != nil {
|
|
||||||
panic(err)
|
|
||||||
} else {
|
|
||||||
_, err = docker1.Store.Create(layer, nil, "docker-ut", "unit tests")
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a container with one instance of docker
|
// Create a container with one instance of docker
|
||||||
container1, err := docker1.Create(
|
container1, err := docker1.Create(
|
||||||
|
|
Loading…
Reference in New Issue