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