From 2b95f012db167e15c72bf30c7f3abbd879f77a42 Mon Sep 17 00:00:00 2001 From: Darren Stahl Date: Mon, 25 Jan 2016 15:58:03 -0800 Subject: [PATCH] Second set of enabling TestBuild CI for Windows Signed-off-by: Darren Stahl --- integration-cli/docker_cli_build_test.go | 189 +++++++++++++++-------- 1 file changed, 126 insertions(+), 63 deletions(-) diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go index ecbbdc7975..1004212504 100644 --- a/integration-cli/docker_cli_build_test.go +++ b/integration-cli/docker_cli_build_test.go @@ -536,7 +536,6 @@ func (s *DockerSuite) TestBuildOnBuildForbiddenChainedInSourceImage(c *check.C) } func (s *DockerSuite) TestBuildOnBuildCmdEntrypointJSON(c *check.C) { - testRequires(c, DaemonIsLinux) name1 := "onbuildcmd" name2 := "onbuildgenerated" @@ -557,16 +556,15 @@ ONBUILD RUN ["true"]`, c.Fatal(err) } - out, _ := dockerCmd(c, "run", "-t", name2) + out, _ := dockerCmd(c, "run", name2) if !regexp.MustCompile(`(?m)^hello world`).MatchString(out) { - c.Fatal("did not get echo output from onbuild", out) + c.Fatalf("did not get echo output from onbuild. Got: %q", out) } } func (s *DockerSuite) TestBuildOnBuildEntrypointJSON(c *check.C) { - testRequires(c, DaemonIsLinux) name1 := "onbuildcmd" name2 := "onbuildgenerated" @@ -585,7 +583,7 @@ ONBUILD ENTRYPOINT ["echo"]`, c.Fatal(err) } - out, _ := dockerCmd(c, "run", "-t", name2) + out, _ := dockerCmd(c, "run", name2) if !regexp.MustCompile(`(?m)^hello world`).MatchString(out) { c.Fatal("got malformed output from onbuild", out) @@ -594,7 +592,7 @@ ONBUILD ENTRYPOINT ["echo"]`, } func (s *DockerSuite) TestBuildCacheAdd(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Windows doesn't have httpserver image yet name := "testbuildtwoimageswithadd" server, err := fakeStorage(map[string]string{ "robots.txt": "hello", @@ -629,7 +627,7 @@ func (s *DockerSuite) TestBuildCacheAdd(c *check.C) { } func (s *DockerSuite) TestBuildLastModified(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Windows doesn't have httpserver image yet name := "testbuildlastmodified" server, err := fakeStorage(map[string]string{ @@ -695,9 +693,20 @@ RUN ls -le /file` } func (s *DockerSuite) TestBuildSixtySteps(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // TODO Windows: This test passes on Windows, + // but currently adds a disproportionate amount of time for the value it has. + // Removing it from Windows CI for now, but this will be revisited in the + // TP5 timeframe when perf is better. name := "foobuildsixtysteps" - ctx, err := fakeContext("FROM scratch\n"+strings.Repeat("ADD foo /\n", 60), + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext("FROM "+baseImage+"\n"+strings.Repeat("ADD foo /\n", 60), map[string]string{ "foo": "test1", }) @@ -712,7 +721,7 @@ func (s *DockerSuite) TestBuildSixtySteps(c *check.C) { } func (s *DockerSuite) TestBuildAddSingleFileToRoot(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testaddimg" ctx, err := fakeContext(fmt.Sprintf(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -738,7 +747,6 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, expecte // Issue #3960: "ADD src ." hangs func (s *DockerSuite) TestBuildAddSingleFileToWorkdir(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testaddsinglefiletoworkdir" ctx, err := fakeContext(`FROM busybox ADD test_file .`, @@ -765,7 +773,7 @@ ADD test_file .`, } func (s *DockerSuite) TestBuildAddSingleFileToExistDir(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testaddsinglefiletoexistdir" ctx, err := fakeContext(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -791,7 +799,7 @@ RUN [ $(ls -l /exists/exists_file | awk '{print $3":"$4}') = 'dockerio:dockerio' } func (s *DockerSuite) TestBuildCopyAddMultipleFiles(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test server, err := fakeStorage(map[string]string{ "robots.txt": "hello", }) @@ -836,9 +844,16 @@ RUN [ $(ls -l /exists/exists_file | awk '{print $3":"$4}') = 'dockerio:dockerio' } func (s *DockerSuite) TestBuildAddMultipleFilesToFile(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testaddmultiplefilestofile" - ctx, err := fakeContext(`FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext(`FROM `+baseImage+` ADD file1.txt file2.txt test `, map[string]string{ @@ -858,9 +873,16 @@ func (s *DockerSuite) TestBuildAddMultipleFilesToFile(c *check.C) { } func (s *DockerSuite) TestBuildJSONAddMultipleFilesToFile(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testjsonaddmultiplefilestofile" - ctx, err := fakeContext(`FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext(`FROM `+baseImage+` ADD ["file1.txt", "file2.txt", "test"] `, map[string]string{ @@ -880,9 +902,16 @@ func (s *DockerSuite) TestBuildJSONAddMultipleFilesToFile(c *check.C) { } func (s *DockerSuite) TestBuildAddMultipleFilesToFileWild(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testaddmultiplefilestofilewild" - ctx, err := fakeContext(`FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext(`FROM `+baseImage+` ADD file*.txt test `, map[string]string{ @@ -902,9 +931,16 @@ func (s *DockerSuite) TestBuildAddMultipleFilesToFileWild(c *check.C) { } func (s *DockerSuite) TestBuildJSONAddMultipleFilesToFileWild(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testjsonaddmultiplefilestofilewild" - ctx, err := fakeContext(`FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext(`FROM `+baseImage+` ADD ["file*.txt", "test"] `, map[string]string{ @@ -924,9 +960,16 @@ func (s *DockerSuite) TestBuildJSONAddMultipleFilesToFileWild(c *check.C) { } func (s *DockerSuite) TestBuildCopyMultipleFilesToFile(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testcopymultiplefilestofile" - ctx, err := fakeContext(`FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext(`FROM `+baseImage+` COPY file1.txt file2.txt test `, map[string]string{ @@ -946,9 +989,16 @@ func (s *DockerSuite) TestBuildCopyMultipleFilesToFile(c *check.C) { } func (s *DockerSuite) TestBuildJSONCopyMultipleFilesToFile(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testjsoncopymultiplefilestofile" - ctx, err := fakeContext(`FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext(`FROM `+baseImage+` COPY ["file1.txt", "file2.txt", "test"] `, map[string]string{ @@ -968,7 +1018,7 @@ func (s *DockerSuite) TestBuildJSONCopyMultipleFilesToFile(c *check.C) { } func (s *DockerSuite) TestBuildAddFileWithWhitespace(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Not currently passing on Windows name := "testaddfilewithwhitespace" ctx, err := fakeContext(`FROM busybox RUN mkdir "/test dir" @@ -1004,7 +1054,7 @@ RUN [ $(cat "/test dir/test_file6") = 'test6' ]`, } func (s *DockerSuite) TestBuildCopyFileWithWhitespace(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Not currently passing on Windows name := "testcopyfilewithwhitespace" ctx, err := fakeContext(`FROM busybox RUN mkdir "/test dir" @@ -1040,7 +1090,6 @@ RUN [ $(cat "/test dir/test_file6") = 'test6' ]`, } func (s *DockerSuite) TestBuildAddMultipleFilesToFileWithWhitespace(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testaddmultiplefilestofilewithwhitespace" ctx, err := fakeContext(`FROM busybox ADD [ "test file1", "test file2", "test" ] @@ -1062,7 +1111,6 @@ func (s *DockerSuite) TestBuildAddMultipleFilesToFileWithWhitespace(c *check.C) } func (s *DockerSuite) TestBuildCopyMultipleFilesToFileWithWhitespace(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testcopymultiplefilestofilewithwhitespace" ctx, err := fakeContext(`FROM busybox COPY [ "test file1", "test file2", "test" ] @@ -1084,7 +1132,7 @@ func (s *DockerSuite) TestBuildCopyMultipleFilesToFileWithWhitespace(c *check.C) } func (s *DockerSuite) TestBuildCopyWildcard(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Windows doesn't have httpserver image yet name := "testcopywildcard" server, err := fakeStorage(map[string]string{ "robots.txt": "hello", @@ -1135,7 +1183,6 @@ func (s *DockerSuite) TestBuildCopyWildcard(c *check.C) { } func (s *DockerSuite) TestBuildCopyWildcardNoFind(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testcopywildcardnofind" ctx, err := fakeContext(`FROM busybox COPY file*.txt /tmp/ @@ -1156,7 +1203,6 @@ func (s *DockerSuite) TestBuildCopyWildcardNoFind(c *check.C) { } func (s *DockerSuite) TestBuildCopyWildcardInName(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testcopywildcardinname" ctx, err := fakeContext(`FROM busybox COPY *.txt /tmp/ @@ -1181,7 +1227,6 @@ func (s *DockerSuite) TestBuildCopyWildcardInName(c *check.C) { } func (s *DockerSuite) TestBuildCopyWildcardCache(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testcopywildcardcache" ctx, err := fakeContext(`FROM busybox COPY file1.txt /tmp/`, @@ -1215,7 +1260,7 @@ func (s *DockerSuite) TestBuildCopyWildcardCache(c *check.C) { } func (s *DockerSuite) TestBuildAddSingleFileToNonExistingDir(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testaddsinglefiletononexistingdir" ctx, err := fakeContext(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1241,7 +1286,7 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, } func (s *DockerSuite) TestBuildAddDirContentToRoot(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testadddircontenttoroot" ctx, err := fakeContext(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1265,7 +1310,7 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, } func (s *DockerSuite) TestBuildAddDirContentToExistingDir(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testadddircontenttoexistingdir" ctx, err := fakeContext(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1291,7 +1336,7 @@ RUN [ $(ls -l /exists/test_file | awk '{print $3":"$4}') = 'root:root' ]`, } func (s *DockerSuite) TestBuildAddWholeDirToRoot(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testaddwholedirtoroot" ctx, err := fakeContext(fmt.Sprintf(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1319,9 +1364,16 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, expecte // Testing #5941 func (s *DockerSuite) TestBuildAddEtcToRoot(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testaddetctoroot" - ctx, err := fakeContext(`FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext(`FROM `+baseImage+` ADD . /`, map[string]string{ "etc/test_file": "test1", @@ -1338,7 +1390,7 @@ ADD . /`, // Testing #9401 func (s *DockerSuite) TestBuildAddPreservesFilesSpecialBits(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testaddpreservesfilesspecialbits" ctx, err := fakeContext(`FROM busybox ADD suidbin /usr/bin/suidbin @@ -1361,7 +1413,7 @@ RUN [ $(ls -l /usr/bin/suidbin | awk '{print $1}') = '-rwsr-xr-x' ]`, } func (s *DockerSuite) TestBuildCopySingleFileToRoot(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testcopysinglefiletoroot" ctx, err := fakeContext(fmt.Sprintf(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1387,7 +1439,6 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, expecte // Issue #3960: "ADD src ." hangs - adapted for COPY func (s *DockerSuite) TestBuildCopySingleFileToWorkdir(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testcopysinglefiletoworkdir" ctx, err := fakeContext(`FROM busybox COPY test_file .`, @@ -1414,7 +1465,7 @@ COPY test_file .`, } func (s *DockerSuite) TestBuildCopySingleFileToExistDir(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testcopysinglefiletoexistdir" ctx, err := fakeContext(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1440,7 +1491,7 @@ RUN [ $(ls -l /exists/exists_file | awk '{print $3":"$4}') = 'dockerio:dockerio' } func (s *DockerSuite) TestBuildCopySingleFileToNonExistDir(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testcopysinglefiletononexistdir" ctx, err := fakeContext(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1465,7 +1516,7 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, } func (s *DockerSuite) TestBuildCopyDirContentToRoot(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testcopydircontenttoroot" ctx, err := fakeContext(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1489,7 +1540,7 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, } func (s *DockerSuite) TestBuildCopyDirContentToExistDir(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testcopydircontenttoexistdir" ctx, err := fakeContext(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1515,7 +1566,7 @@ RUN [ $(ls -l /exists/test_file | awk '{print $3":"$4}') = 'root:root' ]`, } func (s *DockerSuite) TestBuildCopyWholeDirToRoot(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // Linux specific test name := "testcopywholedirtoroot" ctx, err := fakeContext(fmt.Sprintf(`FROM busybox RUN echo 'dockerio:x:1001:1001::/bin:/bin/false' >> /etc/passwd @@ -1542,9 +1593,16 @@ RUN [ $(ls -l /exists | awk '{print $3":"$4}') = 'dockerio:dockerio' ]`, expecte } func (s *DockerSuite) TestBuildCopyEtcToRoot(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testcopyetctoroot" - ctx, err := fakeContext(`FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + ctx, err := fakeContext(`FROM `+baseImage+` COPY . /`, map[string]string{ "etc/test_file": "test1", @@ -1560,9 +1618,16 @@ COPY . /`, } func (s *DockerSuite) TestBuildCopyDisallowRemote(c *check.C) { - testRequires(c, DaemonIsLinux) name := "testcopydisallowremote" - _, out, err := buildImageWithOut(name, `FROM scratch + + var baseImage string + if daemonPlatform == "windows" { + baseImage = "windowsservercore" + } else { + baseImage = "scratch" + } + + _, out, err := buildImageWithOut(name, `FROM `+baseImage+` COPY https://index.docker.io/robots.txt /`, true) if err == nil || !strings.Contains(out, "Source can't be a URL for COPY") { @@ -1571,15 +1636,14 @@ COPY https://index.docker.io/robots.txt /`, } func (s *DockerSuite) TestBuildAddBadLinks(c *check.C) { - testRequires(c, DaemonIsLinux) - const ( - dockerfile = ` - FROM scratch - ADD links.tar / - ADD foo.txt /symlink/ - ` - targetFile = "foo.txt" - ) + testRequires(c, DaemonIsLinux) // Not currently working on Windows + + dockerfile := ` + FROM scratch + ADD links.tar / + ADD foo.txt /symlink/ + ` + targetFile := "foo.txt" var ( name = "test-link-absolute" ) @@ -1658,7 +1722,7 @@ func (s *DockerSuite) TestBuildAddBadLinks(c *check.C) { } func (s *DockerSuite) TestBuildAddBadLinksVolume(c *check.C) { - testRequires(c, DaemonIsLinux) + testRequires(c, DaemonIsLinux) // ln not implemented on Windows busybox const ( dockerfileTemplate = ` FROM busybox @@ -1711,8 +1775,7 @@ func (s *DockerSuite) TestBuildAddBadLinksVolume(c *check.C) { // Issue #5270 - ensure we throw a better error than "unexpected EOF" // when we can't access files in the context. func (s *DockerSuite) TestBuildWithInaccessibleFilesInContext(c *check.C) { - testRequires(c, DaemonIsLinux) - testRequires(c, UnixCli) // test uses chown/chmod: not available on windows + testRequires(c, DaemonIsLinux, UnixCli) // test uses chown/chmod: not available on windows { name := "testbuildinaccessiblefiles"