github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/integration-cli/fixtures_linux_daemon_test.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "os/exec" 8 "path/filepath" 9 "runtime" 10 "strings" 11 "sync" 12 13 "github.com/docker/docker/integration-cli/checker" 14 "github.com/docker/docker/integration-cli/fixtures/load" 15 "github.com/go-check/check" 16 ) 17 18 type testingT interface { 19 logT 20 Fatalf(string, ...interface{}) 21 } 22 23 type logT interface { 24 Logf(string, ...interface{}) 25 } 26 27 func ensureFrozenImagesLinux(t testingT) { 28 images := []string{"busybox:latest", "hello-world:frozen", "debian:jessie"} 29 err := load.FrozenImagesLinux(dockerBinary, images...) 30 if err != nil { 31 t.Logf(dockerCmdWithError("images")) 32 t.Fatalf("%+v", err) 33 } 34 for _, img := range images { 35 protectedImages[img] = struct{}{} 36 } 37 } 38 39 var ensureSyscallTestOnce sync.Once 40 41 func ensureSyscallTest(c *check.C) { 42 var doIt bool 43 ensureSyscallTestOnce.Do(func() { 44 doIt = true 45 }) 46 if !doIt { 47 return 48 } 49 protectedImages["syscall-test:latest"] = struct{}{} 50 51 // if no match, must build in docker, which is significantly slower 52 // (slower mostly because of the vfs graphdriver) 53 if testEnv.DaemonPlatform() != runtime.GOOS { 54 ensureSyscallTestBuild(c) 55 return 56 } 57 58 tmp, err := ioutil.TempDir("", "syscall-test-build") 59 c.Assert(err, checker.IsNil, check.Commentf("couldn't create temp dir")) 60 defer os.RemoveAll(tmp) 61 62 gcc, err := exec.LookPath("gcc") 63 c.Assert(err, checker.IsNil, check.Commentf("could not find gcc")) 64 65 tests := []string{"userns", "ns", "acct", "setuid", "setgid", "socket", "raw", "appletalk"} 66 for _, test := range tests { 67 out, err := exec.Command(gcc, "-g", "-Wall", "-static", fmt.Sprintf("../contrib/syscall-test/%s.c", test), "-o", fmt.Sprintf("%s/%s-test", tmp, test)).CombinedOutput() 68 c.Assert(err, checker.IsNil, check.Commentf(string(out))) 69 } 70 71 if runtime.GOOS == "linux" && runtime.GOARCH == "amd64" { 72 out, err := exec.Command(gcc, "-s", "-m32", "-nostdlib", "../contrib/syscall-test/exit32.s", "-o", tmp+"/"+"exit32-test").CombinedOutput() 73 c.Assert(err, checker.IsNil, check.Commentf(string(out))) 74 } 75 76 dockerFile := filepath.Join(tmp, "Dockerfile") 77 content := []byte(` 78 FROM debian:jessie 79 COPY . /usr/bin/ 80 `) 81 err = ioutil.WriteFile(dockerFile, content, 600) 82 c.Assert(err, checker.IsNil) 83 84 var buildArgs []string 85 if arg := os.Getenv("DOCKER_BUILD_ARGS"); strings.TrimSpace(arg) != "" { 86 buildArgs = strings.Split(arg, " ") 87 } 88 buildArgs = append(buildArgs, []string{"-q", "-t", "syscall-test", tmp}...) 89 buildArgs = append([]string{"build"}, buildArgs...) 90 dockerCmd(c, buildArgs...) 91 } 92 93 func ensureSyscallTestBuild(c *check.C) { 94 err := load.FrozenImagesLinux(dockerBinary, "buildpack-deps:jessie") 95 c.Assert(err, checker.IsNil) 96 97 var buildArgs []string 98 if arg := os.Getenv("DOCKER_BUILD_ARGS"); strings.TrimSpace(arg) != "" { 99 buildArgs = strings.Split(arg, " ") 100 } 101 buildArgs = append(buildArgs, []string{"-q", "-t", "syscall-test", "../contrib/syscall-test"}...) 102 buildArgs = append([]string{"build"}, buildArgs...) 103 dockerCmd(c, buildArgs...) 104 } 105 106 func ensureNNPTest(c *check.C) { 107 protectedImages["nnp-test:latest"] = struct{}{} 108 if testEnv.DaemonPlatform() != runtime.GOOS { 109 ensureNNPTestBuild(c) 110 return 111 } 112 113 tmp, err := ioutil.TempDir("", "docker-nnp-test") 114 c.Assert(err, checker.IsNil) 115 116 gcc, err := exec.LookPath("gcc") 117 c.Assert(err, checker.IsNil, check.Commentf("could not find gcc")) 118 119 out, err := exec.Command(gcc, "-g", "-Wall", "-static", "../contrib/nnp-test/nnp-test.c", "-o", filepath.Join(tmp, "nnp-test")).CombinedOutput() 120 c.Assert(err, checker.IsNil, check.Commentf(string(out))) 121 122 dockerfile := filepath.Join(tmp, "Dockerfile") 123 content := ` 124 FROM debian:jessie 125 COPY . /usr/bin 126 RUN chmod +s /usr/bin/nnp-test 127 ` 128 err = ioutil.WriteFile(dockerfile, []byte(content), 600) 129 c.Assert(err, checker.IsNil, check.Commentf("could not write Dockerfile for nnp-test image")) 130 131 var buildArgs []string 132 if arg := os.Getenv("DOCKER_BUILD_ARGS"); strings.TrimSpace(arg) != "" { 133 buildArgs = strings.Split(arg, " ") 134 } 135 buildArgs = append(buildArgs, []string{"-q", "-t", "nnp-test", tmp}...) 136 buildArgs = append([]string{"build"}, buildArgs...) 137 dockerCmd(c, buildArgs...) 138 } 139 140 func ensureNNPTestBuild(c *check.C) { 141 err := load.FrozenImagesLinux(dockerBinary, "buildpack-deps:jessie") 142 c.Assert(err, checker.IsNil) 143 144 var buildArgs []string 145 if arg := os.Getenv("DOCKER_BUILD_ARGS"); strings.TrimSpace(arg) != "" { 146 buildArgs = strings.Split(arg, " ") 147 } 148 buildArgs = append(buildArgs, []string{"-q", "-t", "npp-test", "../contrib/nnp-test"}...) 149 buildArgs = append([]string{"build"}, buildArgs...) 150 dockerCmd(c, buildArgs...) 151 }