workhorse 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,117 @@
1
+ require 'test_helper'
2
+
3
+ class Workhorse::WorkerTest < WorkhorseTest
4
+ def test_idle
5
+ w = Workhorse::Worker.new(pool_size: 5, polling_interval: 1)
6
+ w.start
7
+ assert_equal 5, w.idle
8
+
9
+ Workhorse::Enqueuer.enqueue BasicJob.new(sleep_time: 3)
10
+
11
+ sleep 2
12
+ assert_equal 4, w.idle
13
+
14
+ sleep 3
15
+ assert_equal 5, w.idle
16
+
17
+ w.shutdown
18
+ end
19
+
20
+ def test_start_and_shutdown
21
+ w = Workhorse::Worker.new
22
+ w.start
23
+ w.assert_state! :running
24
+
25
+ assert_raises RuntimeError do
26
+ w.start
27
+ end
28
+
29
+ w.shutdown
30
+ w.shutdown # Should be ignored
31
+
32
+ Workhorse::Enqueuer.enqueue BasicJob.new
33
+ end
34
+
35
+ def test_perform
36
+ w = Workhorse::Worker.new polling_interval: 1
37
+ Workhorse::Enqueuer.enqueue BasicJob.new
38
+ assert_equal 'waiting', Workhorse::DbJob.first.state
39
+
40
+ w.start
41
+ sleep 2
42
+ w.shutdown
43
+
44
+ assert_equal 'succeeded', Workhorse::DbJob.first.state
45
+ end
46
+
47
+ def test_params
48
+ BasicJob.results.clear
49
+
50
+ Workhorse::Enqueuer.enqueue BasicJob.new(some_param: 5)
51
+ w = Workhorse::Worker.new polling_interval: 1
52
+ w.start
53
+ sleep 2
54
+ w.shutdown
55
+
56
+ assert_equal 'succeeded', Workhorse::DbJob.first.state
57
+
58
+ assert_equal 1, BasicJob.results.count
59
+ assert_equal 5, BasicJob.results.first
60
+ end
61
+
62
+ def test_term
63
+ w = Workhorse::Worker.new
64
+ w.start
65
+ Process.kill 'TERM', Process.pid
66
+ sleep 1
67
+ w.assert_state! :shutdown
68
+ w.shutdown
69
+ end
70
+
71
+ def test_int
72
+ w = Workhorse::Worker.new
73
+ w.start
74
+ Process.kill 'INT', Process.pid
75
+ sleep 1
76
+ w.assert_state! :shutdown
77
+ w.shutdown
78
+ end
79
+
80
+ def test_no_queues
81
+ enqueue_in_multiple_queues
82
+ work 3, queues: [nil, :q1]
83
+
84
+ jobs = Workhorse::DbJob.order(queue: :asc).to_a
85
+ assert_equal 'succeeded', jobs[0].state
86
+ assert_equal 'succeeded', jobs[1].state
87
+ assert_equal 'waiting', jobs[2].state
88
+ end
89
+
90
+ def test_queues_with_nil
91
+ enqueue_in_multiple_queues
92
+ work 3, queues: [nil, :q1]
93
+
94
+ jobs = Workhorse::DbJob.order(queue: :asc).to_a
95
+ assert_equal 'succeeded', jobs[0].state
96
+ assert_equal 'succeeded', jobs[1].state
97
+ assert_equal 'waiting', jobs[2].state
98
+ end
99
+
100
+ def test_queues_without_nil
101
+ enqueue_in_multiple_queues
102
+ work 3, queues: %i[q1 q2]
103
+
104
+ jobs = Workhorse::DbJob.order(queue: :asc).to_a
105
+ assert_equal 'waiting', jobs[0].state
106
+ assert_equal 'succeeded', jobs[1].state
107
+ assert_equal 'succeeded', jobs[2].state
108
+ end
109
+
110
+ private
111
+
112
+ def enqueue_in_multiple_queues
113
+ Workhorse::Enqueuer.enqueue BasicJob.new(some_param: nil)
114
+ Workhorse::Enqueuer.enqueue BasicJob.new(some_param: :q1), queue: :q1
115
+ Workhorse::Enqueuer.enqueue BasicJob.new(some_param: :q2), queue: :q2
116
+ end
117
+ end
data/workhorse.gemspec ADDED
@@ -0,0 +1,55 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # stub: workhorse 0.0.2 ruby lib
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "workhorse".freeze
6
+ s.version = "0.0.2"
7
+
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib".freeze]
10
+ s.authors = ["Sitrox".freeze]
11
+ s.date = "2017-12-14"
12
+ s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/rubocop".freeze, "lib/generators/workhorse/install_generator.rb".freeze, "lib/generators/workhorse/templates/bin/workhorse.rb".freeze, "lib/generators/workhorse/templates/config/initializers/workhorse.rb".freeze, "lib/generators/workhorse/templates/create_table_jobs.rb".freeze, "lib/workhorse.rb".freeze, "lib/workhorse/daemon.rb".freeze, "lib/workhorse/daemon/shell_handler.rb".freeze, "lib/workhorse/db_job.rb".freeze, "lib/workhorse/enqueuer.rb".freeze, "lib/workhorse/jobs/run_rails_op.rb".freeze, "lib/workhorse/performer.rb".freeze, "lib/workhorse/poller.rb".freeze, "lib/workhorse/pool.rb".freeze, "lib/workhorse/worker.rb".freeze, "test/lib/db_schema.rb".freeze, "test/lib/jobs.rb".freeze, "test/lib/test_helper.rb".freeze, "test/workhorse/enqueuer_test.rb".freeze, "test/workhorse/performer_test.rb".freeze, "test/workhorse/poller_test.rb".freeze, "test/workhorse/pool_test.rb".freeze, "test/workhorse/worker_test.rb".freeze, "workhorse.gemspec".freeze]
13
+ s.rubygems_version = "2.6.14".freeze
14
+ s.summary = "Multi-threaded job backend with database queuing for ruby.".freeze
15
+ s.test_files = ["test/lib/db_schema.rb".freeze, "test/lib/jobs.rb".freeze, "test/lib/test_helper.rb".freeze, "test/workhorse/enqueuer_test.rb".freeze, "test/workhorse/performer_test.rb".freeze, "test/workhorse/poller_test.rb".freeze, "test/workhorse/pool_test.rb".freeze, "test/workhorse/worker_test.rb".freeze]
16
+
17
+ if s.respond_to? :specification_version then
18
+ s.specification_version = 4
19
+
20
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
21
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 1.3"])
22
+ s.add_development_dependency(%q<rake>.freeze, [">= 0"])
23
+ s.add_development_dependency(%q<rubocop>.freeze, ["= 0.51.0"])
24
+ s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
25
+ s.add_development_dependency(%q<mysql2>.freeze, ["~> 0.3.13"])
26
+ s.add_development_dependency(%q<benchmark-ips>.freeze, [">= 0"])
27
+ s.add_runtime_dependency(%q<activesupport>.freeze, [">= 0"])
28
+ s.add_runtime_dependency(%q<activerecord>.freeze, [">= 0"])
29
+ s.add_runtime_dependency(%q<schemacop>.freeze, ["~> 2.0"])
30
+ s.add_runtime_dependency(%q<concurrent-ruby>.freeze, [">= 0"])
31
+ else
32
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.3"])
33
+ s.add_dependency(%q<rake>.freeze, [">= 0"])
34
+ s.add_dependency(%q<rubocop>.freeze, ["= 0.51.0"])
35
+ s.add_dependency(%q<minitest>.freeze, [">= 0"])
36
+ s.add_dependency(%q<mysql2>.freeze, ["~> 0.3.13"])
37
+ s.add_dependency(%q<benchmark-ips>.freeze, [">= 0"])
38
+ s.add_dependency(%q<activesupport>.freeze, [">= 0"])
39
+ s.add_dependency(%q<activerecord>.freeze, [">= 0"])
40
+ s.add_dependency(%q<schemacop>.freeze, ["~> 2.0"])
41
+ s.add_dependency(%q<concurrent-ruby>.freeze, [">= 0"])
42
+ end
43
+ else
44
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.3"])
45
+ s.add_dependency(%q<rake>.freeze, [">= 0"])
46
+ s.add_dependency(%q<rubocop>.freeze, ["= 0.51.0"])
47
+ s.add_dependency(%q<minitest>.freeze, [">= 0"])
48
+ s.add_dependency(%q<mysql2>.freeze, ["~> 0.3.13"])
49
+ s.add_dependency(%q<benchmark-ips>.freeze, [">= 0"])
50
+ s.add_dependency(%q<activesupport>.freeze, [">= 0"])
51
+ s.add_dependency(%q<activerecord>.freeze, [">= 0"])
52
+ s.add_dependency(%q<schemacop>.freeze, ["~> 2.0"])
53
+ s.add_dependency(%q<concurrent-ruby>.freeze, [">= 0"])
54
+ end
55
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: workhorse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-06 00:00:00.000000000 Z
11
+ date: 2017-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.35.1
47
+ version: 0.51.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.35.1
54
+ version: 0.51.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,48 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mysql2
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.3.13
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.3.13
83
+ - !ruby/object:Gem::Dependency
84
+ name: benchmark-ips
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: activerecord
71
113
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +136,20 @@ dependencies:
94
136
  - - "~>"
