aboutsummaryrefslogtreecommitdiff
path: root/test/fuse_integration/posix_compliance_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/fuse_integration/posix_compliance_test.go')
-rw-r--r--test/fuse_integration/posix_compliance_test.go38
1 files changed, 36 insertions, 2 deletions
diff --git a/test/fuse_integration/posix_compliance_test.go b/test/fuse_integration/posix_compliance_test.go
index e7ce60ec7..c187be102 100644
--- a/test/fuse_integration/posix_compliance_test.go
+++ b/test/fuse_integration/posix_compliance_test.go
@@ -325,8 +325,11 @@ func (s *POSIXComplianceTestSuite) TestTimestamps(t *testing.T) {
stat2, err := os.Stat(testFile)
require.NoError(t, err)
- // Access time should have changed (or at least not be earlier)
- require.True(t, stat2.ModTime().Equal(stat1.ModTime()) || stat2.ModTime().After(stat1.ModTime()))
+ // Access time should have been updated, and modification time should be unchanged.
+ stat1Sys := stat1.Sys().(*syscall.Stat_t)
+ stat2Sys := stat2.Sys().(*syscall.Stat_t)
+ require.True(t, stat2Sys.Atimespec.Nano() >= stat1Sys.Atimespec.Nano(), "access time should be updated or stay the same")
+ require.Equal(t, stat1.ModTime(), stat2.ModTime(), "modification time should not change on read")
})
t.Run("ModificationTime", func(t *testing.T) {
@@ -445,6 +448,37 @@ func (s *POSIXComplianceTestSuite) TestIOOperations(t *testing.T) {
require.NoError(t, err)
require.Equal(t, 1, n)
require.Equal(t, []byte("A"), buffer)
+
+ // Test positioned I/O operations (pread/pwrite)
+ syscall.Close(fd)
+
+ // Open for read/write to test pwrite
+ fd, err = syscall.Open(testFile, syscall.O_RDWR, 0)
+ require.NoError(t, err)
+ defer syscall.Close(fd)
+
+ // Positioned write test
+ writeData := []byte("XYZ")
+ n, err = syscall.Pwrite(fd, writeData, 5) // pwrite at offset 5
+ require.NoError(t, err)
+ require.Equal(t, len(writeData), n)
+
+ // Verify file position is unchanged by pwrite
+ currentPos, err := syscall.Seek(fd, 0, 1) // SEEK_CUR
+ require.NoError(t, err)
+ require.Equal(t, int64(0), currentPos, "file offset should not be changed by pwrite")
+
+ // Read back with pread
+ readBuffer := make([]byte, len(writeData))
+ n, err = syscall.Pread(fd, readBuffer, 5) // pread at offset 5
+ require.NoError(t, err)
+ require.Equal(t, len(writeData), n)
+ require.Equal(t, writeData, readBuffer)
+
+ // Verify file position is still unchanged by pread
+ currentPos, err = syscall.Seek(fd, 0, 1) // SEEK_CUR
+ require.NoError(t, err)
+ require.Equal(t, int64(0), currentPos, "file offset should not be changed by pread")
})
t.Run("AppendMode", func(t *testing.T) {