sidekiq-cron 1.10.1 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -2
- data/README.md +19 -4
- data/lib/sidekiq/cron/job.rb +24 -18
- data/lib/sidekiq/cron/schedule_loader.rb +11 -13
- data/lib/sidekiq/cron/version.rb +1 -1
- data/lib/sidekiq/options.rb +6 -2
- data/sidekiq-cron.gemspec +2 -2
- metadata +5 -17
- data/test/integration/performance_test.rb +0 -46
- data/test/models/person.rb +0 -21
- data/test/test_helper.rb +0 -93
- data/test/unit/fixtures/schedule_array.yml +0 -13
- data/test/unit/fixtures/schedule_erb.yml +0 -6
- data/test/unit/fixtures/schedule_hash.yml +0 -12
- data/test/unit/fixtures/schedule_string.yml +0 -1
- data/test/unit/job_test.rb +0 -1386
- data/test/unit/launcher_test.rb +0 -33
- data/test/unit/poller_test.rb +0 -144
- data/test/unit/schedule_loader_test.rb +0 -58
- data/test/unit/web_extension_test.rb +0 -155
data/test/unit/launcher_test.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require './test/test_helper'
|
2
|
-
|
3
|
-
describe 'Cron launcher' do
|
4
|
-
describe 'initialization' do
|
5
|
-
before do
|
6
|
-
Sidekiq::Options[:cron_poll_interval] = nil
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'initializes poller with default poll interval when not configured' do
|
10
|
-
Sidekiq::Cron::Poller.expects(:new).with do |options|
|
11
|
-
assert_equal Sidekiq::Cron::Launcher::DEFAULT_POLL_INTERVAL, options[:cron_poll_interval]
|
12
|
-
end
|
13
|
-
|
14
|
-
Sidekiq::Launcher.new(Sidekiq.respond_to?(:default_configuration) ? Sidekiq.default_configuration : Sidekiq)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'initializes poller with the configured poll interval' do
|
18
|
-
Sidekiq::Cron::Poller.expects(:new).with do |options|
|
19
|
-
assert_equal 99, options[:cron_poll_interval]
|
20
|
-
end
|
21
|
-
|
22
|
-
Sidekiq::Options[:cron_poll_interval] = 99
|
23
|
-
Sidekiq::Launcher.new(Sidekiq.respond_to?(:default_configuration) ? Sidekiq.default_configuration : Sidekiq)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'does not initialize the poller when interval is 0' do
|
27
|
-
Sidekiq::Cron::Poller.expects(:new).never
|
28
|
-
|
29
|
-
Sidekiq::Options[:cron_poll_interval] = 0
|
30
|
-
Sidekiq::Launcher.new(Sidekiq.respond_to?(:default_configuration) ? Sidekiq.default_configuration : Sidekiq)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/test/unit/poller_test.rb
DELETED
@@ -1,144 +0,0 @@
|
|
1
|
-
require './test/test_helper'
|
2
|
-
|
3
|
-
describe 'Cron Poller' do
|
4
|
-
before do
|
5
|
-
# Clear all previous saved data from Redis.
|
6
|
-
Sidekiq.redis do |conn|
|
7
|
-
conn.flushdb
|
8
|
-
end
|
9
|
-
|
10
|
-
@args = {
|
11
|
-
name: "Test",
|
12
|
-
cron: "*/2 * * * *",
|
13
|
-
klass: "CronTestClass"
|
14
|
-
}
|
15
|
-
@args2 = @args.merge(name: 'with_queue', klass: 'CronTestClassWithQueue', cron: "*/10 * * * *")
|
16
|
-
|
17
|
-
@poller = Sidekiq::Cron::Poller.new(Sidekiq.const_defined?(:Config) ? Sidekiq::Config.new : {})
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'not enqueue any job - new jobs' do
|
21
|
-
now = Time.now.utc + 3600
|
22
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 5, 1)
|
23
|
-
Time.stubs(:now).returns(enqueued_time)
|
24
|
-
|
25
|
-
Sidekiq::Cron::Job.create(@args)
|
26
|
-
Sidekiq::Cron::Job.create(@args2)
|
27
|
-
|
28
|
-
@poller.enqueue
|
29
|
-
|
30
|
-
Sidekiq.redis do |conn|
|
31
|
-
assert_equal 0, conn.llen("queue:default")
|
32
|
-
assert_equal 0, conn.llen("queue:super")
|
33
|
-
end
|
34
|
-
|
35
|
-
# 30 seconds after!
|
36
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 5, 30)
|
37
|
-
Time.stubs(:now).returns(enqueued_time)
|
38
|
-
|
39
|
-
@poller.enqueue
|
40
|
-
|
41
|
-
Sidekiq.redis do |conn|
|
42
|
-
assert_equal 0, conn.llen("queue:default")
|
43
|
-
assert_equal 0, conn.llen("queue:super")
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
it 'should enqueue only job with cron */2' do
|
48
|
-
now = Time.now.utc + 3600
|
49
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 5, 1)
|
50
|
-
Time.stubs(:now).returns(enqueued_time)
|
51
|
-
|
52
|
-
Sidekiq::Cron::Job.create(@args)
|
53
|
-
Sidekiq::Cron::Job.create(@args2)
|
54
|
-
|
55
|
-
@poller.enqueue
|
56
|
-
|
57
|
-
Sidekiq.redis do |conn|
|
58
|
-
assert_equal 0, conn.llen("queue:default")
|
59
|
-
assert_equal 0, conn.llen("queue:super")
|
60
|
-
end
|
61
|
-
|
62
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 6, 1)
|
63
|
-
Time.stubs(:now).returns(enqueued_time)
|
64
|
-
@poller.enqueue
|
65
|
-
|
66
|
-
Sidekiq.redis do |conn|
|
67
|
-
assert_equal 1, conn.llen("queue:default")
|
68
|
-
assert_equal 0, conn.llen("queue:super")
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'should enqueue both jobs' do
|
73
|
-
now = Time.now.utc + 3600
|
74
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 8, 1)
|
75
|
-
Time.stubs(:now).returns(enqueued_time)
|
76
|
-
|
77
|
-
Sidekiq::Cron::Job.create(@args)
|
78
|
-
Sidekiq::Cron::Job.create(@args2)
|
79
|
-
|
80
|
-
@poller.enqueue
|
81
|
-
|
82
|
-
Sidekiq.redis do |conn|
|
83
|
-
assert_equal 0, conn.llen("queue:default")
|
84
|
-
assert_equal 0, conn.llen("queue:super")
|
85
|
-
end
|
86
|
-
|
87
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 10, 5)
|
88
|
-
Time.stubs(:now).returns(enqueued_time)
|
89
|
-
@poller.enqueue
|
90
|
-
|
91
|
-
Sidekiq.redis do |conn|
|
92
|
-
assert_equal 1, conn.llen("queue:default")
|
93
|
-
assert_equal 1, conn.llen("queue:super")
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
it 'should enqueue both jobs but only one time each' do
|
98
|
-
now = Time.now.utc + 3600
|
99
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 8, 1)
|
100
|
-
Time.stubs(:now).returns(enqueued_time)
|
101
|
-
|
102
|
-
Sidekiq::Cron::Job.create(@args)
|
103
|
-
Sidekiq::Cron::Job.create(@args2)
|
104
|
-
|
105
|
-
@poller.enqueue
|
106
|
-
|
107
|
-
Sidekiq.redis do |conn|
|
108
|
-
assert_equal 0, conn.llen("queue:default")
|
109
|
-
assert_equal 0, conn.llen("queue:super")
|
110
|
-
end
|
111
|
-
|
112
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 20, 1)
|
113
|
-
Time.stubs(:now).returns(enqueued_time)
|
114
|
-
@poller.enqueue
|
115
|
-
Sidekiq.redis do |conn|
|
116
|
-
assert_equal 1, conn.llen("queue:default")
|
117
|
-
assert_equal 1, conn.llen("queue:super")
|
118
|
-
end
|
119
|
-
|
120
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 20, 2)
|
121
|
-
Time.stubs(:now).returns(enqueued_time)
|
122
|
-
@poller.enqueue
|
123
|
-
Sidekiq.redis do |conn|
|
124
|
-
assert_equal 1, conn.llen("queue:default")
|
125
|
-
assert_equal 1, conn.llen("queue:super")
|
126
|
-
end
|
127
|
-
|
128
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 20, 20)
|
129
|
-
Time.stubs(:now).returns(enqueued_time)
|
130
|
-
@poller.enqueue
|
131
|
-
Sidekiq.redis do |conn|
|
132
|
-
assert_equal 1, conn.llen("queue:default")
|
133
|
-
assert_equal 1, conn.llen("queue:super")
|
134
|
-
end
|
135
|
-
|
136
|
-
enqueued_time = Time.new(now.year, now.month, now.day, now.hour, 20, 50)
|
137
|
-
Time.stubs(:now).returns(enqueued_time)
|
138
|
-
@poller.enqueue
|
139
|
-
Sidekiq.redis do |conn|
|
140
|
-
assert_equal 1, conn.llen("queue:default")
|
141
|
-
assert_equal 1, conn.llen("queue:super")
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require './test/test_helper'
|
2
|
-
|
3
|
-
describe 'ScheduleLoader' do
|
4
|
-
before do
|
5
|
-
Sidekiq::Options[:lifecycle_events][:startup].clear
|
6
|
-
end
|
7
|
-
|
8
|
-
describe 'Schedule is defined in hash' do
|
9
|
-
before do
|
10
|
-
Sidekiq::Options[:cron_schedule_file] = 'test/unit/fixtures/schedule_hash.yml'
|
11
|
-
load 'sidekiq/cron/schedule_loader.rb'
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'calls Sidekiq::Cron::Job.load_from_hash' do
|
15
|
-
Sidekiq::Cron::Job.expects(:load_from_hash!)
|
16
|
-
Sidekiq::Options[:lifecycle_events][:startup].first.call
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe 'Schedule is defined in array' do
|
21
|
-
before do
|
22
|
-
Sidekiq::Options[:cron_schedule_file] = 'test/unit/fixtures/schedule_array.yml'
|
23
|
-
load 'sidekiq/cron/schedule_loader.rb'
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'calls Sidekiq::Cron::Job.load_from_array' do
|
27
|
-
Sidekiq::Cron::Job.expects(:load_from_array!)
|
28
|
-
Sidekiq::Options[:lifecycle_events][:startup].first.call
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe 'Schedule is not defined in hash nor array' do
|
33
|
-
before do
|
34
|
-
Sidekiq::Options[:cron_schedule_file] = 'test/unit/fixtures/schedule_string.yml'
|
35
|
-
load 'sidekiq/cron/schedule_loader.rb'
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'raises an error' do
|
39
|
-
e = assert_raises StandardError do
|
40
|
-
Sidekiq::Options[:lifecycle_events][:startup].first.call
|
41
|
-
end
|
42
|
-
assert_equal 'Not supported schedule format. Confirm your test/unit/fixtures/schedule_string.yml', e.message
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe 'Schedule is defined using ERB' do
|
47
|
-
it 'properly parses the schedule file' do
|
48
|
-
Sidekiq::Options[:cron_schedule_file] = 'test/unit/fixtures/schedule_erb.yml'
|
49
|
-
load 'sidekiq/cron/schedule_loader.rb'
|
50
|
-
|
51
|
-
Sidekiq::Options[:lifecycle_events][:startup].first.call
|
52
|
-
|
53
|
-
job = Sidekiq::Cron::Job.find("daily_job")
|
54
|
-
assert_equal job.klass, "DailyJob"
|
55
|
-
assert_equal job.cron, "every day at 5 pm"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,155 +0,0 @@
|
|
1
|
-
require './test/test_helper'
|
2
|
-
|
3
|
-
describe 'Cron web' do
|
4
|
-
include Rack::Test::Methods
|
5
|
-
|
6
|
-
TOKEN = SecureRandom.base64(32).freeze
|
7
|
-
|
8
|
-
def app
|
9
|
-
Sidekiq::Web
|
10
|
-
end
|
11
|
-
|
12
|
-
before do
|
13
|
-
env 'rack.session', { csrf: TOKEN }
|
14
|
-
env 'HTTP_X_CSRF_TOKEN', TOKEN
|
15
|
-
Sidekiq.redis { |c| c.flushdb }
|
16
|
-
end
|
17
|
-
|
18
|
-
let(:job_name) { "TestNameOfCronJob" }
|
19
|
-
let(:cron_job_name) { "TesQueueNameOfCronJob" }
|
20
|
-
|
21
|
-
let(:args) do
|
22
|
-
{
|
23
|
-
name: job_name,
|
24
|
-
cron: "*/2 * * * *",
|
25
|
-
klass: "CronTestClass"
|
26
|
-
}
|
27
|
-
end
|
28
|
-
|
29
|
-
let(:cron_args) do
|
30
|
-
{
|
31
|
-
name: cron_job_name,
|
32
|
-
cron: "*/2 * * * *",
|
33
|
-
klass: "CronQueueTestClass",
|
34
|
-
queue: "cron"
|
35
|
-
}
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'display cron web' do
|
39
|
-
get '/cron'
|
40
|
-
assert_equal 200, last_response.status
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'display cron web with message - no cron jobs' do
|
44
|
-
get '/cron'
|
45
|
-
assert last_response.body.include?('No cron jobs were found')
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'display cron web with cron jobs table' do
|
49
|
-
Sidekiq::Cron::Job.create(args)
|
50
|
-
|
51
|
-
get '/cron'
|
52
|
-
assert_equal 200, last_response.status
|
53
|
-
refute last_response.body.include?('No cron jobs were found')
|
54
|
-
assert last_response.body.include?('table')
|
55
|
-
assert last_response.body.include?("TestNameOfCronJob")
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "work with cron job" do
|
59
|
-
before do
|
60
|
-
@job = Sidekiq::Cron::Job.new(args.merge(status: "enabled"))
|
61
|
-
assert @job.save
|
62
|
-
|
63
|
-
@cron_job = Sidekiq::Cron::Job.new(cron_args.merge(status: "enabled"))
|
64
|
-
assert @cron_job.save
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'shows history of a cron job' do
|
68
|
-
@job.enque!
|
69
|
-
get "/cron/#{job_name}"
|
70
|
-
|
71
|
-
jid =
|
72
|
-
Sidekiq.redis do |conn|
|
73
|
-
history = conn.lrange Sidekiq::Cron::Job.jid_history_key(job_name), 0, -1
|
74
|
-
Sidekiq.load_json(history.last)['jid']
|
75
|
-
end
|
76
|
-
|
77
|
-
assert jid
|
78
|
-
assert last_response.body.include?(jid)
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'redirects to cron path when name not found' do
|
82
|
-
get '/cron/some-fake-name'
|
83
|
-
|
84
|
-
assert_match %r{\/cron\z}, last_response['Location']
|
85
|
-
end
|
86
|
-
|
87
|
-
it "disable and enable all cron jobs" do
|
88
|
-
post "/cron/__all__/disable"
|
89
|
-
assert_equal Sidekiq::Cron::Job.find(job_name).status, "disabled"
|
90
|
-
|
91
|
-
post "/cron/__all__/enable"
|
92
|
-
assert_equal Sidekiq::Cron::Job.find(job_name).status, "enabled"
|
93
|
-
end
|
94
|
-
|
95
|
-
it "disable and enable cron job" do
|
96
|
-
post "/cron/#{job_name}/disable"
|
97
|
-
assert_equal Sidekiq::Cron::Job.find(job_name).status, "disabled"
|
98
|
-
|
99
|
-
post "/cron/#{job_name}/enable"
|
100
|
-
assert_equal Sidekiq::Cron::Job.find(job_name).status, "enabled"
|
101
|
-
end
|
102
|
-
|
103
|
-
it "enqueue all jobs" do
|
104
|
-
Sidekiq.redis do |conn|
|
105
|
-
assert_equal 0, conn.llen("queue:default"), "Queue should have no jobs"
|
106
|
-
end
|
107
|
-
|
108
|
-
post "/cron/__all__/enque"
|
109
|
-
|
110
|
-
Sidekiq.redis do |conn|
|
111
|
-
assert_equal 1, conn.llen("queue:default"), "Queue should have 1 job in default"
|
112
|
-
assert_equal 1, conn.llen("queue:cron"), "Queue should have 1 job in cron"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
it "enqueue job" do
|
117
|
-
Sidekiq.redis do |conn|
|
118
|
-
assert_equal 0, conn.llen("queue:default"), "Queue should have no jobs"
|
119
|
-
end
|
120
|
-
|
121
|
-
post "/cron/#{job_name}/enque"
|
122
|
-
|
123
|
-
Sidekiq.redis do |conn|
|
124
|
-
assert_equal 1, conn.llen("queue:default"), "Queue should have 1 job"
|
125
|
-
end
|
126
|
-
|
127
|
-
# Should enqueue more times.
|
128
|
-
post "/cron/#{job_name}/enque"
|
129
|
-
|
130
|
-
Sidekiq.redis do |conn|
|
131
|
-
assert_equal 2, conn.llen("queue:default"), "Queue should have 2 job"
|
132
|
-
end
|
133
|
-
|
134
|
-
# Should enqueue to cron job queue.
|
135
|
-
post "/cron/#{cron_job_name}/enque"
|
136
|
-
|
137
|
-
Sidekiq.redis do |conn|
|
138
|
-
assert_equal 1, conn.llen("queue:cron"), "Queue should have 1 cron job"
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
it "destroy job" do
|
143
|
-
assert_equal Sidekiq::Cron::Job.all.size, 2, "Should have 2 job"
|
144
|
-
post "/cron/#{job_name}/delete"
|
145
|
-
post "/cron/#{cron_job_name}/delete"
|
146
|
-
assert_equal Sidekiq::Cron::Job.all.size, 0, "Should have zero jobs"
|
147
|
-
end
|
148
|
-
|
149
|
-
it "destroy all jobs" do
|
150
|
-
assert_equal Sidekiq::Cron::Job.all.size, 2, "Should have 2 job"
|
151
|
-
post "/cron/__all__/delete"
|
152
|
-
assert_equal Sidekiq::Cron::Job.all.size, 0, "Should have zero jobs"
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|