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") } } }