docker_test_vars.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "os"
  6. "os/exec"
  7. "github.com/docker/docker/pkg/reexec"
  8. )
  9. var (
  10. // the docker client binary to use
  11. dockerBinary = "docker"
  12. // the docker daemon binary to use
  13. dockerdBinary = "dockerd"
  14. // path to containerd's ctr binary
  15. ctrBinary = "docker-containerd-ctr"
  16. // the private registry image to use for tests involving the registry
  17. registryImageName = "registry"
  18. // the private registry to use for tests
  19. privateRegistryURL = "127.0.0.1:5000"
  20. // TODO Windows CI. These are incorrect and need fixing into
  21. // platform specific pieces.
  22. runtimePath = "/var/run/docker"
  23. workingDirectory string
  24. // isLocalDaemon is true if the daemon under test is on the same
  25. // host as the CLI.
  26. isLocalDaemon bool
  27. // daemonPlatform is held globally so that tests can make intelligent
  28. // decisions on how to configure themselves according to the platform
  29. // of the daemon. This is initialized in docker_utils by sending
  30. // a version call to the daemon and examining the response header.
  31. daemonPlatform string
  32. // windowsDaemonKV is used on Windows to distinguish between different
  33. // versions. This is necessary to enable certain tests based on whether
  34. // the platform supports it. For example, Windows Server 2016 TP3 did
  35. // not support volumes, but TP4 did.
  36. windowsDaemonKV int
  37. // daemonDefaultImage is the name of the default image to use when running
  38. // tests. This is platform dependent.
  39. daemonDefaultImage string
  40. // For a local daemon on Linux, these values will be used for testing
  41. // user namespace support as the standard graph path(s) will be
  42. // appended with the root remapped uid.gid prefix
  43. dockerBasePath string
  44. volumesConfigPath string
  45. containerStoragePath string
  46. // daemonStorageDriver is held globally so that tests can know the storage
  47. // driver of the daemon. This is initialized in docker_utils by sending
  48. // a version call to the daemon and examining the response header.
  49. daemonStorageDriver string
  50. // WindowsBaseImage is the name of the base image for Windows testing
  51. // Environment variable WINDOWS_BASE_IMAGE can override this
  52. WindowsBaseImage = "windowsservercore"
  53. )
  54. const (
  55. // DefaultImage is the name of the base image for the majority of tests that
  56. // are run across suites
  57. DefaultImage = "busybox"
  58. )
  59. func init() {
  60. reexec.Init()
  61. if dockerBin := os.Getenv("DOCKER_BINARY"); dockerBin != "" {
  62. dockerBinary = dockerBin
  63. }
  64. var err error
  65. dockerBinary, err = exec.LookPath(dockerBinary)
  66. if err != nil {
  67. fmt.Printf("ERROR: couldn't resolve full path to the Docker binary (%v)", err)
  68. os.Exit(1)
  69. }
  70. if registryImage := os.Getenv("REGISTRY_IMAGE"); registryImage != "" {
  71. registryImageName = registryImage
  72. }
  73. if registry := os.Getenv("REGISTRY_URL"); registry != "" {
  74. privateRegistryURL = registry
  75. }
  76. workingDirectory, _ = os.Getwd()
  77. // Deterministically working out the environment in which CI is running
  78. // to evaluate whether the daemon is local or remote is not possible through
  79. // a build tag.
  80. //
  81. // For example Windows to Linux CI under Jenkins tests the 64-bit
  82. // Windows binary build with the daemon build tag, but calls a remote
  83. // Linux daemon.
  84. //
  85. // We can't just say if Windows then assume the daemon is local as at
  86. // some point, we will be testing the Windows CLI against a Windows daemon.
  87. //
  88. // Similarly, it will be perfectly valid to also run CLI tests from
  89. // a Linux CLI (built with the daemon tag) against a Windows daemon.
  90. if len(os.Getenv("DOCKER_REMOTE_DAEMON")) > 0 {
  91. isLocalDaemon = false
  92. } else {
  93. isLocalDaemon = true
  94. }
  95. // TODO Windows CI. This are incorrect and need fixing into
  96. // platform specific pieces.
  97. // This is only used for a tests with local daemon true (Linux-only today)
  98. // default is "/var/lib/docker", but we'll try and ask the
  99. // /info endpoint for the specific root dir
  100. dockerBasePath = "/var/lib/docker"
  101. type Info struct {
  102. DockerRootDir string
  103. }
  104. var i Info
  105. status, b, err := sockRequest("GET", "/info", nil)
  106. if err == nil && status == 200 {
  107. if err = json.Unmarshal(b, &i); err == nil {
  108. dockerBasePath = i.DockerRootDir
  109. }
  110. }
  111. volumesConfigPath = dockerBasePath + "/volumes"
  112. containerStoragePath = dockerBasePath + "/containers"
  113. if len(os.Getenv("WINDOWS_BASE_IMAGE")) > 0 {
  114. WindowsBaseImage = os.Getenv("WINDOWS_BASE_IMAGE")
  115. fmt.Println("INFO: Windows Base image is ", WindowsBaseImage)
  116. }
  117. }