From 1c54fcd04bbf274dd5d4300e433bdcb1bb32e1ce Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Mon, 11 Jul 2016 20:31:36 +0200 Subject: [PATCH] tests: use unmount wrapper in ResetTmpDir This should make it work on OSX. Also, split unmount into two functions. Depending on what you want, * UnmountErr returns the resulting error * UnmountPanic panics if the error was not nil --- .../example_filesystems_test.go | 19 +++++++--- tests/matrix/matrix_test.go | 2 +- tests/normal/cli_test.go | 4 +- tests/plaintextnames/plaintextnames_test.go | 2 +- tests/test_helpers/helpers.go | 38 ++++++++++--------- 5 files changed, 38 insertions(+), 27 deletions(-) diff --git a/tests/example_filesystems/example_filesystems_test.go b/tests/example_filesystems/example_filesystems_test.go index 13aa941..e38d3e6 100644 --- a/tests/example_filesystems/example_filesystems_test.go +++ b/tests/example_filesystems/example_filesystems_test.go @@ -7,6 +7,8 @@ package example_filesystems // "-openssl=true". import ( + "flag" + "fmt" "os" "testing" @@ -18,7 +20,12 @@ const statusTxtContent = "It works!\n" var opensslOpt string func TestMain(m *testing.M) { + // Make "testing.Verbose()" return the correct value + flag.Parse() for _, opensslOpt = range []string{"-openssl=false", "-openssl=true"} { + if testing.Verbose() { + fmt.Printf("TestMain: testing with %q\n", opensslOpt) + } test_helpers.ResetTmpDir(true) r := m.Run() if r != 0 { @@ -80,12 +87,12 @@ func TestExampleFSv07(t *testing.T) { } test_helpers.MountOrFatal(t, cDir, pDir, "-extpass", "echo test", opensslOpt) checkExampleFS(t, pDir, true) - test_helpers.Unmount(pDir) + test_helpers.UnmountPanic(pDir) test_helpers.MountOrFatal(t, cDir, pDir, "-masterkey", "ed7f6d83-40cce86c-0e7d79c2-a9438710-575221bf-30a0eb60-2821fa8f-7f3123bf", opensslOpt) checkExampleFS(t, pDir, true) - test_helpers.Unmount(pDir) + test_helpers.UnmountPanic(pDir) } // gocryptfs v0.7 filesystem created with "-plaintextnames" @@ -95,7 +102,7 @@ func TestExampleFSv07PlaintextNames(t *testing.T) { test_helpers.MountOrFatal(t, cDir, pDir, "-extpass", "echo test", opensslOpt) checkExampleFS(t, pDir, true) - test_helpers.Unmount(pDir) + test_helpers.UnmountPanic(pDir) // The actual unmount takes some time, this causes weird problems. Just don't // reuse the mountpoint. pDir = pDir + ".2" @@ -103,7 +110,7 @@ func TestExampleFSv07PlaintextNames(t *testing.T) { "6d96397b-585631e1-c7cba69d-61e738b6-4d5ad2c2-e21f0fb3-52f60d3a-b08526f7", opensslOpt) checkExampleFS(t, pDir, true) - test_helpers.Unmount(pDir) + test_helpers.UnmountPanic(pDir) } // Test example_filesystems/v0.9 @@ -117,11 +124,11 @@ func TestExampleFSv09(t *testing.T) { } test_helpers.MountOrFatal(t, cDir, pDir, "-extpass", "echo test", opensslOpt) checkExampleFSLongnames(t, pDir) - test_helpers.Unmount(pDir) + test_helpers.UnmountPanic(pDir) pDir = pDir + ".2" test_helpers.MountOrFatal(t, cDir, pDir, "-masterkey", "1cafe3f4-bc316466-2214c47c-ecd89bf3-4e078fe4-f5faeea7-8b7cab02-884f5e1c", opensslOpt) checkExampleFSLongnames(t, pDir) - test_helpers.Unmount(pDir) + test_helpers.UnmountPanic(pDir) } diff --git a/tests/matrix/matrix_test.go b/tests/matrix/matrix_test.go index b73a0cf..2bd5b9f 100644 --- a/tests/matrix/matrix_test.go +++ b/tests/matrix/matrix_test.go @@ -45,7 +45,7 @@ func TestMain(m *testing.M) { opts = append(opts, fmt.Sprintf("-plaintextnames=%v", plaintextnames)) test_helpers.MountOrExit(test_helpers.DefaultCipherDir, test_helpers.DefaultPlainDir, opts...) r := m.Run() - test_helpers.Unmount(test_helpers.DefaultPlainDir) + test_helpers.UnmountPanic(test_helpers.DefaultPlainDir) if r != 0 { os.Exit(r) } diff --git a/tests/normal/cli_test.go b/tests/normal/cli_test.go index 4c634f2..ed3111b 100644 --- a/tests/normal/cli_test.go +++ b/tests/normal/cli_test.go @@ -17,7 +17,7 @@ func TestMain(m *testing.M) { test_helpers.ResetTmpDir(false) test_helpers.MountOrExit(test_helpers.DefaultCipherDir, test_helpers.DefaultPlainDir, "--zerokey") r := m.Run() - test_helpers.Unmount(test_helpers.DefaultPlainDir) + test_helpers.UnmountPanic(test_helpers.DefaultPlainDir) os.Exit(r) } @@ -91,7 +91,7 @@ func TestRo(t *testing.T) { dir := test_helpers.InitFS(t) mnt := dir + ".mnt" test_helpers.MountOrFatal(t, dir, mnt, "-ro", "-extpass=echo test") - defer test_helpers.Unmount(mnt) + defer test_helpers.UnmountPanic(mnt) file := mnt + "/file" err := os.Mkdir(file, 0777) diff --git a/tests/plaintextnames/plaintextnames_test.go b/tests/plaintextnames/plaintextnames_test.go index 6c6d272..3523c25 100644 --- a/tests/plaintextnames/plaintextnames_test.go +++ b/tests/plaintextnames/plaintextnames_test.go @@ -21,7 +21,7 @@ func TestMain(m *testing.M) { pDir = cDir + ".mnt" test_helpers.MountOrExit(cDir, pDir, "-extpass", "echo test") r := m.Run() - test_helpers.Unmount(pDir) + test_helpers.UnmountPanic(pDir) os.Exit(r) } diff --git a/tests/test_helpers/helpers.go b/tests/test_helpers/helpers.go index d2c12a9..b42adcd 100644 --- a/tests/test_helpers/helpers.go +++ b/tests/test_helpers/helpers.go @@ -11,7 +11,6 @@ import ( "runtime" "syscall" "testing" - "time" "github.com/rfjakob/gocryptfs/internal/nametransform" ) @@ -50,9 +49,11 @@ func ResetTmpDir(plaintextNames bool) { d := filepath.Join(TmpDir, e.Name()) err = os.Remove(d) if err != nil { - fu := exec.Command("fusermount", "-z", "-u", d) - fu.Run() - os.RemoveAll(d) + UnmountErr(d) + err = os.RemoveAll(d) + if err != nil { + panic(err) + } } } } @@ -141,23 +142,26 @@ func MountOrFatal(t *testing.T, c string, p string, extraArgs ...string) { } } -// Unmount PLAINDIR "p" -func Unmount(p string) error { - var cmd *exec.Cmd - if runtime.GOOS == "darwin" { - cmd = exec.Command("umount", p) - } else { - cmd = exec.Command("fusermount", "-u", "-z", p) - } - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err := cmd.Run() +// UnmountPanic tries to umount "dir" and panics on error. +func UnmountPanic(dir string) { + err := UnmountErr(dir) if err != nil { fmt.Println(err) panic(err) } - time.Sleep(10 * time.Millisecond) - return err +} + +// UnmountError tries to unmount "dir" and returns the resulting error. +func UnmountErr(dir string) error { + var cmd *exec.Cmd + if runtime.GOOS == "darwin" { + cmd = exec.Command("umount", dir) + } else { + cmd = exec.Command("fusermount", "-u", "-z", dir) + } + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() } // Return md5 string for file "filename"