func testCommandInvokerCancel(t *testing.T, invoke CommandInvoker, cancelFlag task.CancelFlag, testCase TestCase) { go func() { time.Sleep(100 * time.Millisecond) cancelFlag.Set(task.Canceled) }() start := time.Now() stdout, stderr, exitCode, errs := invoke(testCase.Commands) duration := time.Since(start) // test that the job returned before the normal time assert.True(t, duration.Seconds() <= cancelWaitTimeoutSeconds, "The command took too long to kill (%v)!", duration) // test that we receive kill exception assert.Equal(t, len(errs), 1) assert.IsType(t, &exec.ExitError{}, errs[0]) assertReaderEquals(t, testCase.ExpectedStdout, stdout) assertReaderEquals(t, testCase.ExpectedStderr, stderr) assert.Equal(t, exitCode, testCase.ExpectedExitCode) }