Skip to content

Commit 63829b1

Browse files
committed
don't run forking tests on JRuby
1 parent af82eed commit 63829b1

File tree

1 file changed

+64
-62
lines changed

1 file changed

+64
-62
lines changed

test/worker_test.rb

Lines changed: 64 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -438,74 +438,76 @@ def self.perform
438438
assert_not_equal original_connection, Resque.redis.client.connection.instance_variable_get("@sock")
439439
end
440440

441-
[SignalException, Resque::TermException].each do |exception|
442-
{
443-
'cleanup occurs in allotted time' => nil,
444-
'cleanup takes too long' => 2
445-
}.each do |scenario,rescue_time|
446-
test "SIGTERM when #{scenario} while catching #{exception}" do
447-
begin
448-
eval("class LongRunningJob; @@exception = #{exception}; end")
449-
class LongRunningJob
450-
@queue = :long_running_job
451-
452-
def self.perform( run_time, rescue_time=nil )
453-
Resque.redis.client.reconnect # get its own connection
454-
Resque.redis.rpush( 'sigterm-test:start', Process.pid )
455-
sleep run_time
456-
Resque.redis.rpush( 'sigterm-test:result', 'Finished Normally' )
457-
rescue @@exception => e
458-
Resque.redis.rpush( 'sigterm-test:result', %Q(Caught SignalException: #{e.inspect}))
459-
sleep rescue_time unless rescue_time.nil?
460-
ensure
461-
Resque.redis.rpush( 'sigterm-test:final', 'exiting.' )
441+
if !defined?(RUBY_ENGINE) || defined?(RUBY_ENGINE) && RUBY_ENGINE != "jruby"
442+
[SignalException, Resque::TermException].each do |exception|
443+
{
444+
'cleanup occurs in allotted time' => nil,
445+
'cleanup takes too long' => 2
446+
}.each do |scenario,rescue_time|
447+
test "SIGTERM when #{scenario} while catching #{exception}" do
448+
begin
449+
eval("class LongRunningJob; @@exception = #{exception}; end")
450+
class LongRunningJob
451+
@queue = :long_running_job
452+
453+
def self.perform( run_time, rescue_time=nil )
454+
Resque.redis.client.reconnect # get its own connection
455+
Resque.redis.rpush( 'sigterm-test:start', Process.pid )
456+
sleep run_time
457+
Resque.redis.rpush( 'sigterm-test:result', 'Finished Normally' )
458+
rescue @@exception => e
459+
Resque.redis.rpush( 'sigterm-test:result', %Q(Caught SignalException: #{e.inspect}))
460+
sleep rescue_time unless rescue_time.nil?
461+
ensure
462+
Resque.redis.rpush( 'sigterm-test:final', 'exiting.' )
463+
end
462464
end
463-
end
464465

465-
Resque.enqueue( LongRunningJob, 5, rescue_time )
466+
Resque.enqueue( LongRunningJob, 5, rescue_time )
466467

467-
worker_pid = Kernel.fork do
468-
# ensure we actually fork
469-
$TESTING = false
470-
# reconnect since we just forked
471-
Resque.redis.client.reconnect
468+
worker_pid = Kernel.fork do
469+
# ensure we actually fork
470+
$TESTING = false
471+
# reconnect since we just forked
472+
Resque.redis.client.reconnect
472473

473-
worker = Resque::Worker.new(:long_running_job)
474-
worker.term_timeout = 1
475-
worker.term_child = 1
474+
worker = Resque::Worker.new(:long_running_job)
475+
worker.term_timeout = 1
476+
worker.term_child = 1
476477

477-
worker.work(0)
478-
exit!
479-
end
478+
worker.work(0)
479+
exit!
480+
end
480481

481-
# ensure the worker is started
482-
start_status = Resque.redis.blpop( 'sigterm-test:start', 5 )
483-
assert_not_nil start_status
484-
child_pid = start_status[1].to_i
485-
assert_operator child_pid, :>, 0
486-
487-
# send signal to abort the worker
488-
Process.kill('TERM', worker_pid)
489-
Process.waitpid(worker_pid)
490-
491-
# wait to see how it all came down
492-
result = Resque.redis.blpop( 'sigterm-test:result', 5 )
493-
assert_not_nil result
494-
assert !result[1].start_with?('Finished Normally'), 'Job Finished normally. Sleep not long enough?'
495-
assert result[1].start_with? 'Caught SignalException', 'Signal exception not raised in child.'
496-
497-
# ensure that the child pid is no longer running
498-
child_still_running = !(`ps -p #{child_pid.to_s} -o pid=`).empty?
499-
assert !child_still_running
500-
501-
# see if post-cleanup occurred. This should happen IFF the rescue_time is less than the term_timeout
502-
post_cleanup_occurred = Resque.redis.lpop( 'sigterm-test:final' )
503-
assert post_cleanup_occurred, 'post cleanup did not occur. SIGKILL sent too early?' if rescue_time.nil?
504-
assert !post_cleanup_occurred, 'post cleanup occurred. SIGKILL sent too late?' unless rescue_time.nil?
505-
506-
ensure
507-
remaining_keys = Resque.redis.keys('sigterm-test:*') || []
508-
Resque.redis.del(*remaining_keys) unless remaining_keys.empty?
482+
# ensure the worker is started
483+
start_status = Resque.redis.blpop( 'sigterm-test:start', 5 )
484+
assert_not_nil start_status
485+
child_pid = start_status[1].to_i
486+
assert_operator child_pid, :>, 0
487+
488+
# send signal to abort the worker
489+
Process.kill('TERM', worker_pid)
490+
Process.waitpid(worker_pid)
491+
492+
# wait to see how it all came down
493+
result = Resque.redis.blpop( 'sigterm-test:result', 5 )
494+
assert_not_nil result
495+
assert !result[1].start_with?('Finished Normally'), 'Job Finished normally. Sleep not long enough?'
496+
assert result[1].start_with? 'Caught SignalException', 'Signal exception not raised in child.'
497+
498+
# ensure that the child pid is no longer running
499+
child_still_running = !(`ps -p #{child_pid.to_s} -o pid=`).empty?
500+
assert !child_still_running
501+
502+
# see if post-cleanup occurred. This should happen IFF the rescue_time is less than the term_timeout
503+
post_cleanup_occurred = Resque.redis.lpop( 'sigterm-test:final' )
504+
assert post_cleanup_occurred, 'post cleanup did not occur. SIGKILL sent too early?' if rescue_time.nil?
505+
assert !post_cleanup_occurred, 'post cleanup occurred. SIGKILL sent too late?' unless rescue_time.nil?
506+
507+
ensure
508+
remaining_keys = Resque.redis.keys('sigterm-test:*') || []
509+
Resque.redis.del(*remaining_keys) unless remaining_keys.empty?
510+
end
509511
end
510512
end
511513
end

0 commit comments

Comments
 (0)