diff options
Diffstat (limited to 'tests/normal')
| -rw-r--r-- | tests/normal/cli_test.go | 105 | ||||
| -rw-r--r-- | tests/normal/performance_test.go | 131 | 
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) +} | 
