More verbose build tests

I've decided that custom asserts only hide the meaning of tests
Docker-DCO-1.1-Signed-off-by: Alexandr Morozov <lk4d4math@gmail.com> (github: LK4D4)
This commit is contained in:
LK4D4 2014-05-31 16:43:32 +04:00
parent 2e85568816
commit bf4d907092
1 changed files with 139 additions and 103 deletions

View File

@ -10,25 +10,6 @@ import (
"time" "time"
) )
func checkSimpleBuild(t *testing.T, dockerfile, name, inspectFormat, expected string) {
buildCmd := exec.Command(dockerBinary, "build", "-t", name, "-")
buildCmd.Stdin = strings.NewReader(dockerfile)
out, exitCode, err := runCommandWithOutput(buildCmd)
errorOut(err, t, fmt.Sprintf("build failed to complete: %v %v", out, err))
if err != nil || exitCode != 0 {
t.Fatal("failed to build the image")
}
inspectCmd := exec.Command(dockerBinary, "inspect", "-f", inspectFormat, name)
out, exitCode, err = runCommandWithOutput(inspectCmd)
if err != nil || exitCode != 0 {
t.Fatalf("failed to inspect the image: %s", out)
}
out = strings.TrimSpace(out)
if out != expected {
t.Fatalf("From format %s expected %s, got %s", inspectFormat, expected, out)
}
}
func TestBuildCacheADD(t *testing.T) { func TestBuildCacheADD(t *testing.T) {
buildDirectory := filepath.Join(workingDirectory, "build_tests", "TestBuildCacheADD", "1") buildDirectory := filepath.Join(workingDirectory, "build_tests", "TestBuildCacheADD", "1")
buildCmd := exec.Command(dockerBinary, "build", "-t", "testcacheadd1", ".") buildCmd := exec.Command(dockerBinary, "build", "-t", "testcacheadd1", ".")
@ -606,126 +587,181 @@ func TestBuildRm(t *testing.T) {
logDone("build - ensure --rm doesn't leave containers behind and that --rm=true is the default") logDone("build - ensure --rm doesn't leave containers behind and that --rm=true is the default")
logDone("build - ensure --rm=false overrides the default") logDone("build - ensure --rm=false overrides the default")
} }
func TestBuildWithVolumes(t *testing.T) {
func TestBuildWithVolume(t *testing.T) { name := "testbuildvolumes"
checkSimpleBuild(t, expected := "map[/test1:map[] /test2:map[]]"
` defer deleteImages(name)
FROM scratch _, err := buildImage(name,
VOLUME /test `FROM scratch
`, VOLUME /test1
"testbuildimg", VOLUME /test2`,
"{{json .Config.Volumes}}", true)
`{"/test":{}}`) if err != nil {
t.Fatal(err)
deleteImages("testbuildimg") }
logDone("build - with volume") res, err := inspectField(name, "Config.Volumes")
if err != nil {
t.Fatal(err)
}
if res != expected {
t.Fatalf("Volumes %s, expected %s", res, expected)
}
logDone("build - with volumes")
} }
func TestBuildMaintainer(t *testing.T) { func TestBuildMaintainer(t *testing.T) {
checkSimpleBuild(t, name := "testbuildmaintainer"
` expected := "dockerio"
FROM scratch defer deleteImages(name)
MAINTAINER dockerio _, err := buildImage(name,
`, `FROM scratch
"testbuildimg", MAINTAINER dockerio`,
"{{json .Author}}", true)
`"dockerio"`) if err != nil {
t.Fatal(err)
deleteImages("testbuildimg") }
res, err := inspectField(name, "Author")
if err != nil {
t.Fatal(err)
}
if res != expected {
t.Fatalf("Maintainer %s, expected %s", res, expected)
}
logDone("build - maintainer") logDone("build - maintainer")
} }
func TestBuildUser(t *testing.T) { func TestBuildUser(t *testing.T) {
checkSimpleBuild(t, name := "testbuilduser"
` expected := "dockerio"
FROM busybox defer deleteImages(name)
_, err := buildImage(name,
`FROM busybox
RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd
USER dockerio USER dockerio
RUN [ $(whoami) = 'dockerio' ] RUN [ $(whoami) = 'dockerio' ]`,
`, true)
"testbuildimg", if err != nil {
"{{json .Config.User}}", t.Fatal(err)
`"dockerio"`) }
res, err := inspectField(name, "Config.User")
deleteImages("testbuildimg") if err != nil {
t.Fatal(err)
}
if res != expected {
t.Fatalf("User %s, expected %s", res, expected)
}
logDone("build - user") logDone("build - user")
} }
func TestBuildRelativeWorkdir(t *testing.T) { func TestBuildRelativeWorkdir(t *testing.T) {
checkSimpleBuild(t, name := "testbuildrelativeworkdir"
` expected := "/test2/test3"
FROM busybox defer deleteImages(name)
_, err := buildImage(name,
`FROM busybox
RUN [ "$PWD" = '/' ] RUN [ "$PWD" = '/' ]
WORKDIR test1 WORKDIR test1
RUN [ "$PWD" = '/test1' ] RUN [ "$PWD" = '/test1' ]
WORKDIR /test2 WORKDIR /test2
RUN [ "$PWD" = '/test2' ] RUN [ "$PWD" = '/test2' ]
WORKDIR test3 WORKDIR test3
RUN [ "$PWD" = '/test2/test3' ] RUN [ "$PWD" = '/test2/test3' ]`,
`, true)
"testbuildimg", if err != nil {
"{{json .Config.WorkingDir}}", t.Fatal(err)
`"/test2/test3"`) }
res, err := inspectField(name, "Config.WorkingDir")
deleteImages("testbuildimg") if err != nil {
t.Fatal(err)
}
if res != expected {
t.Fatalf("Workdir %s, expected %s", res, expected)
}
logDone("build - relative workdir") logDone("build - relative workdir")
} }
func TestBuildEnv(t *testing.T) { func TestBuildEnv(t *testing.T) {
checkSimpleBuild(t, name := "testbuildenv"
` expected := "[HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PORT=4243]"
FROM busybox defer deleteImages(name)
_, err := buildImage(name,
`FROM busybox
ENV PORT 4243 ENV PORT 4243
RUN [ $(env | grep PORT) = 'PORT=4243' ] RUN [ $(env | grep PORT) = 'PORT=4243' ]`,
`, true)
"testbuildimg", if err != nil {
"{{json .Config.Env}}", t.Fatal(err)
`["HOME=/","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","PORT=4243"]`) }
res, err := inspectField(name, "Config.Env")
deleteImages("testbuildimg") if err != nil {
t.Fatal(err)
}
if res != expected {
t.Fatalf("Env %s, expected %s", res, expected)
}
logDone("build - env") logDone("build - env")
} }
func TestBuildCmd(t *testing.T) { func TestBuildCmd(t *testing.T) {
checkSimpleBuild(t, name := "testbuildcmd"
` expected := "[/bin/echo Hello World]"
FROM scratch defer deleteImages(name)
CMD ["/bin/echo", "Hello World"] _, err := buildImage(name,
`, `FROM scratch
"testbuildimg", CMD ["/bin/echo", "Hello World"]`,
"{{json .Config.Cmd}}", true)
`["/bin/echo","Hello World"]`) if err != nil {
t.Fatal(err)
deleteImages("testbuildimg") }
res, err := inspectField(name, "Config.Cmd")
if err != nil {
t.Fatal(err)
}
if res != expected {
t.Fatalf("Cmd %s, expected %s", res, expected)
}
logDone("build - cmd") logDone("build - cmd")
} }
func TestBuildExpose(t *testing.T) { func TestBuildExpose(t *testing.T) {
checkSimpleBuild(t, name := "testbuildexpose"
` expected := "map[4243/tcp:map[]]"
FROM scratch defer deleteImages(name)
EXPOSE 4243 _, err := buildImage(name,
`, `FROM scratch
EXPOSE 4243`,
"testbuildimg", true)
"{{json .Config.ExposedPorts}}", if err != nil {
`{"4243/tcp":{}}`) t.Fatal(err)
}
deleteImages("testbuildimg") res, err := inspectField(name, "Config.ExposedPorts")
if err != nil {
t.Fatal(err)
}
if res != expected {
t.Fatalf("Exposed ports %s, expected %s", res, expected)
}
logDone("build - expose") logDone("build - expose")
} }
func TestBuildEntrypoint(t *testing.T) { func TestBuildEntrypoint(t *testing.T) {
checkSimpleBuild(t, name := "testbuildentrypoint"
` expected := "[/bin/echo]"
FROM scratch defer deleteImages(name)
ENTRYPOINT ["/bin/echo"] _, err := buildImage(name,
`, `FROM scratch
"testbuildimg", ENTRYPOINT ["/bin/echo"]`,
"{{json .Config.Entrypoint}}", true)
`["/bin/echo"]`) if err != nil {
t.Fatal(err)
deleteImages("testbuildimg") }
res, err := inspectField(name, "Config.Entrypoint")
if err != nil {
t.Fatal(err)
}
if res != expected {
t.Fatalf("Entrypoint %s, expected %s", res, expected)
}
logDone("build - entrypoint") logDone("build - entrypoint")
} }