diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index d8bcc2994..9e76c5ce9 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -106,7 +106,7 @@ func (s *E2eSuite) TestSetupError() { It("should display an error if cannot shell out to docker-classic", func() { err := os.Setenv("PATH", s.BinDir) Expect(err).To(BeNil()) - err = os.Remove(filepath.Join(s.BinDir, "docker-classic")) + err = os.Remove(filepath.Join(s.BinDir, DockerClassicExecutable())) Expect(err).To(BeNil()) output, err := s.NewDockerCommand("ps").Exec() Expect(output).To(ContainSubstring("docker-classic")) diff --git a/tests/framework/suite.go b/tests/framework/suite.go index b27e9a553..d37822b50 100644 --- a/tests/framework/suite.go +++ b/tests/framework/suite.go @@ -62,7 +62,7 @@ func (s *Suite) SetupSuite() { } s.T().Fail() }) - s.linkClassicDocker() + s.copyExecutablesInBinDir() } // TearDownSuite is run after all tests @@ -79,22 +79,35 @@ func dirContents(dir string) []string { return res } -func (s *Suite) linkClassicDocker() { - p, err := exec.LookPath("docker-classic") +func (s *Suite) copyExecutablesInBinDir() { + p, err := exec.LookPath(DockerClassicExecutable()) if err != nil { - p, err = exec.LookPath("docker") + p, err = exec.LookPath(dockerExecutable()) } gomega.Expect(err).To(gomega.BeNil()) - err = os.Symlink(p, filepath.Join(s.BinDir, "docker-classic")) + err = copyFiles(p, filepath.Join(s.BinDir, DockerClassicExecutable())) gomega.Expect(err).To(gomega.BeNil()) - dockerPath, err := filepath.Abs("../../bin/docker") + dockerPath, err := filepath.Abs("../../bin/" + dockerExecutable()) gomega.Expect(err).To(gomega.BeNil()) - err = os.Symlink(dockerPath, filepath.Join(s.BinDir, "docker")) + err = copyFiles(dockerPath, filepath.Join(s.BinDir, dockerExecutable())) gomega.Expect(err).To(gomega.BeNil()) err = os.Setenv("PATH", fmt.Sprintf("%s:%s", s.BinDir, os.Getenv("PATH"))) gomega.Expect(err).To(gomega.BeNil()) } +func copyFiles(sourceFile string, destinationFile string) error { + input, err := ioutil.ReadFile(sourceFile) + if err != nil { + return err + } + + err = ioutil.WriteFile(destinationFile, input, 0644) + if err != nil { + return err + } + return nil +} + // BeforeTest is run before each test func (s *Suite) BeforeTest(suite, test string) { d, _ := ioutil.TempDir("", "") @@ -109,12 +122,16 @@ func (s *Suite) AfterTest(suite, test string) { // ListProcessesCommand creates a command to list processes, "tasklist" on windows, "ps" otherwise. func (s *Suite) ListProcessesCommand() *CmdContext { - if runtime.GOOS == "windows" { + if isWindows() { return s.NewCommand("tasklist") } return s.NewCommand("ps") } +func isWindows() bool { + return runtime.GOOS == "windows" +} + // NewCommand creates a command context. func (s *Suite) NewCommand(command string, args ...string) *CmdContext { return &CmdContext{ @@ -125,12 +142,19 @@ func (s *Suite) NewCommand(command string, args ...string) *CmdContext { } func dockerExecutable() string { - if runtime.GOOS == "windows" { + if isWindows() { return "docker.exe" } return "docker" } +func DockerClassicExecutable() string { + if isWindows() { + return "docker-classic.exe" + } + return "docker-classic" +} + // NewDockerCommand creates a docker builder. func (s *Suite) NewDockerCommand(args ...string) *CmdContext { return s.NewCommand(dockerExecutable(), args...)