aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/cluster/cluster_test.go36
-rw-r--r--tests/cluster/poc_test.go47
2 files changed, 47 insertions, 36 deletions
diff --git a/tests/cluster/cluster_test.go b/tests/cluster/cluster_test.go
index 23e7c50..9edb2f9 100644
--- a/tests/cluster/cluster_test.go
+++ b/tests/cluster/cluster_test.go
@@ -14,8 +14,6 @@ import (
"syscall"
"testing"
- "golang.org/x/sys/unix"
-
"github.com/rfjakob/gocryptfs/v2/internal/contentenc"
"github.com/rfjakob/gocryptfs/v2/tests/test_helpers"
)
@@ -185,37 +183,3 @@ func TestConcurrentCreate(t *testing.T) {
go workerThread(mnt2 + "/foo")
wg.Wait()
}
-
-// Check that byte-range locks work on an empty file
-func TestFcntlFlock(t *testing.T) {
- path := test_helpers.TmpDir + "/" + t.Name()
-
- fd1, err := syscall.Open(path, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_EXCL, 0600)
- if err != nil {
- t.Fatal(err)
- }
- defer syscall.Close(fd1)
-
- // F_OFD_SETLK locks on the same fd always succeed, so we have to
- // open a 2nd time.
- fd2, err := syscall.Open(path, syscall.O_RDWR, 0)
- if err != nil {
- t.Fatal(err)
- }
- defer syscall.Close(fd2)
-
- lk := unix.Flock_t{
- Type: unix.F_WRLCK,
- Whence: unix.SEEK_SET,
- Start: 0,
- Len: 0,
- }
- err = unix.FcntlFlock(uintptr(fd1), unix.F_OFD_SETLK, &lk)
- if err != nil {
- t.Fatal(err)
- }
- err = unix.FcntlFlock(uintptr(fd2), unix.F_OFD_SETLK, &lk)
- if err == nil {
- t.Fatal("double-lock succeeded but should have failed")
- }
-}
diff --git a/tests/cluster/poc_test.go b/tests/cluster/poc_test.go
new file mode 100644
index 0000000..4d7182a
--- /dev/null
+++ b/tests/cluster/poc_test.go
@@ -0,0 +1,47 @@
+package cluster
+
+// poc_test.go contains proof of concept tests for the byte-range locking logic.
+// This goes directly to an underlying filesystem without going through gocryptfs.
+
+import (
+ "syscall"
+ "testing"
+
+ "golang.org/x/sys/unix"
+
+ "github.com/rfjakob/gocryptfs/v2/tests/test_helpers"
+)
+
+// Check that byte-range locks work on an empty file
+func TestPoCFcntlFlock(t *testing.T) {
+ path := test_helpers.TmpDir + "/" + t.Name()
+
+ fd1, err := syscall.Open(path, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_EXCL, 0600)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer syscall.Close(fd1)
+
+ // F_OFD_SETLK locks on the same fd always succeed, so we have to
+ // open a 2nd time.
+ fd2, err := syscall.Open(path, syscall.O_RDWR, 0)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer syscall.Close(fd2)
+
+ lk := unix.Flock_t{
+ Type: unix.F_WRLCK,
+ Whence: unix.SEEK_SET,
+ Start: 0,
+ Len: 0,
+ }
+ err = unix.FcntlFlock(uintptr(fd1), unix.F_OFD_SETLK, &lk)
+ if err != nil {
+ t.Fatal(err)
+ }
+ err = unix.FcntlFlock(uintptr(fd2), unix.F_OFD_SETLK, &lk)
+ if err == nil {
+ t.Fatal("double-lock succeeded but should have failed")
+ }
+}