Fix testPresaving/bash by calling SetSid to prevent SIGTTIN signal from killing the test

This commit is contained in:
David Dworken 2023-09-29 21:38:50 -07:00
parent 2c77c3d9c9
commit 33f09ea030
No known key found for this signature in database
2 changed files with 21 additions and 6 deletions

View File

@ -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

View File

@ -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"
}