summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJakob Unterwurzacher2018-02-28 20:03:54 +0100
committerJakob Unterwurzacher2018-02-28 20:03:54 +0100
commit48d5f10c791be37810ae3d880f84140a4122911c (patch)
tree184bdfa6447dd69a5b6c07f2cbd1e40b142a1710 /tests
parentb96e3ee2717531e842c492c3a6799d1d0c3e51cb (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.go14
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()