diff --git a/api/internal/testutil/server.go b/api/internal/testutil/server.go index b927e8e04..0447f5dca 100644 --- a/api/internal/testutil/server.go +++ b/api/internal/testutil/server.go @@ -20,6 +20,7 @@ import ( "net/http" "os" "os/exec" + "time" cleanhttp "github.com/hashicorp/go-cleanhttp" "github.com/hashicorp/nomad/api/internal/testutil/discover" @@ -231,13 +232,35 @@ func NewTestServer(t testing.T, cb ServerConfigCallback) *TestServer { func (s *TestServer) Stop() { defer os.RemoveAll(s.Config.DataDir) - if err := s.cmd.Process.Kill(); err != nil { + // wait for the process to exit to be sure that the data dir can be + // deleted on all platforms. + done := make(chan struct{}) + go func() { + defer close(done) + + s.cmd.Wait() + }() + + // kill and wait gracefully + if err := s.cmd.Process.Signal(os.Interrupt); err != nil { s.t.Errorf("err: %s", err) } - // wait for the process to exit to be sure that the data dir can be - // deleted on all platforms. - s.cmd.Wait() + select { + case <-done: + return + case <-time.After(5 * time.Second): + s.t.Logf("timed out waiting for process to gracefully terminate") + } + + if err := s.cmd.Process.Kill(); err != nil { + s.t.Errorf("err: %s", err) + } + select { + case <-done: + case <-time.After(5 * time.Second): + s.t.Logf("timed out waiting for process to be killed") + } } // waitForAPI waits for only the agent HTTP endpoint to start diff --git a/client/alloc_endpoint_test.go b/client/alloc_endpoint_test.go index 246fa79c7..e6d890e38 100644 --- a/client/alloc_endpoint_test.go +++ b/client/alloc_endpoint_test.go @@ -40,7 +40,7 @@ func TestAllocations_Restart(t *testing.T) { Mode: nstructs.RestartPolicyModeFail, } a.Job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ - "run_for": "10ms", + "run_for": "10s", } require.Nil(client.addAlloc(a, "")) diff --git a/drivers/shared/executor/executor_test.go b/drivers/shared/executor/executor_test.go index ac8b9d034..41b141762 100644 --- a/drivers/shared/executor/executor_test.go +++ b/drivers/shared/executor/executor_test.go @@ -157,8 +157,8 @@ func TestExecutor_Start_Wait_Failure_Code(pt *testing.T) { require := require.New(t) testExecCmd := testExecutorCommand(t) execCmd, allocDir := testExecCmd.command, testExecCmd.allocDir - execCmd.Cmd = "/bin/date" - execCmd.Args = []string{"fail"} + execCmd.Cmd = "/bin/sh" + execCmd.Args = []string{"-c", "sleep 1; /bin/date fail"} factory.configureExecCmd(t, execCmd) defer allocDir.Destroy() executor := factory.new(testlog.HCLogger(t))