fixtures_linux_daemon.go 4.5 KB

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