Преглед на файлове

Fix TestDockerCmd*Timeout racey tests

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
Vincent Demeester преди 9 години
родител
ревизия
7eab3db324
променени са 2 файла, в които са добавени 11 реда и са изтрити 4 реда
  1. 2 3
      pkg/integration/dockerCmd_utils_test.go
  2. 9 1
      pkg/integration/utils.go

+ 2 - 3
pkg/integration/dockerCmd_utils_test.go

@@ -160,7 +160,6 @@ func (s *DockerCmdSuite) TestDockerCmdSuccess(c *check.C) {
 // DockerCmdWithTimeout tests
 // DockerCmdWithTimeout tests
 
 
 func (s *DockerCmdSuite) TestDockerCmdWithTimeout(c *check.C) {
 func (s *DockerCmdSuite) TestDockerCmdWithTimeout(c *check.C) {
-	c.Skip("racey test")
 	cmds := []struct {
 	cmds := []struct {
 		binary           string
 		binary           string
 		args             []string
 		args             []string
@@ -269,7 +268,6 @@ func (s *DockerCmdSuite) TestDockerCmdInDir(c *check.C) {
 // DockerCmdInDirWithTimeout tests
 // DockerCmdInDirWithTimeout tests
 
 
 func (s *DockerCmdSuite) TestDockerCmdInDirWithTimeout(c *check.C) {
 func (s *DockerCmdSuite) TestDockerCmdInDirWithTimeout(c *check.C) {
-	c.Skip("racey test")
 	tempFolder, err := ioutil.TempDir("", "test-docker-cmd-in-dir")
 	tempFolder, err := ioutil.TempDir("", "test-docker-cmd-in-dir")
 	c.Assert(err, check.IsNil)
 	c.Assert(err, check.IsNil)
 
 
@@ -391,7 +389,8 @@ func TestHelperProcess(t *testing.T) {
 		case "a command that times out":
 		case "a command that times out":
 			time.Sleep(10 * time.Millisecond)
 			time.Sleep(10 * time.Millisecond)
 			fmt.Fprintf(os.Stdout, "too long, should be killed")
 			fmt.Fprintf(os.Stdout, "too long, should be killed")
-			os.Exit(0)
+			// A random exit code (that should never happened in tests)
+			os.Exit(7)
 		case "run -ti ubuntu echo hello":
 		case "run -ti ubuntu echo hello":
 			fmt.Fprintf(os.Stdout, "hello")
 			fmt.Fprintf(os.Stdout, "hello")
 		default:
 		default:

+ 9 - 1
pkg/integration/utils.go

@@ -105,8 +105,16 @@ func RunCommandWithOutputForDuration(cmd *exec.Cmd, duration time.Duration) (out
 	cmd.Stderr = &outputBuffer
 	cmd.Stderr = &outputBuffer
 
 
 	done := make(chan error)
 	done := make(chan error)
+
+	// Start the command in the main thread..
+	err = cmd.Start()
+	if err != nil {
+		err = fmt.Errorf("Fail to start command %v : %v", cmd, err)
+	}
+
 	go func() {
 	go func() {
-		exitErr := cmd.Run()
+		// And wait for it to exit in the goroutine :)
+		exitErr := cmd.Wait()
 		exitCode = ProcessExitCode(exitErr)
 		exitCode = ProcessExitCode(exitErr)
 		done <- exitErr
 		done <- exitErr
 	}()
 	}()