shoryuken 0.0.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Shoryuken::Topic do
4
+ let(:sns) { Aws::SNS::Client.new stub_responses: true }
5
+ let(:topic_arn) { 'arn:aws:sns:us-east-1:0987654321:shoryuken' }
6
+ let(:topic_name) { 'shoryuken' }
7
+
8
+ before do
9
+ Shoryuken::Client.account_id = '0987654321'
10
+ Aws.config = { region: 'us-east-1' }
11
+ end
12
+
13
+ subject { described_class.new(topic_name, sns) }
14
+
15
+ describe '#send_message' do
16
+ it 'enqueues a message' do
17
+ sns.stub_responses(:publish, { message_id: 'msg1' })
18
+ expect(sns).to receive(:publish).with(topic_arn: topic_arn, message: 'test')
19
+
20
+ subject.send_message('test')
21
+ end
22
+
23
+ it 'parses as JSON by default' do
24
+ msg = { field: 'test', other_field: 'other' }
25
+
26
+ sns.stub_responses(:publish, { message_id: 'msg2' })
27
+ expect(sns).to receive(:publish).with(topic_arn: topic_arn, message: JSON.dump(msg))
28
+
29
+ subject.send_message(msg)
30
+ end
31
+ end
32
+ end
@@ -16,7 +16,9 @@ describe 'Shoryuken::Util' do
16
16
  end
17
17
 
18
18
  describe '#worker_name' do
19
- let(:sqs_msg) { double AWS::SQS::ReceivedMessage, id: 'fc754df7-9cc2-4c41-96ca-5996a44b771e', message_attributes: {} }
19
+ let(:sqs_msg) do
20
+ double Aws::SQS::Message, message_id: 'fc754df7-9cc2-4c41-96ca-5996a44b771e', message_attributes: {}
21
+ end
20
22
 
21
23
  it 'returns Shoryuken worker name' do
22
24
  expect(subject.worker_name(TestWorker, sqs_msg)).to eq 'TestWorker'
@@ -10,15 +10,15 @@ describe 'Shoryuken::Worker' do
10
10
 
11
11
  describe '.perform_in' do
12
12
  it 'delays a message' do
13
- expect(sqs_queue).to receive(:send_message).with('message', {
13
+ expect(sqs_queue).to receive(:send_message).with(
14
14
  message_attributes: {
15
15
  'shoryuken_class' => {
16
16
  string_value: TestWorker.to_s,
17
17
  data_type: 'String'
18
18
  }
19
19
  },
20
- delay_seconds: 60
21
- })
20
+ message_body: 'message',
21
+ delay_seconds: 60)
22
22
 
23
23
  TestWorker.perform_in(60, 'message')
24
24
  end
@@ -32,15 +32,15 @@ describe 'Shoryuken::Worker' do
32
32
 
33
33
  describe '.perform_at' do
34
34
  it 'delays a message' do
35
- expect(sqs_queue).to receive(:send_message).with('message', {
35
+ expect(sqs_queue).to receive(:send_message).with(
36
36
  message_attributes: {
37
37
  'shoryuken_class' => {
38
38
  string_value: TestWorker.to_s,
39
39
  data_type: 'String'
40
40
  }
41
41
  },
42
- delay_seconds: 60
43
- })
42
+ message_body: 'message',
43
+ delay_seconds: 60)
44
44
 
45
45
  TestWorker.perform_in(Time.now + 60, 'message')
46
46
  end
@@ -54,28 +54,41 @@ describe 'Shoryuken::Worker' do
54
54
 
55
55
  describe '.perform_async' do
56
56
  it 'enqueues a message' do
57
- expect(sqs_queue).to receive(:send_message).with('message', {
57
+ expect(sqs_queue).to receive(:send_message).with(
58
58
  message_attributes: {
59
59
  'shoryuken_class' => {
60
60
  string_value: TestWorker.to_s,
61
61
  data_type: 'String'
62
62
  }
63
- }
64
- })
63
+ },
64
+ message_body: 'message')
65
65
 
