diff --git a/client/client_test.go b/client/client_test.go index 4b631f7..830e752 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -2072,11 +2072,6 @@ echo bar`) } func testPresaving(t *testing.T, tester shellTester) { - if testutils.IsGithubAction() && tester.ShellName() == "bash" { - // TODO: Debug the issues with presaving and bash, and re-enable this test - t.Skip() - } - // Setup defer testutils.BackupAndRestore(t)() userSecret := installHishtory(t, tester, "") @@ -2090,7 +2085,7 @@ func testPresaving(t *testing.T, tester shellTester) { // Start a command that will take a long time to execute in the background, so // we can check that it was recorded even though it never finished. require.NoError(t, os.Chdir("/")) - go tester.RunInteractiveShell(t, `sleep 13371337`) + require.NoError(t, tester.RunInteractiveShellBackground(t, `sleep 13371337`)) time.Sleep(time.Millisecond * 500) // Test that it shows up in hishtory export diff --git a/client/testutils.go b/client/testutils.go index 89517f7..cf72593 100644 --- a/client/testutils.go +++ b/client/testutils.go @@ -11,6 +11,7 @@ import ( "runtime" "strconv" "strings" + "syscall" "testing" "github.com/DataDog/datadog-go/statsd" @@ -27,6 +28,7 @@ var GLOBAL_STATSD *statsd.Client type shellTester interface { RunInteractiveShell(t testing.TB, script string) string RunInteractiveShellRelaxed(t testing.TB, script string) (string, error) + RunInteractiveShellBackground(t testing.TB, script string) error ShellName() string } type bashTester struct { @@ -58,6 +60,16 @@ func (b bashTester) RunInteractiveShellRelaxed(t testing.TB, script string) (str return outStr, nil } +func (b bashTester) RunInteractiveShellBackground(t testing.TB, script string) error { + cmd := exec.Command("bash", "-i") + // SetSid: true is required to prevent SIGTTIN signal killing the entire test + cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true} + cmd.Stdin = strings.NewReader(script) + cmd.Stdout = nil + cmd.Stderr = nil + return cmd.Start() +} + func (b bashTester) ShellName() string { return "bash" } @@ -88,6 +100,14 @@ func (z zshTester) RunInteractiveShellRelaxed(t testing.TB, script string) (stri return outStr, nil } +func (z zshTester) RunInteractiveShellBackground(t testing.TB, script string) error { + cmd := exec.Command("zsh", "-is") + cmd.Stdin = strings.NewReader(script) + cmd.Stdout = nil + cmd.Stderr = nil + return cmd.Start() +} + func (z zshTester) ShellName() string { return "zsh" }