summaryrefslogtreecommitdiff
path: root/tests/normal/performance_test.go
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/performance_test.go
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/performance_test.go')
-rw-r--r--tests/normal/performance_test.go131
1 files changed, 131 insertions, 0 deletions
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)
+}