66
66
  TestWorker.perform_async('message')
67
67
  end
68
68
 
69
+ it 'enqueues a message given as hash' do
70
+ expect(sqs_queue).to receive(:send_message).with(
71
+ message_attributes: {
72
+ 'shoryuken_class' => {
73
+ string_value: TestWorker.to_s,
74
+ data_type: 'String'
75
+ }
76
+ },
77
+ message_body: '{"field":"part1","other_field":"part2"}')
78
+
79
+ TestWorker.perform_async(field: 'part1', other_field: 'part2')
80
+ end
81
+
69
82
  it 'enqueues a message with options' do
70
- expect(sqs_queue).to receive(:send_message).with('delayed message', {
83
+ expect(sqs_queue).to receive(:send_message).with(
71
84
  delay_seconds: 60,
72
85
  message_attributes: {
73
86
  'shoryuken_class' => {
74
87
  string_value: TestWorker.to_s,
75
88
  data_type: 'String'
76
89
  }
77
- }
78
- })
90
+ },
91
+ message_body: 'delayed message')
79
92
 
80
93
  TestWorker.perform_async('delayed message', delay_seconds: 60)
81
94
  end
data/spec/spec_helper.rb CHANGED
@@ -5,20 +5,31 @@ require 'pry-byebug'
5
5
  require 'celluloid'
6
6
  require 'shoryuken'
7
7
  require 'json'
8
+ require 'multi_xml'
9
+ require 'dotenv'
10
+ Dotenv.load
8
11
 
9
- options_file = File.join(File.expand_path('../..', __FILE__), 'shoryuken.yml')
10
-
11
- $options = {}
12
+ if ENV['CODECLIMATE_REPO_TOKEN']
13
+ require 'codeclimate-test-reporter'
14
+ CodeClimate::TestReporter.start
15
+ end
12
16
 
13
- if File.exists? options_file
14
- $options = YAML.load(File.read(options_file)).deep_symbolize_keys
17
+ config_file = File.join(File.expand_path('../..', __FILE__), 'spec', 'shoryuken.yml')
15
18
 
16
- AWS.config $options[:aws]
17
- end
19
+ Shoryuken::EnvironmentLoader.load(config_file: config_file)
18
20
 
19
21
  Shoryuken.logger.level = Logger::UNKNOWN
20
22
  Celluloid.logger.level = Logger::UNKNOWN
21
23
 
24
+ # I'm not sure whether this is an issue specific to running Shoryuken against github.com/comcast/cmb
25
+ # as opposed to AWS itself, but sometimes the receive_messages call returns XML that looks like this:
26
+ #
27
+ # <ReceiveMessageResponse>\n\t<ReceiveMessageResult>\n\t</ReceiveMessageResult> ... </ReceiveMessageResponse>
28
+ #
29
+ # The default MultiXML parser is ReXML, which seems to mishandle \n\t chars. Nokogiri seems to be
30
+ # the only one that correctly ignore this whitespace.
31
+ MultiXml.parser = :nokogiri
32
+
22
33
  class TestWorker
23
34
  include Shoryuken::Worker
24
35
 
@@ -37,16 +48,16 @@ RSpec.configure do |config|
37
48
  Shoryuken::Client.class_variable_set :@@queues, {}
38
49
  Shoryuken::Client.class_variable_set :@@visibility_timeouts, {}
39
50
 
40
- Shoryuken.options.clear
41
- Shoryuken.options.merge!($options)
51
+ Shoryuken::Client.sqs = nil
52
+ Shoryuken::Client.sqs_resource = nil
53
+ Shoryuken::Client.sns = nil
42
54
 
43
55
  Shoryuken.queues.clear
44
56
 
45
57
  Shoryuken.options[:concurrency] = 1
46
58
  Shoryuken.options[:delay] = 1
47
59
  Shoryuken.options[:timeout] = 1
48
-
49
- Shoryuken.options[:aws] = {}
60
+ Shoryuken.options[:aws].delete(:receive_message)
50
61
 
