diff options
Diffstat (limited to 'tests/cli/cli_test.go')
-rw-r--r-- | tests/cli/cli_test.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/cli/cli_test.go b/tests/cli/cli_test.go index b39c816..cce7fa0 100644 --- a/tests/cli/cli_test.go +++ b/tests/cli/cli_test.go @@ -272,3 +272,47 @@ func TestShadows(t *testing.T) { t.Errorf("Should have failed") } } + +// TestInitTrailingGarbage verfies that gocryptfs exits with an error if we +// pass additional data after the password. +func TestInitTrailingGarbage(t *testing.T) { + table := []struct { + pw string + closeStdin bool + expectSuccess bool + }{ + {"foo\n", false, true}, + {"foo", true, true}, + {"foo\n", true, true}, + {"foo\n\n", false, false}, + {"foo\nbar", false, false}, + {"foo\n\n", true, false}, + {"foo\nbar", true, false}, + } + for _, row := range table { + dir, err := ioutil.TempDir(test_helpers.TmpDir, "") + if err != nil { + t.Fatal(err) + } + cmd := exec.Command(test_helpers.GocryptfsBinary, "-q", "-init", "-scryptn=10", dir) + childStdin, err := cmd.StdinPipe() + if err != nil { + t.Fatal(err) + } + err = cmd.Start() + if err != nil { + t.Fatal(err) + } + childStdin.Write([]byte(row.pw)) + if row.closeStdin { + childStdin.Close() + } + err = cmd.Wait() + success := (err == nil) + if success == true && row.expectSuccess == false { + t.Errorf("pw=%q should have failed, but succeeded", row.pw) + } else if success == false && row.expectSuccess == true { + t.Errorf("pw=%q should have succeeded, but failed", row.pw) + } + } +} |