From 57e8df990c7c251b3cc73c2df6af6bf73367d234 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Sun, 16 Oct 2016 13:39:25 +0200 Subject: tests: split "normal" tests into "cli" and "defaults" Also fixes the failure to run the benchmarks do to the missing gocryptfs.diriv. --- tests/cli/cli_test.go | 192 ++++++++++++++++++++++++++++++++++++ tests/defaults/main_test.go | 17 ++++ tests/defaults/performance_test.go | 131 +++++++++++++++++++++++++ tests/matrix/matrix_test.go | 1 + tests/normal/cli_test.go | 194 ------------------------------------- tests/normal/performance_test.go | 131 ------------------------- 6 files changed, 341 insertions(+), 325 deletions(-) create mode 100644 tests/cli/cli_test.go create mode 100644 tests/defaults/main_test.go create mode 100644 tests/defaults/performance_test.go delete mode 100644 tests/normal/cli_test.go delete mode 100644 tests/normal/performance_test.go diff --git a/tests/cli/cli_test.go b/tests/cli/cli_test.go new file mode 100644 index 0000000..bc500db --- /dev/null +++ b/tests/cli/cli_test.go @@ -0,0 +1,192 @@ +package cli + +// Test CLI operations like "-init", "-password" etc + +import ( + "io/ioutil" + "os" + "os/exec" + "testing" + + "github.com/rfjakob/gocryptfs/internal/configfile" + + "github.com/rfjakob/gocryptfs/tests/test_helpers" +) + +func TestMain(m *testing.M) { + test_helpers.ResetTmpDir(false) + r := m.Run() + os.Exit(r) +} + +// Test -init flag +func TestInit(t *testing.T) { + dir := test_helpers.InitFS(t) + _, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfDefaultName, "test") + if err != nil { + t.Fatal(err) + } + if c.IsFeatureFlagSet(configfile.FlagAESSIV) { + t.Error("AESSIV flag should not be set") + } +} + +// Test -init with -aessiv +func TestInitAessiv(t *testing.T) { + dir := test_helpers.InitFS(t, "-aessiv") + _, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfDefaultName, "test") + if err != nil { + t.Fatal(err) + } + if !c.IsFeatureFlagSet(configfile.FlagAESSIV) { + t.Error("AESSIV flag should be set but is not") + } +} + +// Test -init with -reverse +func TestInitReverse(t *testing.T) { + dir := test_helpers.InitFS(t, "-reverse") + _, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfReverseName, "test") + if err != nil { + t.Fatal(err) + } + if !c.IsFeatureFlagSet(configfile.FlagAESSIV) { + t.Error("AESSIV flag should be set but is not") + } +} + +func testPasswd(t *testing.T, dir string, extraArgs ...string) { + // Change password using "-extpass" + args := []string{"-q", "-passwd", "-extpass", "echo test"} + args = append(args, extraArgs...) + args = append(args, dir) + cmd := exec.Command(test_helpers.GocryptfsBinary, args...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err := cmd.Run() + if err != nil { + t.Error(err) + } + // Change password using stdin + args = []string{"-q", "-passwd", "-extpass", "echo test"} + args = append(args, extraArgs...) + args = append(args, dir) + cmd = exec.Command(test_helpers.GocryptfsBinary, args...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + p, err := cmd.StdinPipe() + if err != nil { + t.Fatal(err) + } + err = cmd.Start() + if err != nil { + t.Error(err) + } + // Old password + p.Write([]byte("test\n")) + // New password + p.Write([]byte("newpasswd\n")) + p.Close() + err = cmd.Wait() + if err != nil { + t.Error(err) + } +} + +// Test -passwd flag +func TestPasswd(t *testing.T) { + // Create FS + dir := test_helpers.InitFS(t) + testPasswd(t, dir) +} + +// Test -passwd with -reverse +func TestPasswdReverse(t *testing.T) { + // Create FS + dir := test_helpers.InitFS(t, "-reverse") + testPasswd(t, dir, "-reverse") +} + +// Test -init & -config flag +func TestInitConfig(t *testing.T) { + config := test_helpers.TmpDir + "/TestInitConfig.conf" + dir := test_helpers.InitFS(t, "-config="+config) + + _, err := os.Stat(config) + if err != nil { + t.Fatal(err) + } + + // Test -passwd & -config + cmd2 := exec.Command(test_helpers.GocryptfsBinary, "-q", "-passwd", "-extpass", "echo test", + "-config", config, dir) + cmd2.Stdout = os.Stdout + cmd2.Stderr = os.Stderr + err = cmd2.Run() + if err != nil { + t.Error(err) + } +} + +// Test -ro +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.UnmountPanic(mnt) + + file := mnt + "/file" + err := os.Mkdir(file, 0777) + if err == nil { + t.Errorf("Mkdir should have failed") + } + _, err = os.Create(file) + if err == nil { + t.Errorf("Create should have failed") + } +} + +// Test "-nonempty" +func TestNonempty(t *testing.T) { + dir := test_helpers.InitFS(t) + mnt := dir + ".mnt" + err := os.Mkdir(mnt, 0700) + if err != nil { + t.Fatal(err) + } + err = ioutil.WriteFile(mnt+"/somefile", []byte("xyz"), 0600) + if err != nil { + t.Fatal(err) + } + err = test_helpers.Mount(dir, mnt, false, "-extpass=echo test") + if err == nil { + t.Errorf("Mounting over a file should fail per default") + } + // Should work with "-nonempty" + test_helpers.MountOrFatal(t, dir, mnt, "-nonempty", "-extpass=echo test") + test_helpers.UnmountPanic(mnt) +} + +// Test "mountpoint shadows cipherdir" handling +func TestShadows(t *testing.T) { + mnt := test_helpers.InitFS(t) + cipher := mnt + ".cipher" + err := os.Rename(mnt, cipher) + if err != nil { + t.Fatal(err) + } + // This should work + // (note that MountOrFatal creates "mnt" again) + test_helpers.MountOrFatal(t, cipher, mnt, "-extpass=echo test") + test_helpers.UnmountPanic(mnt) + cipher2 := mnt + "/cipher" + err = os.Rename(cipher, cipher2) + if err != nil { + t.Fatal(err) + } + // This should fail + err = test_helpers.Mount(cipher2, mnt, false, "-extpass=echo test") + if err == nil { + t.Errorf("Should have failed") + } +} diff --git a/tests/defaults/main_test.go b/tests/defaults/main_test.go new file mode 100644 index 0000000..a623c48 --- /dev/null +++ b/tests/defaults/main_test.go @@ -0,0 +1,17 @@ +// Tests and benchmarks performed with default settings only. +package defaults + +import ( + "os" + "testing" + + "github.com/rfjakob/gocryptfs/tests/test_helpers" +) + +func TestMain(m *testing.M) { + test_helpers.ResetTmpDir(true) + test_helpers.MountOrExit(test_helpers.DefaultCipherDir, test_helpers.DefaultPlainDir, "-zerokey") + r := m.Run() + test_helpers.UnmountPanic(test_helpers.DefaultPlainDir) + os.Exit(r) +} diff --git a/tests/defaults/performance_test.go b/tests/defaults/performance_test.go new file mode 100644 index 0000000..a2ecf8c --- /dev/null +++ b/tests/defaults/performance_test.go @@ -0,0 +1,131 @@ +// Tests and benchmarks performed with default settings only. +package defaults + +import ( + "fmt" + "io" + "io/ioutil" + "os" + "testing" + + "github.com/rfjakob/gocryptfs/tests/test_helpers" +) + +// Benchmarks +func BenchmarkStreamWrite(t *testing.B) { + buf := make([]byte, 1024*1024) + t.SetBytes(int64(len(buf))) + + file, err := os.Create(test_helpers.DefaultPlainDir + "/BenchmarkWrite") + if err != nil { + t.Fatal(err) + } + + t.ResetTimer() + var i int + for i = 0; i < t.N; i++ { + written, err := file.Write(buf) + if err != nil { + fmt.Printf("err=\"%s\", written=%d\n", err.Error(), written) + t.Fatal(err) + } + } + file.Close() +} + +func BenchmarkStreamRead(t *testing.B) { + buf := make([]byte, 1024*1024) + t.SetBytes(int64(len(buf))) + + fn := test_helpers.DefaultPlainDir + "/BenchmarkWrite" + fi, err := os.Stat(fn) + if err != nil { + t.Fatal(err) + } + mb := int(fi.Size() / 1024 / 1024) + + if t.N > mb { + // Grow file so we can satisfy the test + //fmt.Printf("Growing file to %d MB... ", t.N) + var f2 *os.File + f2, err = os.OpenFile(fn, os.O_WRONLY|os.O_APPEND, 0666) + if err != nil { + fmt.Println(err) + t.FailNow() + } + for h := 0; h < t.N-mb; h++ { + _, err = f2.Write(buf) + if err != nil { + fmt.Println(err) + t.FailNow() + } + } + f2.Close() + } + + file, err := os.Open(fn) + if err != nil { + t.FailNow() + } + t.ResetTimer() + var i int + for i = 0; i < t.N; i++ { + _, err := file.Read(buf) + if err == io.EOF { + fmt.Println("Test file too small") + t.SkipNow() + } else if err != nil { + fmt.Println(err) + t.FailNow() + } + } + file.Close() +} + +// createFiles - create "count" files of size "size" bytes each +func createFiles(t *testing.B, count int, size int) { + dir := fmt.Sprintf("%s/createFiles_%d_%d", test_helpers.DefaultPlainDir, count, size) + err := os.Mkdir(dir, 0777) + if err != nil { + t.Fatal(err) + } + buf := make([]byte, size) + t.SetBytes(int64(len(buf))) + t.ResetTimer() + var i int + for i = 0; i < count; i++ { + file := fmt.Sprintf("%s/%d", dir, i) + if size > 0 { + err = ioutil.WriteFile(file, buf, 0666) + } else { + var fh *os.File + fh, err = os.Create(file) + fh.Close() + } + if err != nil { + t.Fatal(err) + } + } + t.StopTimer() + os.RemoveAll(dir) +} + +func BenchmarkCreate0B(t *testing.B) { + createFiles(t, t.N, 0) +} + +func BenchmarkCreate1B(t *testing.B) { + createFiles(t, t.N, 1) +} + +func BenchmarkCreate100B(t *testing.B) { + createFiles(t, t.N, 100) +} + +func BenchmarkCreate4kB(t *testing.B) { + createFiles(t, t.N, 4*1024) +} + +func BenchmarkCreate10kB(t *testing.B) { + createFiles(t, t.N, 10*1024) +} diff --git a/tests/matrix/matrix_test.go b/tests/matrix/matrix_test.go index 7b636ad..1c94cb6 100644 --- a/tests/matrix/matrix_test.go +++ b/tests/matrix/matrix_test.go @@ -1,3 +1,4 @@ +// Tests run for (almost all) combinations of openssl, aessiv, plaintextnames. package matrix // File reading, writing, modification, truncate diff --git a/tests/normal/cli_test.go b/tests/normal/cli_test.go deleted file mode 100644 index 18c0bd9..0000000 --- a/tests/normal/cli_test.go +++ /dev/null @@ -1,194 +0,0 @@ -package normal - -// Test CLI operations like "-init", "-password" etc - -import ( - "io/ioutil" - "os" - "os/exec" - "testing" - - "github.com/rfjakob/gocryptfs/internal/configfile" - - "github.com/rfjakob/gocryptfs/tests/test_helpers" -) - -func TestMain(m *testing.M) { - test_helpers.ResetTmpDir(false) - test_helpers.MountOrExit(test_helpers.DefaultCipherDir, test_helpers.DefaultPlainDir, "--zerokey") - r := m.Run() - test_helpers.UnmountPanic(test_helpers.DefaultPlainDir) - os.Exit(r) -} - -// Test -init flag -func TestInit(t *testing.T) { - dir := test_helpers.InitFS(t) - _, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfDefaultName, "test") - if err != nil { - t.Fatal(err) - } - if c.IsFeatureFlagSet(configfile.FlagAESSIV) { - t.Error("AESSIV flag should not be set") - } -} - -// Test -init with -aessiv -func TestInitAessiv(t *testing.T) { - dir := test_helpers.InitFS(t, "-aessiv") - _, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfDefaultName, "test") - if err != nil { - t.Fatal(err) - } - if !c.IsFeatureFlagSet(configfile.FlagAESSIV) { - t.Error("AESSIV flag should be set but is not") - } -} - -// Test -init with -reverse -func TestInitReverse(t *testing.T) { - dir := test_helpers.InitFS(t, "-reverse") - _, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfReverseName, "test") - if err != nil { - t.Fatal(err) - } - if !c.IsFeatureFlagSet(configfile.FlagAESSIV) { - t.Error("AESSIV flag should be set but is not") - } -} - -func testPasswd(t *testing.T, dir string, extraArgs ...string) { - // Change password using "-extpass" - args := []string{"-q", "-passwd", "-extpass", "echo test"} - args = append(args, extraArgs...) - args = append(args, dir) - cmd := exec.Command(test_helpers.GocryptfsBinary, args...) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err := cmd.Run() - if err != nil { - t.Error(err) - } - // Change password using stdin - args = []string{"-q", "-passwd", "-extpass", "echo test"} - args = append(args, extraArgs...) - args = append(args, dir) - cmd = exec.Command(test_helpers.GocryptfsBinary, args...) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - p, err := cmd.StdinPipe() - if err != nil { - t.Fatal(err) - } - err = cmd.Start() - if err != nil { - t.Error(err) - } - // Old password - p.Write([]byte("test\n")) - // New password - p.Write([]byte("newpasswd\n")) - p.Close() - err = cmd.Wait() - if err != nil { - t.Error(err) - } -} - -// Test -passwd flag -func TestPasswd(t *testing.T) { - // Create FS - dir := test_helpers.InitFS(t) - testPasswd(t, dir) -} - -// Test -passwd with -reverse -func TestPasswdReverse(t *testing.T) { - // Create FS - dir := test_helpers.InitFS(t, "-reverse") - testPasswd(t, dir, "-reverse") -} - -// Test -init & -config flag -func TestInitConfig(t *testing.T) { - config := test_helpers.TmpDir + "/TestInitConfig.conf" - dir := test_helpers.InitFS(t, "-config="+config) - - _, err := os.Stat(config) - if err != nil { - t.Fatal(err) - } - - // Test -passwd & -config - cmd2 := exec.Command(test_helpers.GocryptfsBinary, "-q", "-passwd", "-extpass", "echo test", - "-config", config, dir) - cmd2.Stdout = os.Stdout - cmd2.Stderr = os.Stderr - err = cmd2.Run() - if err != nil { - t.Error(err) - } -} - -// Test -ro -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.UnmountPanic(mnt) - - file := mnt + "/file" - err := os.Mkdir(file, 0777) - if err == nil { - t.Errorf("Mkdir should have failed") - } - _, err = os.Create(file) - if err == nil { - t.Errorf("Create should have failed") - } -} - -// Test "-nonempty" -func TestNonempty(t *testing.T) { - dir := test_helpers.InitFS(t) - mnt := dir + ".mnt" - err := os.Mkdir(mnt, 0700) - if err != nil { - t.Fatal(err) - } - err = ioutil.WriteFile(mnt+"/somefile", []byte("xyz"), 0600) - if err != nil { - t.Fatal(err) - } - err = test_helpers.Mount(dir, mnt, false, "-extpass=echo test") - if err == nil { - t.Errorf("Mounting over a file should fail per default") - } - // Should work with "-nonempty" - test_helpers.MountOrFatal(t, dir, mnt, "-nonempty", "-extpass=echo test") - test_helpers.UnmountPanic(mnt) -} - -// Test "mountpoint shadows cipherdir" handling -func TestShadows(t *testing.T) { - mnt := test_helpers.InitFS(t) - cipher := mnt + ".cipher" - err := os.Rename(mnt, cipher) - if err != nil { - t.Fatal(err) - } - // This should work - // (note that MountOrFatal creates "mnt" again) - test_helpers.MountOrFatal(t, cipher, mnt, "-extpass=echo test") - test_helpers.UnmountPanic(mnt) - cipher2 := mnt + "/cipher" - err = os.Rename(cipher, cipher2) - if err != nil { - t.Fatal(err) - } - // This should fail - err = test_helpers.Mount(cipher2, mnt, false, "-extpass=echo test") - if err == nil { - t.Errorf("Should have failed") - } -} diff --git a/tests/normal/performance_test.go b/tests/normal/performance_test.go deleted file mode 100644 index 78ecf41..0000000 --- a/tests/normal/performance_test.go +++ /dev/null @@ -1,131 +0,0 @@ -package normal - -// Benchmarks - -import ( - "fmt" - "io" - "io/ioutil" - "os" - "testing" - - "github.com/rfjakob/gocryptfs/tests/test_helpers" -) - -func BenchmarkStreamWrite(t *testing.B) { - buf := make([]byte, 1024*1024) - t.SetBytes(int64(len(buf))) - - file, err := os.Create(test_helpers.DefaultPlainDir + "BenchmarkWrite") - if err != nil { - t.FailNow() - } - - t.ResetTimer() - var i int - for i = 0; i < t.N; i++ { - written, err := file.Write(buf) - if err != nil { - fmt.Printf("err=\"%s\", written=%d\n", err.Error(), written) - t.FailNow() - } - } - file.Close() -} - -func BenchmarkStreamRead(t *testing.B) { - buf := make([]byte, 1024*1024) - t.SetBytes(int64(len(buf))) - - fn := test_helpers.DefaultPlainDir + "BenchmarkWrite" - fi, err := os.Stat(fn) - if err != nil { - t.Fatal(err) - } - mb := int(fi.Size() / 1024 / 1024) - - if t.N > mb { - // Grow file so we can satisfy the test - //fmt.Printf("Growing file to %d MB... ", t.N) - var f2 *os.File - f2, err = os.OpenFile(fn, os.O_WRONLY|os.O_APPEND, 0666) - if err != nil { - fmt.Println(err) - t.FailNow() - } - for h := 0; h < t.N-mb; h++ { - _, err = f2.Write(buf) - if err != nil { - fmt.Println(err) - t.FailNow() - } - } - f2.Close() - } - - file, err := os.Open(fn) - if err != nil { - t.FailNow() - } - t.ResetTimer() - var i int - for i = 0; i < t.N; i++ { - _, err := file.Read(buf) - if err == io.EOF { - fmt.Println("Test file too small") - t.SkipNow() - } else if err != nil { - fmt.Println(err) - t.FailNow() - } - } - file.Close() -} - -// createFiles - create "count" files of size "size" bytes each -func createFiles(t *testing.B, count int, size int) { - dir := fmt.Sprintf("%s/createFiles_%d_%d", test_helpers.DefaultPlainDir, count, size) - err := os.Mkdir(dir, 0777) - if err != nil { - t.Fatal(err) - } - buf := make([]byte, size) - t.SetBytes(int64(len(buf))) - t.ResetTimer() - var i int - for i = 0; i < count; i++ { - file := fmt.Sprintf("%s/%d", dir, i) - if size > 0 { - err = ioutil.WriteFile(file, buf, 0666) - } else { - var fh *os.File - fh, err = os.Create(file) - fh.Close() - } - if err != nil { - t.Fatal(err) - } - } - t.StopTimer() - os.RemoveAll(dir) -} - -func BenchmarkCreate0B(t *testing.B) { - createFiles(t, t.N, 0) -} - -func BenchmarkCreate1B(t *testing.B) { - createFiles(t, t.N, 1) -} - -func BenchmarkCreate100B(t *testing.B) { - createFiles(t, t.N, 100) -} - -func BenchmarkCreate4kB(t *testing.B) { - createFiles(t, t.N, 4*1024) -} - -func BenchmarkCreate10kB(t *testing.B) { - createFiles(t, t.N, 10*1024) -} -- cgit v1.2.3