sidekiq-cron 1.2.0 → 1.3.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 +5 -5
- data/Changes.md +16 -0
- data/Gemfile +1 -30
- data/README.md +144 -67
- data/Rakefile +0 -18
- data/lib/sidekiq/cron/job.rb +34 -8
- data/lib/sidekiq/cron/locales/en.yml +2 -0
- data/lib/sidekiq/cron/poller.rb +1 -1
- data/lib/sidekiq/cron/version.rb +7 -0
- data/lib/sidekiq/cron/views/cron.erb +4 -4
- data/lib/sidekiq/cron/views/cron.slim +2 -2
- data/lib/sidekiq/cron/views/cron_show.erb +1 -1
- data/lib/sidekiq/cron/views/cron_show.slim +2 -2
- data/lib/sidekiq/cron.rb +1 -0
- data/sidekiq-cron.gemspec +28 -109
- data/test/integration/performance_test.rb +3 -3
- data/test/test_helper.rb +13 -13
- data/test/unit/job_test.rb +102 -0
- data/test/unit/poller_test.rb +1 -1
- data/test/unit/web_extension_test.rb +39 -38
- metadata +30 -158
- data/.travis.yml +0 -18
- data/VERSION +0 -1
@@ -1,12 +1,12 @@
|
|
1
1
|
<header class='row'>
|
2
2
|
<div class='col-sm-5 pull-left'>
|
3
|
-
<h3><%=t
|
3
|
+
<h3><%= t('CronJobs') %></h3>
|
4
4
|
</div>
|
5
5
|
<div class='col-sm-7 pull-right' style="margin-top: 20px; margin-bottom: 10px;">
|
6
6
|
<% if @cron_jobs.size > 0 %>
|
7
7
|
<form action="<%= root_path %>cron/__all__/delete" method="post" class="pull-right">
|
8
8
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
9
|
-
<input class="btn btn-small btn-danger" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSureDeleteCronJobs') %>"
|
9
|
+
<input class="btn btn-small btn-danger" type="submit" name="delete" value="<%= t('DeleteAll') %>" data-confirm="<%= t('AreYouSureDeleteCronJobs') %>" />
|
10
10
|
</form>
|
11
11
|
<form action="<%= root_path %>cron/__all__/disable" method="post" class="pull-right">
|
12
12
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
</form>
|
19
19
|
<form action="<%= root_path %>cron/__all__/enque" method="post" class="pull-right">
|
20
20
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
21
|
-
<input class="btn btn-small" type="submit" name="enque" value="<%= t('EnqueueAll') %>" />
|
21
|
+
<input class="btn btn-small" type="submit" name="enque" value="<%= t('EnqueueAll') %>" data-confirm="<%= t('AreYouSureEnqueueCronJobs') %>" />
|
22
22
|
</form>
|
23
23
|
<% end %>
|
24
24
|
</div>
|
@@ -61,7 +61,7 @@
|
|
61
61
|
<% if job.status == 'enabled' %>
|
62
62
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/enque" method="post">
|
63
63
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
64
|
-
<input class='btn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>"/>
|
64
|
+
<input class='btn btn-xs pull-left' type="submit" name="enque" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => job.name) %>"/>
|
65
65
|
</form>
|
66
66
|
<form action="<%= root_path %>cron/<%= CGI.escape(job.name).gsub('+', '%20') %>/disable" method="post">
|
67
67
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
@@ -15,7 +15,7 @@ header.row
|
|
15
15
|
input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnableAll')}"
|
16
16
|
form.pull-right action="#{root_path}cron/__all__/enque" method="post"
|
17
17
|
= csrf_tag if respond_to?(:csrf_tag)
|
18
|
-
input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnqueueAll')}"
|
18
|
+
input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnqueueAll')}" data-confirm="#{t('AreYouSureEnqueueCronJobs')}"
|
19
19
|
|
20
20
|
- if @cron_jobs.size > 0
|
21
21
|
|
@@ -59,7 +59,7 @@ header.row
|
|
59
59
|
-else
|
60
60
|
form action="#{root_path}cron/#{CGI.escape(job.name).gsub('+', '%20')}/enque" method="post"
|
61
61
|
= csrf_tag if respond_to?(:csrf_tag)
|
62
|
-
input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnqueueNow')}"
|
62
|
+
input.btn.btn-small.pull-left type="submit" name="enque" value="#{t('EnqueueNow')}" data-confirm="#{t('AreYouSureEnqueueCronJob', :job => job.name)}"
|
63
63
|
form action="#{root_path}cron/#{CGI.escape(job.name).gsub('+', '%20')}/enable" method="post"
|
64
64
|
= csrf_tag if respond_to?(:csrf_tag)
|
65
65
|
input.btn.btn-small.pull-left type="submit" name="enable" value="#{t('Enable')}"
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<% cron_job_path = "#{root_path}cron/#{CGI.escape(@job.name).gsub('+', '%20')}" %>
|
10
10
|
<form action="<%= cron_job_path %>/enque?redirect=<%= cron_job_path %>" class="pull-right" method="post">
|
11
11
|
<%= csrf_tag if respond_to?(:csrf_tag) %>
|
12
|
-
<input class="btn btn-small pull-left" name="enque" type="submit" value="<%= t('EnqueueNow') %>" />
|
12
|
+
<input class="btn btn-small pull-left" name="enque" type="submit" value="<%= t('EnqueueNow') %>" data-confirm="<%= t('AreYouSureEnqueueCronJob', :job => @job.name) %>" />
|
13
13
|
</form>
|
14
14
|
<% if @job.status == 'enabled' %>
|
15
15
|
<form action="<%= cron_job_path %>/disable?redirect=<%= cron_job_path %>" class="pull-right" method="post">
|
@@ -7,7 +7,7 @@ header.row
|
|
7
7
|
- cron_job_path = "#{root_path}cron/#{CGI.escape(@job.name).gsub('+', '%20')}"
|
8
8
|
form.pull-right action="#{cron_job_path}/enque?redirect=#{cron_job_path}" method="post"
|
9
9
|
= csrf_tag if respond_to?(:csrf_tag)
|
10
|
-
input.btn.btn-small.pull-left name="enque" type="submit" value="#{t('EnqueueNow')}"
|
10
|
+
input.btn.btn-small.pull-left data-confirm="#{t('AreYouSureEnqueueCronJob', :job => @job.name)}" name="enque" type="submit" value="#{t('EnqueueNow')}"
|
11
11
|
- if @job.status == 'enabled'
|
12
12
|
form.pull-right action="#{cron_job_path}/disable?redirect=#{cron_job_path}" method="post"
|
13
13
|
= csrf_tag if respond_to?(:csrf_tag)
|
@@ -18,7 +18,7 @@ header.row
|
|
18
18
|
input.btn.btn-small.pull-left name="enable" type="submit" value="#{t('Enable')}"
|
19
19
|
form.pull-right action="#{cron_job_path}/delete" method="post"
|
20
20
|
= csrf_tag if respond_to?(:csrf_tag)
|
21
|
-
input.btn.btn-danger.btn-small data-confirm="#{t('AreYouSureDeleteCronJob' job
|
21
|
+
input.btn.btn-danger.btn-small data-confirm="#{t('AreYouSureDeleteCronJob', :job => @job.name)}" name="delete" type="submit" value="#{t('Delete')}" /
|
22
22
|
|
23
23
|
table.table.table-bordered.table-striped
|
24
24
|
tbody
|
data/lib/sidekiq/cron.rb
CHANGED
data/sidekiq-cron.gemspec
CHANGED
@@ -1,129 +1,48 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: sidekiq-cron 1.2.0 ruby lib
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require './lib/sidekiq/cron/version'
|
6
4
|
|
7
5
|
Gem::Specification.new do |s|
|
8
6
|
s.name = "sidekiq-cron".freeze
|
9
|
-
s.version =
|
7
|
+
s.version = Sidekiq::Cron::VERSION
|
10
8
|
|
11
|
-
s.
|
12
|
-
s.require_paths = ["lib"
|
13
|
-
s.authors = ["Ondrej Bartas"
|
9
|
+
s.required_ruby_version = ">= 2.5"
|
10
|
+
s.require_paths = ["lib"]
|
11
|
+
s.authors = ["Ondrej Bartas"]
|
14
12
|
s.date = "2020-04-03"
|
15
|
-
s.description = "Enables to set jobs to be run in specified time (using CRON notation)"
|
16
|
-
s.email = "ondrej@bartas.cz"
|
13
|
+
s.description = "Enables to set jobs to be run in specified time (using CRON notation)"
|
14
|
+
s.email = "ondrej@bartas.cz"
|
17
15
|
s.extra_rdoc_files = [
|
18
16
|
"LICENSE.txt",
|
19
17
|
"README.md"
|
20
18
|
]
|
21
|
-
s.files = [
|
19
|
+
s.files = Dir.glob('lib/**/*') + Dir.glob('test/**/*') + [
|
22
20
|
".document",
|
23
|
-
".travis.yml",
|
24
21
|
"Changes.md",
|
25
22
|
"Dockerfile",
|
26
|
-
"Gemfile",
|
27
|
-
"LICENSE.txt",
|
28
|
-
"README.md",
|
29
|
-
"Rakefile",
|
30
|
-
"VERSION",
|
31
23
|
"config.ru",
|
32
24
|
"docker-compose.yml",
|
33
25
|
"examples/web-cron-ui.png",
|
34
|
-
"
|
35
|
-
"
|
36
|
-
"
|
37
|
-
"
|
38
|
-
"lib/sidekiq/cron/locales/de.yml",
|
39
|
-
"lib/sidekiq/cron/locales/en.yml",
|
40
|
-
"lib/sidekiq/cron/locales/ja.yml",
|
41
|
-
"lib/sidekiq/cron/locales/ru.yml",
|
42
|
-
"lib/sidekiq/cron/locales/zh-CN.yml",
|
43
|
-
"lib/sidekiq/cron/poller.rb",
|
44
|
-
"lib/sidekiq/cron/support.rb",
|
45
|
-
"lib/sidekiq/cron/views/cron.erb",
|
46
|
-
"lib/sidekiq/cron/views/cron.slim",
|
47
|
-
"lib/sidekiq/cron/views/cron_show.erb",
|
48
|
-
"lib/sidekiq/cron/views/cron_show.slim",
|
49
|
-
"lib/sidekiq/cron/web.rb",
|
50
|
-
"lib/sidekiq/cron/web_extension.rb",
|
26
|
+
"Gemfile",
|
27
|
+
"LICENSE.txt",
|
28
|
+
"Rakefile",
|
29
|
+
"README.md",
|
51
30
|
"sidekiq-cron.gemspec",
|
52
|
-
"test/integration/performance_test.rb",
|
53
|
-
"test/test_helper.rb",
|
54
|
-
"test/unit/job_test.rb",
|
55
|
-
"test/unit/poller_test.rb",
|
56
|
-
"test/unit/web_extension_test.rb"
|
57
31
|
]
|
58
|
-
|
59
|
-
s.
|
60
|
-
s.
|
61
|
-
s.summary = "Sidekiq Cron helps to add repeated scheduled jobs"
|
32
|
+
|
33
|
+
s.homepage = "https://github.com/ondrejbartas/sidekiq-cron"
|
34
|
+
s.licenses = ["MIT"]
|
35
|
+
s.summary = "Sidekiq Cron helps to add repeated scheduled jobs"
|
62
36
|
|
63
|
-
|
64
|
-
|
37
|
+
s.add_dependency("fugit", ">= 1.1")
|
38
|
+
s.add_dependency("sidekiq", ">= 4.2.1")
|
65
39
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
s.add_development_dependency(%q<rack-test>.freeze, [">= 0"])
|
75
|
-
s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
|
76
|
-
s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
|
77
|
-
s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
|
78
|
-
s.add_development_dependency(%q<sdoc>.freeze, [">= 0"])
|
79
|
-
s.add_development_dependency(%q<slim>.freeze, [">= 0"])
|
80
|
-
s.add_development_dependency(%q<sinatra>.freeze, [">= 0"])
|
81
|
-
s.add_development_dependency(%q<mocha>.freeze, [">= 0"])
|
82
|
-
s.add_development_dependency(%q<coveralls>.freeze, [">= 0"])
|
83
|
-
s.add_development_dependency(%q<shotgun>.freeze, [">= 0"])
|
84
|
-
s.add_development_dependency(%q<guard>.freeze, [">= 0"])
|
85
|
-
s.add_development_dependency(%q<guard-minitest>.freeze, [">= 0"])
|
86
|
-
else
|
87
|
-
s.add_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
|
88
|
-
s.add_dependency(%q<fugit>.freeze, ["~> 1.1"])
|
89
|
-
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
90
|
-
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
91
|
-
s.add_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
|
92
|
-
s.add_dependency(%q<shoulda-context>.freeze, [">= 0"])
|
93
|
-
s.add_dependency(%q<rack>.freeze, [">= 0"])
|
94
|
-
s.add_dependency(%q<rack-test>.freeze, [">= 0"])
|
95
|
-
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
96
|
-
s.add_dependency(%q<minitest>.freeze, [">= 0"])
|
97
|
-
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
98
|
-
s.add_dependency(%q<sdoc>.freeze, [">= 0"])
|
99
|
-
s.add_dependency(%q<slim>.freeze, [">= 0"])
|
100
|
-
s.add_dependency(%q<sinatra>.freeze, [">= 0"])
|
101
|
-
s.add_dependency(%q<mocha>.freeze, [">= 0"])
|
102
|
-
s.add_dependency(%q<coveralls>.freeze, [">= 0"])
|
103
|
-
s.add_dependency(%q<shotgun>.freeze, [">= 0"])
|
104
|
-
s.add_dependency(%q<guard>.freeze, [">= 0"])
|
105
|
-
s.add_dependency(%q<guard-minitest>.freeze, [">= 0"])
|
106
|
-
end
|
107
|
-
else
|
108
|
-
s.add_dependency(%q<sidekiq>.freeze, [">= 4.2.1"])
|
109
|
-
s.add_dependency(%q<fugit>.freeze, ["~> 1.1"])
|
110
|
-
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
111
|
-
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
112
|
-
s.add_dependency(%q<redis-namespace>.freeze, [">= 1.5.2"])
|
113
|
-
s.add_dependency(%q<shoulda-context>.freeze, [">= 0"])
|
114
|
-
s.add_dependency(%q<rack>.freeze, [">= 0"])
|
115
|
-
s.add_dependency(%q<rack-test>.freeze, [">= 0"])
|
116
|
-
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
117
|
-
s.add_dependency(%q<minitest>.freeze, [">= 0"])
|
118
|
-
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
119
|
-
s.add_dependency(%q<sdoc>.freeze, [">= 0"])
|
120
|
-
s.add_dependency(%q<slim>.freeze, [">= 0"])
|
121
|
-
s.add_dependency(%q<sinatra>.freeze, [">= 0"])
|
122
|
-
s.add_dependency(%q<mocha>.freeze, [">= 0"])
|
123
|
-
s.add_dependency(%q<coveralls>.freeze, [">= 0"])
|
124
|
-
s.add_dependency(%q<shotgun>.freeze, [">= 0"])
|
125
|
-
s.add_dependency(%q<guard>.freeze, [">= 0"])
|
126
|
-
s.add_dependency(%q<guard-minitest>.freeze, [">= 0"])
|
127
|
-
end
|
40
|
+
s.add_development_dependency("minitest", ">= 0")
|
41
|
+
s.add_development_dependency("mocha", ">= 0")
|
42
|
+
s.add_development_dependency("redis-namespace", ">= 1.5.2")
|
43
|
+
s.add_development_dependency("rack", "~> 2.0")
|
44
|
+
s.add_development_dependency("rack-test", "~> 1.0")
|
45
|
+
s.add_development_dependency("rake", "~> 13.0")
|
46
|
+
s.add_development_dependency("shoulda-context", ">= 0")
|
47
|
+
s.add_development_dependency("simplecov", ">= 0")
|
128
48
|
end
|
129
|
-
|
@@ -5,8 +5,8 @@ require 'benchmark'
|
|
5
5
|
describe 'Performance Poller' do
|
6
6
|
X = 10000
|
7
7
|
before do
|
8
|
+
REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
|
8
9
|
Sidekiq.redis = REDIS
|
9
|
-
Redis.current.flushdb
|
10
10
|
|
11
11
|
#clear all previous saved data from redis
|
12
12
|
Sidekiq.redis do |conn|
|
@@ -31,7 +31,7 @@ describe 'Performance Poller' do
|
|
31
31
|
Time.stubs(:now).returns(enqueued_time)
|
32
32
|
end
|
33
33
|
|
34
|
-
it 'should enqueue 10000 jobs in less than
|
34
|
+
it 'should enqueue 10000 jobs in less than 50s' do
|
35
35
|
Sidekiq.redis do |conn|
|
36
36
|
assert_equal 0, conn.llen("queue:default"), 'Queue should be empty'
|
37
37
|
end
|
@@ -45,6 +45,6 @@ describe 'Performance Poller' do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
puts "Performance test finished in #{bench.real}"
|
48
|
-
assert_operator bench.real, :<,
|
48
|
+
assert_operator bench.real, :<, 50
|
49
49
|
end
|
50
50
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,12 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'bundler'
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
1
|
+
$TESTING = true
|
10
2
|
|
11
3
|
require 'simplecov'
|
12
4
|
SimpleCov.start do
|
@@ -14,8 +6,6 @@ SimpleCov.start do
|
|
14
6
|
|
15
7
|
add_group 'SidekiqCron', 'lib/'
|
16
8
|
end
|
17
|
-
require 'coveralls'
|
18
|
-
Coveralls.wear!
|
19
9
|
|
20
10
|
require "minitest/autorun"
|
21
11
|
require 'shoulda-context'
|
@@ -26,12 +16,15 @@ ENV['RACK_ENV'] = 'test'
|
|
26
16
|
|
27
17
|
#SIDEKIQ Require - need to have sidekiq running!
|
28
18
|
require 'sidekiq'
|
29
|
-
require
|
19
|
+
require "sidekiq-pro" if ENV['SIDEKIQ_PRO_VERSION']
|
20
|
+
require "sidekiq/processor"
|
21
|
+
require "sidekiq/fetch"
|
22
|
+
require "sidekiq/cli"
|
23
|
+
|
30
24
|
require 'sidekiq/web'
|
31
25
|
|
32
26
|
Sidekiq.logger.level = Logger::ERROR
|
33
27
|
|
34
|
-
require 'sidekiq/redis_connection'
|
35
28
|
redis_url = ENV['REDIS_URL'] || 'redis://0.0.0.0:6379'
|
36
29
|
REDIS = Sidekiq::RedisConnection.create(:url => redis_url, :namespace => 'testy')
|
37
30
|
|
@@ -46,6 +39,13 @@ require 'sidekiq-cron'
|
|
46
39
|
require 'sidekiq/cron/web'
|
47
40
|
require 'pp'
|
48
41
|
|
42
|
+
# For testing os symbilize args!
|
43
|
+
class Hash
|
44
|
+
def symbolize_keys
|
45
|
+
transform_keys { |key| key.to_sym rescue key }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
49
|
class CronTestClass
|
50
50
|
include Sidekiq::Worker
|
51
51
|
sidekiq_options retry: true
|
data/test/unit/job_test.rb
CHANGED
@@ -363,6 +363,108 @@ describe "Cron Job" do
|
|
363
363
|
end
|
364
364
|
end
|
365
365
|
|
366
|
+
describe '#active_job_message - unknown Active Job Worker class' do
|
367
|
+
before do
|
368
|
+
SecureRandom.stubs(:uuid).returns('XYZ')
|
369
|
+
ActiveJob::Base.queue_name_prefix = ''
|
370
|
+
|
371
|
+
@args = {
|
372
|
+
name: 'Test',
|
373
|
+
cron: '* * * * *',
|
374
|
+
klass: 'UnknownActiveJobCronTestClass',
|
375
|
+
active_job: true,
|
376
|
+
queue: 'super_queue',
|
377
|
+
description: nil,
|
378
|
+
args: { foo: 'bar' }
|
379
|
+
}
|
380
|
+
@job = Sidekiq::Cron::Job.new(@args)
|
381
|
+
end
|
382
|
+
|
383
|
+
it 'should return valid payload for Sidekiq::Client' do
|
384
|
+
payload = {
|
385
|
+
'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
|
386
|
+
'wrapped' => 'UnknownActiveJobCronTestClass',
|
387
|
+
'queue' => 'super_queue',
|
388
|
+
'description' => nil,
|
389
|
+
'args' => [{
|
390
|
+
'job_class' => 'UnknownActiveJobCronTestClass',
|
391
|
+
'job_id' => 'XYZ',
|
392
|
+
'queue_name' => 'super_queue',
|
393
|
+
'arguments' => [{foo: 'bar'}]
|
394
|
+
}]
|
395
|
+
}
|
396
|
+
assert_equal @job.active_job_message, payload
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
describe '#active_job_message with symbolize_args (hash)' do
|
401
|
+
before do
|
402
|
+
SecureRandom.stubs(:uuid).returns('XYZ')
|
403
|
+
ActiveJob::Base.queue_name_prefix = ''
|
404
|
+
|
405
|
+
@args = {
|
406
|
+
name: 'Test',
|
407
|
+
cron: '* * * * *',
|
408
|
+
klass: 'ActiveJobCronTestClass',
|
409
|
+
queue: 'super_queue',
|
410
|
+
description: nil,
|
411
|
+
symbolize_args: true,
|
412
|
+
args: { 'foo' => 'bar' }
|
413
|
+
}
|
414
|
+
@job = Sidekiq::Cron::Job.new(@args)
|
415
|
+
end
|
416
|
+
|
417
|
+
it 'should return valid payload for Sidekiq::Client' do
|
418
|
+
payload = {
|
419
|
+
'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
|
420
|
+
'wrapped' => 'ActiveJobCronTestClass',
|
421
|
+
'queue' => 'super_queue',
|
422
|
+
'description' => nil,
|
423
|
+
'args' => [{
|
424
|
+
'job_class' => 'ActiveJobCronTestClass',
|
425
|
+
'job_id' => 'XYZ',
|
426
|
+
'queue_name' => 'super_queue',
|
427
|
+
'arguments' => [{foo: 'bar'}]
|
428
|
+
}]
|
429
|
+
}
|
430
|
+
assert_equal @job.active_job_message, payload
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
describe '#active_job_message with symbolize_args (array)' do
|
435
|
+
before do
|
436
|
+
SecureRandom.stubs(:uuid).returns('XYZ')
|
437
|
+
ActiveJob::Base.queue_name_prefix = ''
|
438
|
+
|
439
|
+
@args = {
|
440
|
+
name: 'Test',
|
441
|
+
cron: '* * * * *',
|
442
|
+
klass: 'ActiveJobCronTestClass',
|
443
|
+
queue: 'super_queue',
|
444
|
+
description: nil,
|
445
|
+
symbolize_args: true,
|
446
|
+
args: [{ 'foo' => 'bar' }]
|
447
|
+
}
|
448
|
+
@job = Sidekiq::Cron::Job.new(@args)
|
449
|
+
end
|
450
|
+
|
451
|
+
it 'should return valid payload for Sidekiq::Client' do
|
452
|
+
payload = {
|
453
|
+
'class' => 'ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper',
|
454
|
+
'wrapped' => 'ActiveJobCronTestClass',
|
455
|
+
'queue' => 'super_queue',
|
456
|
+
'description' => nil,
|
457
|
+
'args' => [{
|
458
|
+
'job_class' => 'ActiveJobCronTestClass',
|
459
|
+
'job_id' => 'XYZ',
|
460
|
+
'queue_name' => 'super_queue',
|
461
|
+
'arguments' => [{foo: 'bar'}]
|
462
|
+
}]
|
463
|
+
}
|
464
|
+
assert_equal @job.active_job_message, payload
|
465
|
+
end
|
466
|
+
end
|
467
|
+
|
366
468
|
describe '#active_job_message with queue_name_prefix' do
|
367
469
|
before do
|
368
470
|
SecureRandom.stubs(:uuid).returns('XYZ')
|
data/test/unit/poller_test.rb
CHANGED
@@ -4,8 +4,8 @@ require './test/test_helper'
|
|
4
4
|
|
5
5
|
describe 'Cron Poller' do
|
6
6
|
before do
|
7
|
+
REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
|
7
8
|
Sidekiq.redis = REDIS
|
8
|
-
Redis.current.flushdb
|
9
9
|
|
10
10
|
#clear all previous saved data from redis
|
11
11
|
Sidekiq.redis do |conn|
|
@@ -1,37 +1,40 @@
|
|
1
1
|
require './test/test_helper'
|
2
|
-
|
3
|
-
def app
|
4
|
-
Sidekiq::Web
|
5
|
-
end
|
2
|
+
require 'sidekiq/web'
|
6
3
|
|
7
4
|
describe 'Cron web' do
|
8
5
|
include Rack::Test::Methods
|
9
6
|
|
7
|
+
TOKEN = SecureRandom.base64(32).freeze
|
8
|
+
|
9
|
+
def app
|
10
|
+
Sidekiq::Web
|
11
|
+
end
|
12
|
+
|
10
13
|
before do
|
14
|
+
env 'rack.session', { csrf: TOKEN }
|
15
|
+
env 'HTTP_X_CSRF_TOKEN', TOKEN
|
16
|
+
REDIS.with { |c| c.respond_to?(:redis) ? c.redis.flushdb : c.flushdb }
|
11
17
|
Sidekiq.redis = REDIS
|
12
|
-
|
18
|
+
end
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
conn.keys("cron_job*").each do |key|
|
17
|
-
conn.del(key)
|
18
|
-
end
|
19
|
-
end
|
20
|
+
let(:job_name) { "TestNameOfCronJob" }
|
21
|
+
let(:cron_job_name) { "TesQueueNameOfCronJob" }
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
+
let(:args) do
|
24
|
+
{
|
25
|
+
name: job_name,
|
23
26
|
cron: "*/2 * * * *",
|
24
27
|
klass: "CronTestClass"
|
25
28
|
}
|
29
|
+
end
|
26
30
|
|
27
|
-
|
28
|
-
|
29
|
-
name:
|
31
|
+
let(:cron_args) do
|
32
|
+
{
|
33
|
+
name: cron_job_name,
|
30
34
|
cron: "*/2 * * * *",
|
31
35
|
klass: "CronQueueTestClass",
|
32
36
|
queue: "cron"
|
33
37
|
}
|
34
|
-
|
35
38
|
end
|
36
39
|
|
37
40
|
it 'display cron web' do
|
@@ -45,7 +48,7 @@ describe 'Cron web' do
|
|
45
48
|
end
|
46
49
|
|
47
50
|
it 'display cron web with cron jobs table' do
|
48
|
-
Sidekiq::Cron::Job.create(
|
51
|
+
Sidekiq::Cron::Job.create(args)
|
49
52
|
|
50
53
|
get '/cron'
|
51
54
|
assert_equal 200, last_response.status
|
@@ -55,27 +58,25 @@ describe 'Cron web' do
|
|
55
58
|
end
|
56
59
|
|
57
60
|
describe "work with cron job" do
|
58
|
-
|
59
61
|
before do
|
60
|
-
@job = Sidekiq::Cron::Job.new(
|
61
|
-
@job.save
|
62
|
-
@name = "TestNameOfCronJob"
|
62
|
+
@job = Sidekiq::Cron::Job.new(args.merge(status: "enabled"))
|
63
|
+
assert @job.save
|
63
64
|
|
64
|
-
@cron_job = Sidekiq::Cron::Job.new(
|
65
|
-
@cron_job.save
|
66
|
-
@cron_job_name = "TesQueueNameOfCronJob"
|
65
|
+
@cron_job = Sidekiq::Cron::Job.new(cron_args.merge(status: "enabled"))
|
66
|
+
assert @cron_job.save
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'shows history of a cron job' do
|
70
70
|
@job.enque!
|
71
|
-
get "/cron/#{
|
71
|
+
get "/cron/#{job_name}"
|
72
72
|
|
73
73
|
jid =
|
74
74
|
Sidekiq.redis do |conn|
|
75
|
-
history = conn.lrange Sidekiq::Cron::Job.jid_history_key(
|
75
|
+
history = conn.lrange Sidekiq::Cron::Job.jid_history_key(job_name), 0, -1
|
76
76
|
Sidekiq.load_json(history.last)['jid']
|
77
77
|
end
|
78
78
|
|
79
|
+
assert jid
|
79
80
|
assert last_response.body.include?(jid)
|
80
81
|
end
|
81
82
|
|
@@ -87,18 +88,18 @@ describe 'Cron web' do
|
|
87
88
|
|
88
89
|
it "disable and enable all cron jobs" do
|
89
90
|
post "/cron/__all__/disable"
|
90
|
-
assert_equal Sidekiq::Cron::Job.find(
|
91
|
+
assert_equal Sidekiq::Cron::Job.find(job_name).status, "disabled"
|
91
92
|
|
92
93
|
post "/cron/__all__/enable"
|
93
|
-
assert_equal Sidekiq::Cron::Job.find(
|
94
|
+
assert_equal Sidekiq::Cron::Job.find(job_name).status, "enabled"
|
94
95
|
end
|
95
96
|
|
96
97
|
it "disable and enable cron job" do
|
97
|
-
post "/cron/#{
|
98
|
-
assert_equal Sidekiq::Cron::Job.find(
|
98
|
+
post "/cron/#{job_name}/disable"
|
99
|
+
assert_equal Sidekiq::Cron::Job.find(job_name).status, "disabled"
|
99
100
|
|
100
|
-
post "/cron/#{
|
101
|
-
assert_equal Sidekiq::Cron::Job.find(
|
101
|
+
post "/cron/#{job_name}/enable"
|
102
|
+
assert_equal Sidekiq::Cron::Job.find(job_name).status, "enabled"
|
102
103
|
end
|
103
104
|
|
104
105
|
it "enqueue all jobs" do
|
@@ -119,21 +120,21 @@ describe 'Cron web' do
|
|
119
120
|
assert_equal 0, conn.llen("queue:default"), "Queue should have no jobs"
|
120
121
|
end
|
121
122
|
|
122
|
-
post "/cron/#{
|
123
|
+
post "/cron/#{job_name}/enque"
|
123
124
|
|
124
125
|
Sidekiq.redis do |conn|
|
125
126
|
assert_equal 1, conn.llen("queue:default"), "Queue should have 1 job"
|
126
127
|
end
|
127
128
|
|
128
129
|
#should enqueue more times
|
129
|
-
post "/cron/#{
|
130
|
+
post "/cron/#{job_name}/enque"
|
130
131
|
|
131
132
|
Sidekiq.redis do |conn|
|
132
133
|
assert_equal 2, conn.llen("queue:default"), "Queue should have 2 job"
|
133
134
|
end
|
134
135
|
|
135
136
|
#should enqueue to cron job queue
|
136
|
-
post "/cron/#{
|
137
|
+
post "/cron/#{cron_job_name}/enque"
|
137
138
|
|
138
139
|
Sidekiq.redis do |conn|
|
139
140
|
assert_equal 1, conn.llen("queue:cron"), "Queue should have 1 cron job"
|
@@ -142,8 +143,8 @@ describe 'Cron web' do
|
|
142
143
|
|
143
144
|
it "destroy job" do
|
144
145
|
assert_equal Sidekiq::Cron::Job.all.size, 2, "Should have 2 job"
|
145
|
-
post "/cron/#{
|
146
|
-
post "/cron/#{
|
146
|
+
post "/cron/#{job_name}/delete"
|
147
|
+
post "/cron/#{cron_job_name}/delete"
|
147
148
|
assert_equal Sidekiq::Cron::Job.all.size, 0, "Should have zero jobs"
|
148
149
|
end
|
149
150
|
|