diff options
author | Jakob Unterwurzacher | 2018-02-28 20:03:54 +0100 |
---|---|---|
committer | Jakob Unterwurzacher | 2018-02-28 20:03:54 +0100 |
commit | 48d5f10c791be37810ae3d880f84140a4122911c (patch) | |
tree | 184bdfa6447dd69a5b6c07f2cbd1e40b142a1710 /tests | |
parent | b96e3ee2717531e842c492c3a6799d1d0c3e51cb (diff) |
test_helpers: use an intermediate pipe for subprocess stdout
To Go test logic waits for stderr and stdout to close, so
when we share it with a subprocess, it will wait for it to
exit as well.
We don't want the tests to hang when the unmount fails.
Seen on MacOS as reported at
https://github.com/rfjakob/gocryptfs/issues/213
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_helpers/helpers.go | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/tests/test_helpers/helpers.go b/tests/test_helpers/helpers.go index 778fd3a..47517a6 100644 --- a/tests/test_helpers/helpers.go +++ b/tests/test_helpers/helpers.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + "io" "io/ioutil" "log" "net" @@ -157,8 +158,17 @@ func Mount(c string, p string, showOutput bool, extraArgs ...string) error { cmd := exec.Command(GocryptfsBinary, args...) if showOutput { - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stdout + // The Go test logic waits for our stdout to close, and when we share + // it with the subprocess, it will wait for it to close it as well. + // Use an intermediate pipe so the tests do not hang when unmouting + // fails. + pr, pw, err := os.Pipe() + if err != nil { + return err + } + cmd.Stderr = pw + cmd.Stdout = pw + go func() { io.Copy(os.Stdout, pr) }() } return cmd.Run() |