aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJakob Unterwurzacher2021-08-18 11:33:12 +0200
committerJakob Unterwurzacher2021-08-18 11:38:56 +0200
commit0bc97845087b1e426d8cb2cb9c36779c4f9b2671 (patch)
treec771313a40dca57fed437cba9ca01a21ede79d0a /tests
parent3df1c624301bca215a300c2b9b9135c3966950f9 (diff)
reverse: fix "exclude all but" case
With test. Fixes https://github.com/rfjakob/gocryptfs/issues/588
Diffstat (limited to 'tests')
-rw-r--r--tests/reverse/exclude_test.go135
-rw-r--r--tests/reverse/exclude_test_fs/file30
2 files changed, 82 insertions, 53 deletions
diff --git a/tests/reverse/exclude_test.go b/tests/reverse/exclude_test.go
index 88530ab..b0e7135 100644
--- a/tests/reverse/exclude_test.go
+++ b/tests/reverse/exclude_test.go
@@ -20,56 +20,9 @@ func ctlsockEncryptPath(t *testing.T, sock string, path string) string {
}
// doTestExcludeTestFs runs exclude tests against the exclude_test_fs folder
-func doTestExcludeTestFs(t *testing.T, flag string) {
- // --exclude-wildcard patterns, gitignore syntax
- patterns := []string{
- "file1", // matches file1 anywhere
- "!longdir1" + x240 + "/file1", // ! includes an otherwise file
- "file2/", // a trailing slash matches only a directory
- "dir1/file2", // matches file2 inside dir1 anywhere
- "#file2", // comments are ignored
- "dir2", // excludes the whole directory
- "longfile2" + x240, // matches longfile2 anywhere
- "/longfile3" + x240, // a leading / anchors the match at the root
- "*~", // wildcards are supported
- "dir1/**/exclude", // ** matches any number of directories
- "file3/", // pattern with trailing slash should not match a file
- }
- // pVisible are plaintext paths that should be visible in the encrypted view
- pVisible := []string{
- "file2",
- "dir1/longfile1" + x240,
- "dir1/longfile3" + x240,
- "longdir1" + x240,
- "longdir1" + x240 + "/file1",
- "longdir2" + x240 + "/file",
- "longfile1" + x240,
- "file3",
- }
- // pHidden are plaintext paths that should be hidden in the encrypted view
- pHidden := []string{
- "bkp1~",
- "dir1/file1",
- "dir1/file2",
- "dir1/exclude",
- "dir1/longbkp1" + x240 + "~",
- "dir1/longfile2" + x240,
- "dir1/subdir1/exclude",
- "dir1/subdir1/subdir2/exclude",
- "dir2",
- "dir2/file",
- "dir2/longdir1" + x240 + "/file",
- "dir2/longfile." + x240,
- "dir2/subdir",
- "dir2/subdir/file",
- "file1",
- "longdir2" + x240 + "/bkp~",
- "longfile2" + x240,
- "longfile3" + x240,
- }
-
+func doTestExcludeTestFs(t *testing.T, flag string, patterns, visible, hidden []string) {
// Mount reverse fs
- mnt, err := ioutil.TempDir(test_helpers.TmpDir, "TestExclude")
+ mnt, err := ioutil.TempDir(test_helpers.TmpDir, t.Name())
if err != nil {
t.Fatal(err)
}
@@ -85,8 +38,8 @@ func doTestExcludeTestFs(t *testing.T, flag string) {
defer test_helpers.UnmountPanic(mnt)
// Get encrypted version of visible and hidden paths
- cVisible := encryptExcludeTestPaths(t, sock, pVisible)
- cHidden := encryptExcludeTestPaths(t, sock, pHidden)
+ cVisible := encryptExcludeTestPaths(t, sock, visible)
+ cHidden := encryptExcludeTestPaths(t, sock, hidden)
// Check that hidden paths are not there and visible paths are there
for _, v := range cHidden {
@@ -123,6 +76,82 @@ func encryptExcludeTestPaths(t *testing.T, socket string, pRelPaths []string) (o
// TestExcludeTestFs runs exclude tests against the exclude_test_fs folder.
func TestExcludeTestFs(t *testing.T) {
- doTestExcludeTestFs(t, "-exclude-wildcard")
- doTestExcludeTestFs(t, "-ew")
+ // --exclude-wildcard patterns, gitignore syntax
+ patterns := []string{
+ "file1", // matches file1 anywhere
+ "!longdir1" + x240 + "/file1", // ! includes an otherwise file
+ "file2/", // a trailing slash matches only a directory
+ "dir1/file2", // matches file2 inside dir1 anywhere
+ "#file2", // comments are ignored
+ "dir2", // excludes the whole directory
+ "longfile2" + x240, // matches longfile2 anywhere
+ "/longfile3" + x240, // a leading / anchors the match at the root
+ "*~", // wildcards are supported
+ "dir1/**/exclude", // ** matches any number of directories
+ "file3/", // pattern with trailing slash should not match a file
+ }
+ // visible are plaintext paths that should be visible in the encrypted view
+ visible := []string{
+ "file2",
+ "dir1/longfile1" + x240,
+ "dir1/longfile3" + x240,
+ "longdir1" + x240,
+ "longdir1" + x240 + "/file1",
+ "longdir2" + x240 + "/file",
+ "longfile1" + x240,
+ "file3",
+ }
+ // hidden are plaintext paths that should be hidden in the encrypted view
+ hidden := []string{
+ "bkp1~",
+ "dir1/file1",
+ "dir1/file2",
+ "dir1/exclude",
+ "dir1/longbkp1" + x240 + "~",
+ "dir1/longfile2" + x240,
+ "dir1/subdir1/exclude",
+ "dir1/subdir1/subdir2/exclude",
+ "dir2",
+ "dir2/file",
+ "dir2/longdir1" + x240 + "/file",
+ "dir2/longfile." + x240,
+ "dir2/subdir",
+ "dir2/subdir/file",
+ "file1",
+ "longdir2" + x240 + "/bkp~",
+ "longfile2" + x240,
+ "longfile3" + x240,
+ }
+
+ doTestExcludeTestFs(t, "-exclude-wildcard", patterns, visible, hidden)
+ doTestExcludeTestFs(t, "-ew", patterns, visible, hidden)
+}
+
+// Exclude everything using "/*", then selectively include only dir1 using "!/dir1"
+// https://github.com/rfjakob/gocryptfs/issues/588
+func TestExcludeAllOnlyDir1(t *testing.T) {
+ // --exclude-wildcard patterns, gitignore syntax
+ patterns := []string{
+ "*",
+ "!/dir1",
+ }
+ // visible are plaintext paths that should be visible in the encrypted view
+ visible := []string{
+ "dir1",
+ "dir1/file1",
+ }
+ // hidden are plaintext paths that should be hidden in the encrypted view
+ hidden := []string{
+ "dir2",
+ "dir2/file",
+ "dir2/longdir1" + x240 + "/file",
+ "dir2/longfile." + x240,
+ "dir2/subdir",
+ "dir2/subdir/file",
+ "file1",
+ "longdir2" + x240 + "/bkp~",
+ "longfile2" + x240,
+ "longfile3" + x240,
+ }
+ doTestExcludeTestFs(t, "-exclude-wildcard", patterns, visible, hidden)
}
diff --git a/tests/reverse/exclude_test_fs/file3 b/tests/reverse/exclude_test_fs/file3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/reverse/exclude_test_fs/file3