| package docker |
| |
| import ( |
| "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 |
| insert https://raw.github.com/dotcloud/docker/master/CHANGELOG.md /tmp/CHANGELOG.md |
| ` |
| |
| func TestBuild(t *testing.T) { |
| runtime, err := newTestRuntime() |
| if err != nil { |
| t.Fatal(err) |
| } |
| defer nuke(runtime) |
| |
| builder := NewBuilder(runtime) |
| |
| img, err := builder.Build(strings.NewReader(Dockerfile), &nopWriter{}) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| container, err := builder.Create( |
| &Config{ |
| Image: img.Id, |
| 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: img.Id, |
| 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") |
| } |
| |
| container3, err := builder.Create( |
| &Config{ |
| Image: img.Id, |
| Cmd: []string{"cat", "/tmp/CHANGELOG.md"}, |
| }, |
| ) |
| if err != nil { |
| t.Fatal(err) |
| } |
| defer runtime.Destroy(container3) |
| |
| output, err = container3.Output() |
| if err != nil { |
| t.Fatal(err) |
| } |
| if len(output) == 0 { |
| t.Fatal("/tmp/CHANGELOG.md has not been copied") |
| } |
| } |