workhorse 0.0.1 → 0.0.2

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.
@@ -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