scripts/README_TESTING.md
Run the automated Go test to verify the fix:
# Test that reproduces the race condition (without fix)
go test -v ./internal/config -run TestConfigFileRaceCondition
# Test that verifies atomic writes prevent race conditions
go test -v ./internal/config -run TestAtomicConfigWrite
Run the shell script for a visual demonstration:
# Run with default 50 iterations
./scripts/test-config-race.sh
# Run with more iterations for better statistical analysis
./scripts/test-config-race.sh 200
The script will:
Before Fix (Non-Atomic):
After Fix (Atomic):
The test simulates the real-world scenario:
Add to CI pipeline:
- name: Test config atomicity
run: |
go test -v ./internal/config -run TestAtomicConfigWrite
if [ $? -ne 0 ]; then
echo "❌ Atomic config write test failed!"
exit 1
fi
Compare performance of non-atomic vs atomic writes:
go test -bench=BenchmarkConfigWriteRead ./internal/config
Expected: Similar performance (fsync is negligible for config writes)
internal/config/loader.go - Atomic write implementationinternal/config/race_test.go - Automated testsscripts/test-config-race.sh - Manual test scriptRACE_CONDITION_FIX_SUMMARY.md - Detailed analysis and results