Skip to content

Commit d76dce7

Browse files
committed
test opt in code
1 parent de26a89 commit d76dce7

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

test/worker_test.rb

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

441+
if !defined?(RUBY_ENGINE) || defined?(RUBY_ENGINE) && RUBY_ENGINE != "jruby"
442+
test "old signal handling is the default" do
443+
rescue_time = nil
444+
445+
begin
446+
class LongRunningJob
447+
@queue = :long_running_job
448+
449+
def self.perform( run_time, rescue_time=nil )
450+
Resque.redis.client.reconnect # get its own connection
451+
Resque.redis.rpush( 'sigterm-test:start', Process.pid )
452+
sleep run_time
453+
Resque.redis.rpush( 'sigterm-test:result', 'Finished Normally' )
454+
rescue Resque::TermException => e
455+
Resque.redis.rpush( 'sigterm-test:result', %Q(Caught SignalException: #{e.inspect}))
456+
sleep rescue_time unless rescue_time.nil?
457+
ensure
458+
puts 'fuuuu'
459+
Resque.redis.rpush( 'sigterm-test:final', 'exiting.' )
460+
end
461+
end
462+
463+
Resque.enqueue( LongRunningJob, 5, rescue_time )
464+
465+
worker_pid = Kernel.fork do
466+
# ensure we actually fork
467+
$TESTING = false
468+
# reconnect since we just forked
469+
Resque.redis.client.reconnect
470+
471+
worker = Resque::Worker.new(:long_running_job)
472+
473+
worker.work(0)
474+
exit!
475+
end
476+
477+
# ensure the worker is started
478+
start_status = Resque.redis.blpop( 'sigterm-test:start', 5 )
479+
assert_not_nil start_status
480+
child_pid = start_status[1].to_i
481+
assert_operator child_pid, :>, 0
482+
483+
# send signal to abort the worker
484+
Process.kill('TERM', worker_pid)
485+
Process.waitpid(worker_pid)
486+
487+
# wait to see how it all came down
488+
result = Resque.redis.blpop( 'sigterm-test:result', 5 )
489+
assert_nil result
490+
491+
# ensure that the child pid is no longer running
492+
child_still_running = !(`ps -p #{child_pid.to_s} -o pid=`).empty?
493+
assert !child_still_running
494+
ensure
495+
remaining_keys = Resque.redis.keys('sigterm-test:*') || []
496+
Resque.redis.del(*remaining_keys) unless remaining_keys.empty?
497+
end
498+
end
499+
end
500+
441501
if !defined?(RUBY_ENGINE) || defined?(RUBY_ENGINE) && RUBY_ENGINE != "jruby"
442502
[SignalException, Resque::TermException].each do |exception|
443503
{

0 commit comments

Comments
 (0)