diff options
| author | Jakob Unterwurzacher | 2016-10-16 13:39:25 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2016-10-16 15:04:53 +0200 | 
| commit | 57e8df990c7c251b3cc73c2df6af6bf73367d234 (patch) | |
| tree | cf58086c0707a66ee11b15b880bf14e6060bae88 /tests/cli | |
| parent | dc78e634aa76878026727a141c0e474d8466999a (diff) | |
tests: split "normal" tests into "cli" and "defaults"
Also fixes the failure to run the benchmarks do to the missing
gocryptfs.diriv.
Diffstat (limited to 'tests/cli')
| -rw-r--r-- | tests/cli/cli_test.go | 192 | 
1 files changed, 192 insertions, 0 deletions
diff --git a/tests/cli/cli_test.go b/tests/cli/cli_test.go new file mode 100644 index 0000000..bc500db --- /dev/null +++ b/tests/cli/cli_test.go @@ -0,0 +1,192 @@ +package cli + +// Test CLI operations like "-init", "-password" etc + +import ( +	"io/ioutil" +	"os" +	"os/exec" +	"testing" + +	"github.com/rfjakob/gocryptfs/internal/configfile" + +	"github.com/rfjakob/gocryptfs/tests/test_helpers" +) + +func TestMain(m *testing.M) { +	test_helpers.ResetTmpDir(false) +	r := m.Run() +	os.Exit(r) +} + +// Test -init flag +func TestInit(t *testing.T) { +	dir := test_helpers.InitFS(t) +	_, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfDefaultName, "test") +	if err != nil { +		t.Fatal(err) +	} +	if c.IsFeatureFlagSet(configfile.FlagAESSIV) { +		t.Error("AESSIV flag should not be set") +	} +} + +// Test -init with -aessiv +func TestInitAessiv(t *testing.T) { +	dir := test_helpers.InitFS(t, "-aessiv") +	_, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfDefaultName, "test") +	if err != nil { +		t.Fatal(err) +	} +	if !c.IsFeatureFlagSet(configfile.FlagAESSIV) { +		t.Error("AESSIV flag should be set but is not") +	} +} + +// Test -init with -reverse +func TestInitReverse(t *testing.T) { +	dir := test_helpers.InitFS(t, "-reverse") +	_, c, err := configfile.LoadConfFile(dir+"/"+configfile.ConfReverseName, "test") +	if err != nil { +		t.Fatal(err) +	} +	if !c.IsFeatureFlagSet(configfile.FlagAESSIV) { +		t.Error("AESSIV flag should be set but is not") +	} +} + +func testPasswd(t *testing.T, dir string, extraArgs ...string) { +	// Change password using "-extpass" +	args := []string{"-q", "-passwd", "-extpass", "echo test"} +	args = append(args, extraArgs...) +	args = append(args, dir) +	cmd := exec.Command(test_helpers.GocryptfsBinary, args...) +	cmd.Stdout = os.Stdout +	cmd.Stderr = os.Stderr +	err := cmd.Run() +	if err != nil { +		t.Error(err) +	} +	// Change password using stdin +	args = []string{"-q", "-passwd", "-extpass", "echo test"} +	args = append(args, extraArgs...) +	args = append(args, dir) +	cmd = exec.Command(test_helpers.GocryptfsBinary, args...) +	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 -passwd flag +func TestPasswd(t *testing.T) { +	// Create FS +	dir := test_helpers.InitFS(t) +	testPasswd(t, dir) +} + +// Test -passwd with -reverse +func TestPasswdReverse(t *testing.T) { +	// Create FS +	dir := test_helpers.InitFS(t, "-reverse") +	testPasswd(t, dir, "-reverse") +} + +// 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.UnmountPanic(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") +	} +} + +// Test "-nonempty" +func TestNonempty(t *testing.T) { +	dir := test_helpers.InitFS(t) +	mnt := dir + ".mnt" +	err := os.Mkdir(mnt, 0700) +	if err != nil { +		t.Fatal(err) +	} +	err = ioutil.WriteFile(mnt+"/somefile", []byte("xyz"), 0600) +	if err != nil { +		t.Fatal(err) +	} +	err = test_helpers.Mount(dir, mnt, false, "-extpass=echo test") +	if err == nil { +		t.Errorf("Mounting over a file should fail per default") +	} +	// Should work with "-nonempty" +	test_helpers.MountOrFatal(t, dir, mnt, "-nonempty", "-extpass=echo test") +	test_helpers.UnmountPanic(mnt) +} + +// Test "mountpoint shadows cipherdir" handling +func TestShadows(t *testing.T) { +	mnt := test_helpers.InitFS(t) +	cipher := mnt + ".cipher" +	err := os.Rename(mnt, cipher) +	if err != nil { +		t.Fatal(err) +	} +	// This should work +	// (note that MountOrFatal creates "mnt" again) +	test_helpers.MountOrFatal(t, cipher, mnt, "-extpass=echo test") +	test_helpers.UnmountPanic(mnt) +	cipher2 := mnt + "/cipher" +	err = os.Rename(cipher, cipher2) +	if err != nil { +		t.Fatal(err) +	} +	// This should fail +	err = test_helpers.Mount(cipher2, mnt, false, "-extpass=echo test") +	if err == nil { +		t.Errorf("Should have failed") +	} +}  | 
