diff options
author | Jakob Unterwurzacher | 2016-09-24 22:45:25 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2016-09-25 16:43:17 +0200 |
commit | 6c52c1a6e6176ba7b6922ee27df7ddd09991b57e (patch) | |
tree | ab97471d503d1e84f4ccacb99af9eed6a0f504b0 /tests/reverse/longname_perf_test.go | |
parent | 52a6f4f71ed464eb64dc05e0768d4af58bd2c195 (diff) |
reverse: add longname benchmark
Diffstat (limited to 'tests/reverse/longname_perf_test.go')
-rw-r--r-- | tests/reverse/longname_perf_test.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/reverse/longname_perf_test.go b/tests/reverse/longname_perf_test.go new file mode 100644 index 0000000..43acd25 --- /dev/null +++ b/tests/reverse/longname_perf_test.go @@ -0,0 +1,73 @@ +package reverse_test + +import ( + "bytes" + "fmt" + "os" + "testing" + + "github.com/rfjakob/gocryptfs/tests/test_helpers" +) + +var dirA, dirB, x240 string + +func TestMain(m *testing.M) { + x240 = string(bytes.Repeat([]byte("x"), 240)) + dirA = test_helpers.TmpDir + "/a" + dirB = test_helpers.TmpDir + "/b" + os.Mkdir(dirA, 0700) + os.Mkdir(dirB, 0700) + generateFiles(dirA) + test_helpers.MountOrExit(dirA, dirB, "-zerokey", "-reverse") + r := m.Run() + test_helpers.UnmountPanic(dirB) + os.RemoveAll(test_helpers.TmpDir) + os.Exit(r) +} + +func genName(i int) string { + return fmt.Sprintf("%04d.%s", i, x240) +} + +// Create 10000 files with long names +func generateFiles(dir string) { + for i := 0; i < 100000; i++ { + n := genName(i) + f, err := os.Create(dir + "/" + n) + if err != nil { + panic(err) + } + f.Close() + } +} + +func TestLongnameStat(t *testing.T) { + _, err := os.Stat(dirA + "/" + genName(0)) + if err != nil { + t.Error(err) + } + _, err = os.Stat(dirA + "/" + genName(9999)) + if err != nil { + t.Error(err) + } +} + +func BenchmarkLongnameStat(b *testing.B) { + dirFd, err := os.Open(dirB) + if err != nil { + b.Fatal(err) + } + encryptedNames, err := dirFd.Readdirnames(-1) + if err != nil { + b.Fatal(err) + } + l := len(encryptedNames) + dirFd.Close() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := os.Stat(dirB + "/" + encryptedNames[i%l]) + if err != nil { + b.Fatal(err) + } + } +} |