github.com/endophage/docker@v1.4.2-0.20161027011718-242853499895/integration-cli/fixtures_linux_daemon.go (about)

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