1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
#
# Specifying rufus-scheduler
#
# Wed Apr 17 06:00:59 JST 2013
#
require 'spec_helper'
describe Rufus::Scheduler::CronJob do
before :each do
@scheduler = Rufus::Scheduler.new
end
after :each do
@scheduler.shutdown
end
context 'normal' do
it 'triggers near the zero second' do
job = @scheduler.schedule_cron '* * * * *' do; end
sleep_until_next_minute
expect(job.last_time.to_i % 10).to eq(0)
end
end
#context 'sub-minute' do
#
# it 'triggers near the zero second' do
#
# job = @scheduler.schedule_cron '* * * * * *' do; end
#
# sleep 1.5
#
# p job.last_time
# p job.last_time.to_f
# end
#end
context 'first_at/in' do
it 'does not trigger before first_at is reached' do
t = Time.now
job =
@scheduler.schedule_cron '* * * * * *', :first_in => '3s' do
triggered = Time.now
end
sleep 1
#p [ t, t.to_f ]
#p [ job.last_time, job.last_time.to_f ]
#p [ job.first_at, job.first_at.to_f ]
expect(job.first_at).to be_within_1s_of(t + 3)
expect(job.last_time).to eq(nil)
end
it 'triggers for the first time at first_at' do
first_time = nil
t = Time.now
job = @scheduler.schedule_cron '* * * * * *', :first_in => '3s' do
first_time ||= Time.now
end
sleep 4.5
expect(job.first_at).to be_within_1s_of(t + 3)
expect(first_time).to be_within_1s_of(job.first_at)
end
end
context 'scheduling the cron itself' do
# for https://github.com/jmettraux/rufus-scheduler/issues/95
#
# schedule_cron takes more than 30 seconds, blocking...
#
it 'does not sit scheduling and blocking...' do
n = Time.now
first = nil
job = @scheduler.schedule_cron '*/2 * * * * *' do
first ||= Time.now
end
expect(Time.now - n).to be < 1.0
loop do
next unless first
expect(first - n).to be < 4.0
break
end
end
end
describe '#next_time' do
it 'returns the next trigger time' do
tomorrow = Time.now + 24 * 3600 # tomorrow
nt =
@scheduler.schedule_cron("0 0 #{tomorrow.day} * *", lambda {}).next_time
expect(nt.to_f).to eq(Time.parse(tomorrow.strftime('%Y-%m-%d')).to_f)
expect(nt.zone._name).to eq(EtOrbi::EoTime.local_tzone._name)
end
it 'returns the next trigger time (first_at => Time)' do
ft = Time.parse('2100-12-31')
job = @scheduler.schedule_cron('* * 1 * *', :first_at => ft) {}
nt = job.next_time
expect(nt.to_f).to eq(ft.to_f)
expect(nt.zone._name).to eq(EtOrbi::EoTime.local_tzone._name)
end
end
end
|