diff options
-rw-r--r-- | tests/cluster/cluster_test.go | 36 | ||||
-rw-r--r-- | tests/cluster/poc_test.go | 47 |
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") + } +} |