From 1db3808654187b57c8fbb52ab9ef46b7ddf90951 Mon Sep 17 00:00:00 2001
From: Jakob Unterwurzacher
Date: Fri, 23 Aug 2024 22:27:51 +0200
Subject: tests: reverse: add TestForceOwner

https://github.com/rfjakob/gocryptfs/issues/809
---
 tests/reverse/force_owner_test.go | 50 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
 create mode 100644 tests/reverse/force_owner_test.go

diff --git a/tests/reverse/force_owner_test.go b/tests/reverse/force_owner_test.go
new file mode 100644
index 0000000..6e47b50
--- /dev/null
+++ b/tests/reverse/force_owner_test.go
@@ -0,0 +1,50 @@
+package reverse_test
+
+import (
+	"io/ioutil"
+	"net/url"
+	"os"
+	"syscall"
+	"testing"
+
+	"github.com/rfjakob/gocryptfs/v2/tests/test_helpers"
+)
+
+func TestForceOwner(t *testing.T) {
+	// Let's not explode with "TempDir: pattern contains path separator"
+	myEscapedName := url.PathEscape(t.Name())
+	mnt, err := ioutil.TempDir(test_helpers.TmpDir, myEscapedName)
+	if err != nil {
+		t.Fatal(err)
+	}
+	cliArgs := []string{"-reverse", "-zerokey", "-force_owner=1234:1234"}
+	if plaintextnames {
+		cliArgs = append(cliArgs, "-plaintextnames")
+	} else if deterministic_names {
+		cliArgs = append(cliArgs, "-deterministic-names")
+	}
+	test_helpers.MountOrFatal(t, "/", mnt, cliArgs...)
+	defer test_helpers.UnmountErr(mnt)
+
+	entries, err := os.ReadDir(mnt)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	// Check the mountpoint and everything inside it
+	toCheck := []string{mnt}
+	for _, e := range entries {
+		toCheck = append(toCheck, mnt+"/"+e.Name())
+	}
+
+	var st syscall.Stat_t
+	for _, path := range toCheck {
+		if err := syscall.Lstat(path, &st); err != nil {
+			t.Fatal(err)
+		}
+		if st.Uid != 1234 || st.Gid != 1234 {
+			t.Errorf("file %q: uid or gid != 1234: %#v", path, st)
+		}
+	}
+
+}
-- 
cgit v1.2.3