1
0
Fork 0
mirror of https://github.com/endofunky/sidetiq.git synced 2022-11-09 13:53:30 -05:00
endofunky--sidetiq/test/test_clock.rb
Tobias Svensson e0ebcaacd9 Move to actor-based concurrency.
Using plain threads in Sidekiq's Celluloid-based actor
model is a little bit like riding a motorcycle without
a helmet, so let's try to fit in a bit better.
2013-09-16 12:01:37 +01:00

128 lines
3.3 KiB
Ruby

require_relative 'helper'
class TestClock < Sidetiq::TestCase
def test_gettime_seconds
assert_equal clock.gettime.tv_sec, Time.now.tv_sec
end
def test_gettime_nsec
refute_nil clock.gettime.tv_nsec
end
def test_gettime_utc
refute clock.gettime.utc?
Sidetiq.config.utc = true
assert clock.gettime.utc?
Sidetiq.config.utc = false
end
def test_backfilling
BackfillWorker.jobs.clear
start = Sidetiq::Schedule::START_TIME
BackfillWorker.stubs(:last_scheduled_occurrence).returns(start.to_f)
clock.stubs(:gettime).returns(start)
clock.tick
BackfillWorker.jobs.clear
clock.stubs(:gettime).returns(start + 86400 * 10 + 1)
clock.tick
assert_equal 10, BackfillWorker.jobs.length
end
def test_enqueues_jobs_by_schedule
schedule = Sidetiq::Schedule.new
schedule.daily
clock.stubs(:schedules).returns(SimpleWorker => schedule)
SimpleWorker.expects(:perform_at).times(10)
10.times do |i|
clock.stubs(:gettime).returns(Time.local(2011, 1, i + 1, 1))
clock.tick
end
clock.stubs(:gettime).returns(Time.local(2011, 1, 10, 2))
clock.tick
clock.tick
clock.tick
end
def test_enqueues_jobs_with_default_last_tick_arg_on_first_run
schedule = Sidetiq::Schedule.new
schedule.hourly
time = Time.local(2011, 1, 1, 1, 30)
clock.stubs(:gettime).returns(time, time + 3600)
clock.stubs(:schedules).returns(LastTickWorker => schedule)
expected_first_tick = time + 1800
expected_second_tick = expected_first_tick + 3600
LastTickWorker.expects(:perform_at).with(expected_first_tick, -1).once
LastTickWorker.expects(:perform_at).with(expected_second_tick,
expected_first_tick.to_f).once
clock.tick
clock.tick
end
def test_enqueues_jobs_with_last_run_timestamp_and_next_run_timestamp
schedule = Sidetiq::Schedule.new
schedule.hourly
time = Time.local(2011, 1, 1, 1, 30)
clock.stubs(:gettime).returns(time, time + 3600)
clock.stubs(:schedules).returns(LastAndScheduledTicksWorker => schedule)
expected_first_tick = time + 1800
expected_second_tick = expected_first_tick + 3600
LastAndScheduledTicksWorker.expects(:perform_at)
.with(expected_first_tick, -1, expected_first_tick.to_f).once
clock.tick
LastAndScheduledTicksWorker.expects(:perform_at)
.with(expected_second_tick, expected_first_tick.to_f,
expected_second_tick.to_f).once
clock.tick
end
def test_enqueues_jobs_with_last_run_timestamp_if_optional_argument
schedule = Sidetiq::Schedule.new
schedule.hourly
time = Time.local(2011, 1, 1, 1, 30)
clock.stubs(:gettime).returns(time, time + 3600)
clock.stubs(:schedules).returns(OptionalArgumentWorker => schedule)
expected_first_tick = time + 1800
OptionalArgumentWorker.expects(:perform_at)
.with(expected_first_tick, -1).once
clock.tick
end
def test_enqueues_jobs_correctly_for_splat_args_perform_methods
schedule = Sidetiq::Schedule.new
schedule.hourly
time = Time.local(2011, 1, 1, 1, 30)
clock.stubs(:gettime).returns(time, time + 3600)
clock.stubs(:schedules).returns(SplatArgsWorker => schedule)
expected_first_tick = time + 1800
SplatArgsWorker.expects(:perform_at)
.with(expected_first_tick, -1, expected_first_tick.to_f).once
clock.tick
end
end