diff --git a/tests/defaults/ctlsock_test.go b/tests/defaults/ctlsock_test.go index 212ded4..b987bf6 100644 --- a/tests/defaults/ctlsock_test.go +++ b/tests/defaults/ctlsock_test.go @@ -4,7 +4,6 @@ import ( "os" "syscall" "testing" - "time" "github.com/rfjakob/gocryptfs/internal/ctlsock" "github.com/rfjakob/gocryptfs/tests/test_helpers" @@ -38,9 +37,6 @@ func TestCtlSock(t *testing.T) { t.Errorf("We should get a warning about non-canonical paths here") } } - // Give the running gocryptfs process a little bit of time to close lingering - // sockets. Avoid triggering the FD leak detector. - time.Sleep(1 * time.Millisecond) } func TestCtlSockDecrypt(t *testing.T) { @@ -91,9 +87,6 @@ func TestCtlSockDecrypt(t *testing.T) { t.Errorf("want=%q got=%q", p, response.Result) } } - // Give the running gocryptfs process a little bit of time to close lingering - // sockets. Avoid triggering the FD leak detector. - time.Sleep(1 * time.Millisecond) } func TestCtlSockDecryptCrash(t *testing.T) { diff --git a/tests/reverse/ctlsock_test.go b/tests/reverse/ctlsock_test.go index 6991f4f..6ccc724 100644 --- a/tests/reverse/ctlsock_test.go +++ b/tests/reverse/ctlsock_test.go @@ -4,7 +4,6 @@ import ( "io/ioutil" "syscall" "testing" - "time" "github.com/rfjakob/gocryptfs/internal/ctlsock" "github.com/rfjakob/gocryptfs/tests/test_helpers" @@ -68,9 +67,6 @@ func TestCtlSockPathOps(t *testing.T) { if response.ErrNo != int32(syscall.ENOENT) { t.Errorf("File should not exist: ErrNo=%d ErrText=%s", response.ErrNo, response.ErrText) } - // Give the running gocryptfs process a little bit of time to close lingering - // sockets. Avoid triggering the FD leak detector. - time.Sleep(1 * time.Millisecond) } // We should not panic when somebody feeds requests that make no sense @@ -89,7 +85,4 @@ func TestCtlSockCrash(t *testing.T) { // Try to crash it req := ctlsock.RequestStruct{DecryptPath: "gocryptfs.longname.XXX_TestCtlSockCrash_XXX.name"} test_helpers.QueryCtlSock(t, sock, req) - // Give the running gocryptfs process a little bit of time to close lingering - // sockets. Avoid triggering the FD leak detector. - time.Sleep(1 * time.Millisecond) } diff --git a/tests/reverse/exclude_test.go b/tests/reverse/exclude_test.go index c1b2180..aaecd65 100644 --- a/tests/reverse/exclude_test.go +++ b/tests/reverse/exclude_test.go @@ -3,7 +3,6 @@ package reverse_test import ( "io/ioutil" "testing" - "time" "github.com/rfjakob/gocryptfs/internal/ctlsock" "github.com/rfjakob/gocryptfs/tests/test_helpers" @@ -102,9 +101,6 @@ func testExclude(t *testing.T, flag string) { t.Errorf("File %q / %q is hidden, but should be visible", pOk[i], v) } } - // Give the running gocryptfs process a little bit of time to close lingering - // sockets. Avoid triggering the FD leak detector. - time.Sleep(1 * time.Millisecond) } func TestExclude(t *testing.T) { diff --git a/tests/test_helpers/mount_unmount.go b/tests/test_helpers/mount_unmount.go index 1142666..cce763a 100644 --- a/tests/test_helpers/mount_unmount.go +++ b/tests/test_helpers/mount_unmount.go @@ -141,14 +141,22 @@ func UnmountErr(dir string) (err error) { for i := 1; i <= max; i++ { if pid > 0 { fdsNow = ListFds(pid) + if len(fdsNow) > len(fds) { + // File close on FUSE is asynchronous, closing a socket + // when testing -ctlsock as well. Wait one extra millisecond + // and hope that all close commands get through to the gocryptfs + // process. + time.Sleep(1 * time.Millisecond) + fdsNow = ListFds(pid) + } } cmd := exec.Command(UnmountScript, "-u", dir) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err = cmd.Run() if err == nil { - if pid > 0 && len(fdsNow) > len(fds) { - fmt.Printf("FD leak? Details:\nold=%v \nnew=%v\n", fds, fdsNow) + if len(fdsNow) > len(fds) { + return fmt.Errorf("FD leak? pid=%d dir=%q, fds:\nold=%v \nnew=%v\n", pid, dir, fds, fdsNow) } return nil }