summaryrefslogtreecommitdiff
path: root/tests/normal
diff options
context:
space:
mode:
authorJakob Unterwurzacher2016-06-30 00:57:14 +0200
committerJakob Unterwurzacher2016-06-30 00:57:14 +0200
commit02b6d3067d502bcc063965a5a9d75aa693125e1b (patch)
tree6b6df8eeac9017bc985de20fa3f8cf22466bad66 /tests/normal
parentffc000943b33724b1df0db69af35123abb1331a8 (diff)
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
Diffstat (limited to 'tests/normal')
-rw-r--r--tests/normal/cli_test.go105
-rw-r--r--tests/normal/performance_test.go131
2 files changed, 236 insertions, 0 deletions
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)
+}