From 02b6d3067d502bcc063965a5a9d75aa693125e1b Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Thu, 30 Jun 2016 00:57:14 +0200 Subject: test: split up integration_tests ...into "matrix" and "normal". Also: * Make running multiple packages in parallel safe, see http://stackoverflow.com/questions/23715302/go-how-to-run-tests-for-multiple-packages * Don't depent on test_helper.TmpDir and friends to have a terminating slash --- tests/normal/cli_test.go | 105 +++++++++++++++++++++++++++++++ tests/normal/performance_test.go | 131 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 236 insertions(+) create mode 100644 tests/normal/cli_test.go create mode 100644 tests/normal/performance_test.go (limited to 'tests/normal') diff --git a/tests/normal/cli_test.go b/tests/normal/cli_test.go new file mode 100644 index 0000000..4c634f2 --- /dev/null +++ b/tests/normal/cli_test.go @@ -0,0 +1,105 @@ +package normal + +// Test CLI operations like "-init", "-password" etc + +import ( + "os" + "os/exec" + "path/filepath" + "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.Unmount(test_helpers.DefaultPlainDir) + os.Exit(r) +} + +// Test -init flag +func TestInit(t *testing.T) { + dir := test_helpers.InitFS(t) + _, err := os.Stat(filepath.Join(dir, configfile.ConfDefaultName)) + if err != nil { + t.Fatal(err) + } +} + +// Test -passwd flag +func TestPasswd(t *testing.T) { + // Create FS + dir := test_helpers.InitFS(t) + // Change password using "-extpass" + cmd := exec.Command(test_helpers.GocryptfsBinary, "-q", "-passwd", "-extpass", "echo test", dir) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err := cmd.Run() + if err != nil { + t.Error(err) + } + // Change password using stdin + cmd = exec.Command(test_helpers.GocryptfsBinary, "-q", "-passwd", dir) + 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 -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.Unmount(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") + } +} diff --git a/tests/normal/performance_test.go b/tests/normal/performance_test.go new file mode 100644 index 0000000..78ecf41 --- /dev/null +++ b/tests/normal/performance_test.go @@ -0,0 +1,131 @@ +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