diff --git a/.github/workflows/posix-compliance.yml b/.github/workflows/posix-compliance.yml index 28edcabbb..2235f8703 100644 --- a/.github/workflows/posix-compliance.yml +++ b/.github/workflows/posix-compliance.yml @@ -252,6 +252,26 @@ jobs: # Verify mount point echo "Mount point: $SEAWEEDFS_MOUNT_POINT" ls -la $SEAWEEDFS_MOUNT_POINT + + # Verify mount is actually working by testing file operations + echo "Verifying SeaweedFS mount functionality..." + TEST_FILE="$SEAWEEDFS_MOUNT_POINT/.mount_verification_test" + echo "SeaweedFS mount test" > "$TEST_FILE" + if [ "$(cat "$TEST_FILE")" = "SeaweedFS mount test" ]; then + echo "✅ Mount verification successful" + rm -f "$TEST_FILE" + else + echo "❌ Mount verification failed - mount may not be working properly" + exit 1 + fi + + # Check if this is actually a FUSE mount + if mount | grep -q "$SEAWEEDFS_MOUNT_POINT"; then + echo "✅ FUSE mount detected:" + mount | grep "$SEAWEEDFS_MOUNT_POINT" + else + echo "⚠️ Warning: Mount point not found in mount table" + fi - name: Run POSIX compliance tests id: posix-tests @@ -273,6 +293,12 @@ jobs: export TEST_MOUNT_POINT="$SEAWEEDFS_MOUNT_POINT" export TEST_SKIP_CLUSTER_SETUP="true" + # Debug: Show environment variables + echo "🔍 Test Environment:" + echo " TEST_MOUNT_POINT=$TEST_MOUNT_POINT" + echo " TEST_SKIP_CLUSTER_SETUP=$TEST_SKIP_CLUSTER_SETUP" + echo " SEAWEEDFS_MOUNT_POINT=$SEAWEEDFS_MOUNT_POINT" + case "$TEST_TYPE" in "critical") make -f posix_Makefile test-posix-critical diff --git a/test/fuse_integration/fallocate_darwin.go b/test/fuse_integration/fallocate_darwin.go index 94f5de7b9..fa67f3f7a 100644 --- a/test/fuse_integration/fallocate_darwin.go +++ b/test/fuse_integration/fallocate_darwin.go @@ -34,6 +34,12 @@ type fstore struct { } func fallocateFile(fd int, mode int, offset int64, length int64) error { + // Check for unsupported modes on macOS + unsupportedModes := FALLOC_FL_PUNCH_HOLE | FALLOC_FL_NO_HIDE_STALE | FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE | FALLOC_FL_INSERT_RANGE | FALLOC_FL_UNSHARE_RANGE + if mode&unsupportedModes != 0 { + return syscall.ENOTSUP // Operation not supported + } + // On macOS, we use fcntl with F_PREALLOCATE store := fstore{ flags: F_ALLOCATECONTIG, diff --git a/test/fuse_integration/framework.go b/test/fuse_integration/framework.go index 32bcb97a9..c0ac39b77 100644 --- a/test/fuse_integration/framework.go +++ b/test/fuse_integration/framework.go @@ -106,6 +106,27 @@ func (f *FuseTestFramework) Setup(config *TestConfig) error { f.t.Logf("Warning: failed to cleanup test file: %v", err) } + // Verify this is actually a SeaweedFS mount by checking for SeaweedFS-specific behavior + // Create a test file and verify it appears in the filer + verifyFile := filepath.Join(f.mountPoint, ".seaweedfs_mount_verification") + if err := os.WriteFile(verifyFile, []byte("SeaweedFS mount verification"), 0644); err != nil { + return fmt.Errorf("mount point verification failed - cannot write: %v", err) + } + + // Read it back to ensure it's working + if data, err := os.ReadFile(verifyFile); err != nil { + return fmt.Errorf("mount point verification failed - cannot read: %v", err) + } else if string(data) != "SeaweedFS mount verification" { + return fmt.Errorf("mount point verification failed - data mismatch") + } + + // Clean up verification file + if err := os.Remove(verifyFile); err != nil { + f.t.Logf("Warning: failed to cleanup verification file: %v", err) + } + + f.t.Logf("✅ SeaweedFS mount point verified and working: %s", f.mountPoint) + f.isSetup = true return nil } diff --git a/test/fuse_integration/posix_Makefile b/test/fuse_integration/posix_Makefile index a369cb5ef..7b74c984e 100644 --- a/test/fuse_integration/posix_Makefile +++ b/test/fuse_integration/posix_Makefile @@ -320,7 +320,7 @@ generate-json-report: @echo "{" > $(REPORT_DIR)/posix_compliance_report.json @echo " \"report_type\": \"posix_compliance\"," >> $(REPORT_DIR)/posix_compliance_report.json @echo " \"timestamp\": \"$$(date -u +"%Y-%m-%dT%H:%M:%SZ")\"," >> $(REPORT_DIR)/posix_compliance_report.json - @echo " \"seaweedfs_version\": \"$$($(WEED_BINARY) version 2>/dev/null | head -n1 || echo 'Unknown')\"," >> $(REPORT_DIR)/posix_compliance_report.json + @echo " \"seaweedfs_version\": \"$$($(WEED_BINARY) version 2>/dev/null | head -n1 | sed 's/\\/\\\\/g; s/\"/\\\"/g' || echo 'Unknown')\"," >> $(REPORT_DIR)/posix_compliance_report.json @echo " \"test_environment\": { \"os\": \"$$(uname -s)\", \"arch\": \"$$(uname -m)\" }," >> $(REPORT_DIR)/posix_compliance_report.json @echo " \"test_suites\": {" >> $(REPORT_DIR)/posix_compliance_report.json @FIRST=true; \ diff --git a/test/fuse_integration/posix_extended_test.go b/test/fuse_integration/posix_extended_test.go index 408d93287..bc966c15b 100644 --- a/test/fuse_integration/posix_extended_test.go +++ b/test/fuse_integration/posix_extended_test.go @@ -197,7 +197,7 @@ func (s *POSIXExtendedTestSuite) TestFileLocking(t *testing.T) { } err = syscall.FcntlFlock(file2.Fd(), syscall.F_SETLK, &flock2) - require.Equal(t, syscall.EAGAIN, err) // Lock should be blocked + require.Equal(t, syscall.EAGAIN, err) // Lock attempt should fail immediately as it's non-blocking // Release lock flock.Type = syscall.F_UNLCK