51
62
  TestWorker.get_shoryuken_options.clear
52
63
  TestWorker.get_shoryuken_options['queue'] = 'default'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoryuken
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Cantero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-29 00:00:00.000000000 Z
11
+ date: 2015-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -67,19 +67,61 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: aws-sdk-v1
70
+ name: nokogiri
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- type: :runtime
76
+ type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dotenv
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: aws-sdk-core
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.0.21
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.0.21
111
+ - !ruby/object:Gem::Dependency
112
+ name: aws-sdk-resources
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 2.0.21.pre
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 2.0.21.pre
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: celluloid
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +145,7 @@ extensions: []
103
145
  extra_rdoc_files: []
104
146
  files:
105
147
  - .gitignore
148
+ - .hound.yml
106
149
  - .rspec
107
150
  - .travis.yml
108
151
  - Gemfile
@@ -117,6 +160,7 @@ files:
117
160
  - lib/shoryuken/client.rb
118
161
  - lib/shoryuken/core_ext.rb
119
162
  - lib/shoryuken/default_worker_registry.rb
163
+ - lib/shoryuken/environment_loader.rb
120
164
  - lib/shoryuken/extensions/active_job_adapter.rb
121
165
  - lib/shoryuken/fetcher.rb
122
166
  - lib/shoryuken/launcher.rb
@@ -127,6 +171,8 @@ files:
127
171
  - lib/shoryuken/middleware/server/auto_delete.rb
128
172
  - lib/shoryuken/middleware/server/timing.rb
129
173
  - lib/shoryuken/processor.rb
174
+ - lib/shoryuken/sns_arn.rb
175
+ - lib/shoryuken/topic.rb
130
176
  - lib/shoryuken/util.rb
131
177
  - lib/shoryuken/version.rb
132
178
  - lib/shoryuken/worker.rb
@@ -134,6 +180,7 @@ files:
134
180
  - shoryuken.gemspec
135
181
  - shoryuken.jpg
136
182
  - spec/integration/launcher_spec.rb
183
+ - spec/shoryuken.yml
137
184
  - spec/shoryuken/client_spec.rb
138
185
  - spec/shoryuken/core_ext_spec.rb
139
186
  - spec/shoryuken/default_worker_registry_spec.rb
@@ -143,6 +190,8 @@ files:
143
190
  - spec/shoryuken/middleware/server/auto_delete_spec.rb
144
191
  - spec/shoryuken/middleware/server/timing_spec.rb
145
192
  - spec/shoryuken/processor_spec.rb
193
+ - spec/shoryuken/sns_arn_spec.rb
194
+ - spec/shoryuken/topic_spec.rb
146
195
  - spec/shoryuken/util_spec.rb
147
196
  - spec/shoryuken/worker_spec.rb
148
197
  - spec/shoryuken_spec.rb
@@ -167,12 +216,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
216
  version: '0'
168
217
  requirements: []
169
218
  rubyforge_project:
170
- rubygems_version: 2.0.14
219
+ rubygems_version: 2.4.5
171
220
  signing_key:
172
221
  specification_version: 4
173
222
  summary: Shoryuken is a super efficient AWS SQS thread based message processor
174
223
  test_files:
175
224
  - spec/integration/launcher_spec.rb
225
+ - spec/shoryuken.yml
176
226
  - spec/shoryuken/client_spec.rb
177
227
  - spec/shoryuken/core_ext_spec.rb
178
228
  - spec/shoryuken/default_worker_registry_spec.rb
@@ -182,6 +232,8 @@ test_files:
182
232
  - spec/shoryuken/middleware/server/auto_delete_spec.rb
183
233
  - spec/shoryuken/middleware/server/timing_spec.rb
184
234
  - spec/shoryuken/processor_spec.rb
235
+ - spec/shoryuken/sns_arn_spec.rb
236
+ - spec/shoryuken/topic_spec.rb
185
237
  - spec/shoryuken/util_spec.rb
186
238
  - spec/shoryuken/worker_spec.rb
187
239
  - spec/shoryuken_spec.rb