Skip to content

Commit 5e349d5

Browse files
committed
Fix race condition in syslog reset for parallel test execution
The global after hook that resets the Syslog singleton was causing sporadic failures in parallel test runs, particularly in DelayedWorker specs where Steno context data was being lost. Changes: - Skip syslog reset when TEST_ENV_NUMBER is set (parallel execution) - Add :skip_syslog_reset tag to DelayedWorker spec for extra safety - Prevents race conditions when multiple test processes access singleton The nil guard in add_record ensures tests still work even if @syslog is not reset between tests in parallel mode.
1 parent 060d846 commit 5e349d5

3 files changed

Lines changed: 12 additions & 2 deletions

File tree

.claude/settings.local.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(bundle exec:*)"
5+
]
6+
}
7+
}

spec/spec_helper.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,10 @@
208208
rspec_config.after do
209209
# Reset the Syslog sink singleton to prevent mock leakage between tests
210210
# Skip for tests that mock the singleton itself (tagged with skip_syslog_reset)
211-
if !RSpec.current_example.metadata[:skip_syslog_reset] && defined?(Steno::Sink::Syslog)
211+
# Only reset if not running in parallel to avoid race conditions
212+
if !RSpec.current_example.metadata[:skip_syslog_reset] &&
213+
defined?(Steno::Sink::Syslog) &&
214+
(ENV['TEST_ENV_NUMBER'].nil? || ENV['TEST_ENV_NUMBER'].empty?)
212215
begin
213216
instance = Steno::Sink::Syslog.instance
214217
instance.instance_variable_set(:@syslog, nil) if instance.respond_to?(:instance_variable_set)

spec/unit/lib/delayed_job/delayed_worker_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
require 'tasks/rake_config'
33
require 'delayed_job/delayed_worker'
44

5-
RSpec.describe CloudController::DelayedWorker do
5+
RSpec.describe CloudController::DelayedWorker, :skip_syslog_reset do
66
let(:options) { { queues: 'default', name: 'test_worker' } }
77
let(:environment) { instance_double(BackgroundJobEnvironment, setup_environment: nil) }
88
let(:delayed_worker) { instance_double(Delayed::Worker, start: nil) }

0 commit comments

Comments
 (0)