tests: move integration tests to separate directory
Also, use new "-defaultonly" flag for benchmarks (only tests with openssl=true plaintextnames=false)
This commit is contained in:
parent
ad41cdae11
commit
3664320fe5
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -eux
|
set -eu
|
||||||
|
|
||||||
go build
|
source build.bash
|
||||||
go test -bench=.
|
|
||||||
|
go test ./integration_tests -bench=. -defaultonly
|
||||||
|
94
integration_tests/helpers.go
Normal file
94
integration_tests/helpers.go
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
package integration_tests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"crypto/md5"
|
||||||
|
"encoding/hex"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
const tmpDir = "/tmp/gocryptfs_main_test/"
|
||||||
|
// Mountpoint
|
||||||
|
const plainDir = tmpDir + "plain/"
|
||||||
|
const cipherDir = tmpDir + "cipher/"
|
||||||
|
|
||||||
|
func resetTmpDir() {
|
||||||
|
fu := exec.Command("fusermount", "-z", "-u", plainDir)
|
||||||
|
fu.Run()
|
||||||
|
|
||||||
|
os.RemoveAll(tmpDir)
|
||||||
|
|
||||||
|
err := os.MkdirAll(plainDir, 0777)
|
||||||
|
if err != nil {
|
||||||
|
panic("Could not create plainDir")
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.MkdirAll(cipherDir, 0777)
|
||||||
|
if err != nil {
|
||||||
|
panic("Could not create cipherDir")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func mount(extraArgs ...string) {
|
||||||
|
var args []string
|
||||||
|
args = append(args, extraArgs...)
|
||||||
|
//args = append(args, "--fusedebug")
|
||||||
|
args = append(args, cipherDir)
|
||||||
|
args = append(args, plainDir)
|
||||||
|
c := exec.Command("../gocryptfs", args...)
|
||||||
|
// Warning messages clutter the test output. Uncomment if you want to debug
|
||||||
|
// failures.
|
||||||
|
//c.Stdout = os.Stdout
|
||||||
|
//c.Stderr = os.Stderr
|
||||||
|
err := c.Run()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmount() error {
|
||||||
|
fu := exec.Command("fusermount", "-z", "-u", plainDir)
|
||||||
|
fu.Stdout = os.Stdout
|
||||||
|
fu.Stderr = os.Stderr
|
||||||
|
return fu.Run()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return md5 string for file "filename"
|
||||||
|
func md5fn(filename string) string {
|
||||||
|
buf, err := ioutil.ReadFile(filename)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("ReadFile: %v\n", err)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return md5hex(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return md5 string for "buf"
|
||||||
|
func md5hex(buf []byte) string {
|
||||||
|
rawHash := md5.Sum(buf)
|
||||||
|
hash := hex.EncodeToString(rawHash[:])
|
||||||
|
return hash
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that the file size equals "want". This checks:
|
||||||
|
// 1) Size reported by Stat()
|
||||||
|
// 2) Number of bytes returned when reading the whole file
|
||||||
|
func verifySize(t *testing.T, path string, want int) {
|
||||||
|
buf, err := ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("ReadFile failed: %v", err)
|
||||||
|
} else if len(buf) != want {
|
||||||
|
t.Errorf("wrong read size: got=%d want=%d", len(buf), want)
|
||||||
|
}
|
||||||
|
|
||||||
|
fi, err := os.Stat(path)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Stat failed: %v", err)
|
||||||
|
} else if fi.Size() != int64(want) {
|
||||||
|
t.Errorf("wrong stat file size, got=%d want=%d", fi.Size(), want)
|
||||||
|
}
|
||||||
|
}
|
@ -1,120 +1,44 @@
|
|||||||
package main
|
package integration_tests
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
const tmpDir = "/tmp/gocryptfs_main_test/"
|
|
||||||
// Mountpoint
|
|
||||||
const plainDir = tmpDir + "plain/"
|
|
||||||
const cipherDir = tmpDir + "cipher/"
|
|
||||||
|
|
||||||
func resetTmpDir() {
|
|
||||||
fu := exec.Command("fusermount", "-z", "-u", plainDir)
|
|
||||||
fu.Run()
|
|
||||||
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
|
|
||||||
err := os.MkdirAll(plainDir, 0777)
|
|
||||||
if err != nil {
|
|
||||||
panic("Could not create plainDir")
|
|
||||||
}
|
|
||||||
|
|
||||||
err = os.MkdirAll(cipherDir, 0777)
|
|
||||||
if err != nil {
|
|
||||||
panic("Could not create cipherDir")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func mount(extraArgs ...string) {
|
|
||||||
var args []string
|
|
||||||
args = append(args, extraArgs...)
|
|
||||||
//args = append(args, "--fusedebug")
|
|
||||||
args = append(args, cipherDir)
|
|
||||||
args = append(args, plainDir)
|
|
||||||
c := exec.Command("./gocryptfs", args...)
|
|
||||||
// Warning messages clutter the test output. Uncomment if you want to debug
|
|
||||||
// failures.
|
|
||||||
//c.Stdout = os.Stdout
|
|
||||||
//c.Stderr = os.Stderr
|
|
||||||
err := c.Run()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func unmount() error {
|
|
||||||
fu := exec.Command("fusermount", "-z", "-u", plainDir)
|
|
||||||
fu.Stdout = os.Stdout
|
|
||||||
fu.Stderr = os.Stderr
|
|
||||||
return fu.Run()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return md5 string for file "filename"
|
|
||||||
func md5fn(filename string) string {
|
|
||||||
buf, err := ioutil.ReadFile(filename)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("ReadFile: %v\n", err)
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return md5hex(buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return md5 string for "buf"
|
|
||||||
func md5hex(buf []byte) string {
|
|
||||||
rawHash := md5.Sum(buf)
|
|
||||||
hash := hex.EncodeToString(rawHash[:])
|
|
||||||
return hash
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify that the file size equals "want". This checks:
|
|
||||||
// 1) Size reported by Stat()
|
|
||||||
// 2) Number of bytes returned when reading the whole file
|
|
||||||
func verifySize(t *testing.T, path string, want int) {
|
|
||||||
buf, err := ioutil.ReadFile(path)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("ReadFile failed: %v", err)
|
|
||||||
} else if len(buf) != want {
|
|
||||||
t.Errorf("wrong read size: got=%d want=%d", len(buf), want)
|
|
||||||
}
|
|
||||||
|
|
||||||
fi, err := os.Stat(path)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("Stat failed: %v", err)
|
|
||||||
} else if fi.Size() != int64(want) {
|
|
||||||
t.Errorf("wrong stat file size, got=%d want=%d", fi.Size(), want)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var plaintextNames bool
|
var plaintextNames bool
|
||||||
|
|
||||||
// This is the entry point for the tests
|
// This is the entry point for the tests
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
if testing.Verbose() {
|
var defaultonly bool
|
||||||
// First printf does not show up. Verbose() always return false before "m.Run()"?
|
flag.BoolVar(&defaultonly, "defaultonly", false, "Only test default configuration (openssl=true, plaintextnames=false)")
|
||||||
fmt.Printf("***** Testing with native Go crypto\n")
|
flag.Parse()
|
||||||
}
|
|
||||||
resetTmpDir()
|
|
||||||
mount("--zerokey", "--openssl=false")
|
|
||||||
r := m.Run()
|
|
||||||
unmount()
|
|
||||||
|
|
||||||
if testing.Verbose() {
|
if testing.Verbose() {
|
||||||
fmt.Printf("***** Testing with OpenSSL\n")
|
fmt.Printf("***** Testing with OpenSSL\n")
|
||||||
}
|
}
|
||||||
resetTmpDir()
|
resetTmpDir()
|
||||||
mount("--zerokey")
|
mount("--zerokey")
|
||||||
|
r := m.Run()
|
||||||
|
unmount()
|
||||||
|
|
||||||
|
if defaultonly {
|
||||||
|
os.Exit(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if testing.Verbose() {
|
||||||
|
fmt.Printf("***** Testing with native Go crypto\n")
|
||||||
|
}
|
||||||
|
resetTmpDir()
|
||||||
|
mount("--zerokey", "--openssl=false")
|
||||||
r = m.Run()
|
r = m.Run()
|
||||||
unmount()
|
unmount()
|
||||||
|
|
||||||
@ -382,70 +306,3 @@ func TestFilenameEncryption(t *testing.T) {
|
|||||||
t.Errorf("file name encryption not working")
|
t.Errorf("file name encryption not working")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkStreamWrite(t *testing.B) {
|
|
||||||
buf := make([]byte, 1024*1024)
|
|
||||||
t.SetBytes(int64(len(buf)))
|
|
||||||
|
|
||||||
file, err := os.Create(plainDir + "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 := plainDir + "BenchmarkWrite"
|
|
||||||
fi, _ := os.Stat(fn)
|
|
||||||
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)
|
|
||||||
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()
|
|
||||||
//fmt.Printf("done\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
file, err := os.Open(plainDir + "BenchmarkWrite")
|
|
||||||
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.Printf("Test file too small\n")
|
|
||||||
t.SkipNow()
|
|
||||||
} else if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
t.FailNow()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file.Close()
|
|
||||||
}
|
|
88
integration_tests/performance_test.go
Normal file
88
integration_tests/performance_test.go
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package integration_tests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func BenchmarkStreamWrite(t *testing.B) {
|
||||||
|
buf := make([]byte, 1024*1024)
|
||||||
|
t.SetBytes(int64(len(buf)))
|
||||||
|
|
||||||
|
file, err := os.Create(plainDir + "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 := plainDir + "BenchmarkWrite"
|
||||||
|
fi, _ := os.Stat(fn)
|
||||||
|
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)
|
||||||
|
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()
|
||||||
|
//fmt.Printf("done\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
file, err := os.Open(plainDir + "BenchmarkWrite")
|
||||||
|
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.Printf("Test file too small\n")
|
||||||
|
t.SkipNow()
|
||||||
|
} else if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkUntar(t *testing.B) {
|
||||||
|
t.SetBytes(422229778)
|
||||||
|
c := exec.Command("tar", "xf", "/tmp/linux-3.0.tar.gz", "-C", plainDir)
|
||||||
|
c.Stdout = os.Stdout
|
||||||
|
c.Stderr = os.Stderr
|
||||||
|
t.ResetTimer()
|
||||||
|
err := c.Run()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user