reverse: add longname benchmark
This commit is contained in:
parent
52a6f4f71e
commit
6c52c1a6e6
73
tests/reverse/longname_perf_test.go
Normal file
73
tests/reverse/longname_perf_test.go
Normal file
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@ -15,13 +15,18 @@ import (
|
||||
"github.com/rfjakob/gocryptfs/internal/nametransform"
|
||||
)
|
||||
|
||||
// TmpDir will be created inside this directory
|
||||
const testParentDir = "/tmp/gocryptfs-test-parent"
|
||||
const GocryptfsBinary = "../../gocryptfs"
|
||||
|
||||
// "go test" runs package tests in parallel! We must create a unique TmpDir on
|
||||
// startup or the tests will interfere horribly
|
||||
// "go test" runs package tests in parallel! We create a unique TmpDir in
|
||||
// init() so the tests do not interfere.
|
||||
var TmpDir string
|
||||
|
||||
// TmpDir + "/default-plain"
|
||||
var DefaultPlainDir string
|
||||
|
||||
// TmpDir + "/default-cipher"
|
||||
var DefaultCipherDir string
|
||||
|
||||
func init() {
|
||||
@ -77,7 +82,7 @@ func ResetTmpDir(plaintextNames bool) {
|
||||
}
|
||||
|
||||
// InitFS calls "gocryptfs -init" on a new directory in TmpDir, passing
|
||||
// "extraArgs" in addition to practical defaults.
|
||||
// "extraArgs" in addition to useful defaults.
|
||||
//
|
||||
// The returned cipherdir has NO trailing slash.
|
||||
func InitFS(t *testing.T, extraArgs ...string) string {
|
||||
@ -128,7 +133,7 @@ func Mount(c string, p string, showOutput bool, extraArgs ...string) error {
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
// MountOrExit calls mount() and exits on failure.
|
||||
// MountOrExit calls Mount() and exits on failure.
|
||||
func MountOrExit(c string, p string, extraArgs ...string) {
|
||||
err := Mount(c, p, true, extraArgs...)
|
||||
if err != nil {
|
||||
@ -137,7 +142,7 @@ func MountOrExit(c string, p string, extraArgs ...string) {
|
||||
}
|
||||
}
|
||||
|
||||
// MountOrFatal calls mount() and calls t.Fatal() on failure.
|
||||
// MountOrFatal calls Mount() and calls t.Fatal() on failure.
|
||||
func MountOrFatal(t *testing.T, c string, p string, extraArgs ...string) {
|
||||
err := Mount(c, p, true, extraArgs...)
|
||||
if err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user