Browse Source

Fix windows E2E suite setup to work properly on windows

guillaume.tardif 5 years ago
parent
commit
bed0b81343
2 changed files with 34 additions and 10 deletions
  1. 1 1
      tests/e2e/e2e_test.go
  2. 33 9
      tests/framework/suite.go

+ 1 - 1
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"))

+ 33 - 9
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...)