5b8287617d
into the container instead of copying them as a regular file. * Builder: ADD uses tar/untar for copies instead of calling 'cp -ar'. This is more consistent, reduces the number of dependencies, and fixe #896.
89 lines
1.8 KiB
Go
89 lines
1.8 KiB
Go
package docker
|
|
|
|
import (
|
|
"github.com/dotcloud/docker/utils"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const Dockerfile = `
|
|
# VERSION 0.1
|
|
# DOCKER-VERSION 0.2
|
|
|
|
from ` + unitTestImageName + `
|
|
run sh -c 'echo root:testpass > /tmp/passwd'
|
|
run mkdir -p /var/run/sshd
|
|
`
|
|
|
|
const DockerfileNoNewLine = `
|
|
# VERSION 0.1
|
|
# DOCKER-VERSION 0.2
|
|
|
|
from ` + unitTestImageName + `
|
|
run sh -c 'echo root:testpass > /tmp/passwd'
|
|
run mkdir -p /var/run/sshd`
|
|
|
|
// FIXME: test building with a context
|
|
|
|
// FIXME: test building with a local ADD as first command
|
|
|
|
// FIXME: test building with 2 successive overlapping ADD commands
|
|
|
|
func TestBuild(t *testing.T) {
|
|
dockerfiles := []string{Dockerfile, DockerfileNoNewLine}
|
|
for _, Dockerfile := range dockerfiles {
|
|
runtime, err := newTestRuntime()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer nuke(runtime)
|
|
|
|
srv := &Server{runtime: runtime}
|
|
|
|
buildfile := NewBuildFile(srv, &utils.NopWriter{})
|
|
|
|
imgID, err := buildfile.Build(strings.NewReader(Dockerfile), nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
builder := NewBuilder(runtime)
|
|
container, err := builder.Create(
|
|
&Config{
|
|
Image: imgID,
|
|
Cmd: []string{"cat", "/tmp/passwd"},
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer runtime.Destroy(container)
|
|
|
|
output, err := container.Output()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if string(output) != "root:testpass\n" {
|
|
t.Fatalf("Unexpected output. Read '%s', expected '%s'", output, "root:testpass\n")
|
|
}
|
|
|
|
container2, err := builder.Create(
|
|
&Config{
|
|
Image: imgID,
|
|
Cmd: []string{"ls", "-d", "/var/run/sshd"},
|
|
},
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer runtime.Destroy(container2)
|
|
|
|
output, err = container2.Output()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if string(output) != "/var/run/sshd\n" {
|
|
t.Fatal("/var/run/sshd has not been created")
|
|
}
|
|
}
|
|
}
|