95
137
  - !ruby/object:Gem::Version
96
138
  version: '2.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: concurrent-ruby
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
97
153
  description:
98
154
  email:
99
155
  executables: []
@@ -101,11 +157,39 @@ extensions: []
101
157
  extra_rdoc_files: []
102
158
  files:
103
159
  - ".gitignore"
160
+ - ".releaser_config"
161
+ - ".rubocop.yml"
162
+ - ".travis.yml"
104
163
  - Gemfile
105
164
  - LICENSE
106
165
  - README.md
107
166
  - RUBY_VERSION
167
+ - Rakefile
108
168
  - VERSION
169
+ - bin/rubocop
170
+ - lib/generators/workhorse/install_generator.rb
171
+ - lib/generators/workhorse/templates/bin/workhorse.rb
172
+ - lib/generators/workhorse/templates/config/initializers/workhorse.rb
173
+ - lib/generators/workhorse/templates/create_table_jobs.rb
174
+ - lib/workhorse.rb
175
+ - lib/workhorse/daemon.rb
176
+ - lib/workhorse/daemon/shell_handler.rb
177
+ - lib/workhorse/db_job.rb
178
+ - lib/workhorse/enqueuer.rb
179
+ - lib/workhorse/jobs/run_rails_op.rb
180
+ - lib/workhorse/performer.rb
181
+ - lib/workhorse/poller.rb
182
+ - lib/workhorse/pool.rb
183
+ - lib/workhorse/worker.rb
184
+ - test/lib/db_schema.rb
185
+ - test/lib/jobs.rb
186
+ - test/lib/test_helper.rb
187
+ - test/workhorse/enqueuer_test.rb
188
+ - test/workhorse/performer_test.rb
189
+ - test/workhorse/poller_test.rb
190
+ - test/workhorse/pool_test.rb
191
+ - test/workhorse/worker_test.rb
192
+ - workhorse.gemspec
109
193
  homepage:
110
194
  licenses: []
111
195
  metadata: {}
@@ -129,4 +213,12 @@ rubygems_version: 2.6.14
129
213
  signing_key:
130
214
  specification_version: 4
131
215
  summary: Multi-threaded job backend with database queuing for ruby.
132
- test_files: []
216
+ test_files:
217
+ - test/lib/db_schema.rb
218
+ - test/lib/jobs.rb
219
+ - test/lib/test_helper.rb
220
+ - test/workhorse/enqueuer_test.rb
221
+ - test/workhorse/performer_test.rb
222
+ - test/workhorse/poller_test.rb
223
+ - test/workhorse/pool_test.rb
224
+ - test/workhorse/worker_test.rb