sidekiq-cron 1.10.1 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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