fake_sqs 0.0.6 → 0.0.7
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 +4 -4
- data/.rspec +1 -0
- data/README.md +60 -0
- data/fake_sqs.gemspec +1 -0
- data/lib/fake_sqs/test_integration.rb +94 -0
- data/lib/fake_sqs/version.rb +1 -1
- data/spec/acceptance/message_actions_spec.rb +6 -2
- data/spec/acceptance/queue_actions_spec.rb +5 -5
- data/spec/spec_helper.rb +21 -0
- metadata +7 -5
- data/spec/support/aws.rb +0 -95
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ffdf71e44c5de564702286a5fb677693ffa8098
|
4
|
+
data.tar.gz: e47abd738c5707b3fef71b580e847b08ea26ffa2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56db094e2373419a92f3d3671ed30bb10ebd56974f7bbf7e00befe8f84762d0cb0c2957d6649e21ac2823368ed6ecbcd9bfc93d589c10078de34d120234cccc7
|
7
|
+
data.tar.gz: ef9b9117d913f6f813b98621143f6e3dfa3fb5623d765a0bf1590b00eaea3f553bd14315a90b1949901797e609964a6d90aefb33696e951c53a180d5e755d008
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -85,5 +85,65 @@ $ curl -X PUT http://localhost:4568/
|
|
85
85
|
```
|
86
86
|
|
87
87
|
|
88
|
+
### Test Integration
|
89
|
+
|
90
|
+
When making integration tests for your app, you can easily include Fake SQS.
|
91
|
+
|
92
|
+
Here are the methods you need to run FakeSQS programmatically.
|
93
|
+
|
94
|
+
``` ruby
|
95
|
+
require "fake_sqs/test_integration"
|
96
|
+
|
97
|
+
# globally, before the test suite starts:
|
98
|
+
AWS.config(
|
99
|
+
use_ssl: false,
|
100
|
+
sqs_endpoint: "localhost",
|
101
|
+
sqs_port: 4568,
|
102
|
+
access_key_id: "fake access key",
|
103
|
+
secret_access_key: "fake secret key",
|
104
|
+
)
|
105
|
+
fake_sqs = FakeSQS::TestIntegration.new
|
106
|
+
|
107
|
+
# before each test that requires SQS:
|
108
|
+
fake_sqs.start
|
109
|
+
|
110
|
+
# at the end of the suite:
|
111
|
+
at_exit {
|
112
|
+
fake_sqs.stop
|
113
|
+
}
|
114
|
+
```
|
115
|
+
|
116
|
+
By starting it like this it will start when needed, and reset between each test.
|
117
|
+
|
118
|
+
Here's an example for RSpec to put in `spec/spec_helper.rb`:
|
119
|
+
|
120
|
+
``` ruby
|
121
|
+
AWS.config(
|
122
|
+
use_ssl: false,
|
123
|
+
sqs_endpoint: "localhost",
|
124
|
+
sqs_port: 4568,
|
125
|
+
access_key_id: "fake access key",
|
126
|
+
secret_access_key: "fake secret key",
|
127
|
+
)
|
128
|
+
|
129
|
+
RSpec.configure do |config|
|
130
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
131
|
+
config.before(:suite) { $fake_sqs = FakeSQS::TestIntegration.new }
|
132
|
+
config.before(:each, :sqs) { $fake_sqs.start }
|
133
|
+
config.after(:suite) { $fake_sqs.stop }
|
134
|
+
end
|
135
|
+
```
|
136
|
+
|
137
|
+
Now you can use the `:sqs metadata to enable SQS integration:
|
138
|
+
|
139
|
+
``` ruby
|
140
|
+
describe "something with sqs", :sqs do
|
141
|
+
it "should work" do
|
142
|
+
queue = AWS::SQS.new.queues.create("my-queue")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
```
|
146
|
+
|
147
|
+
|
88
148
|
[fake_dynamo]: https://github.com/ananthakumaran/fake_dynamo
|
89
149
|
[aws-sdk]: https://github.com/amazonwebservices/aws-sdk-for-ruby
|
data/fake_sqs.gemspec
CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
+
gem.license = "MIT"
|
19
20
|
|
20
21
|
gem.add_dependency "sinatra"
|
21
22
|
gem.add_dependency "builder"
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require "net/http"
|
2
|
+
|
3
|
+
module FakeSQS
|
4
|
+
class TestIntegration
|
5
|
+
|
6
|
+
attr_reader :options
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def host
|
13
|
+
option :sqs_endpoint
|
14
|
+
end
|
15
|
+
|
16
|
+
def port
|
17
|
+
option :sqs_port
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
start! unless up?
|
22
|
+
reset
|
23
|
+
end
|
24
|
+
|
25
|
+
def start!
|
26
|
+
@pid = Process.spawn(binfile, "-p", port.to_s, :out => out, :err => out)
|
27
|
+
wait_until_up
|
28
|
+
end
|
29
|
+
|
30
|
+
def stop
|
31
|
+
if @pid
|
32
|
+
Process.kill("INT", @pid)
|
33
|
+
Process.waitpid(@pid)
|
34
|
+
@pid = nil
|
35
|
+
else
|
36
|
+
$stderr.puts "FakeSQS is not running"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def reset
|
41
|
+
connection.delete("/")
|
42
|
+
end
|
43
|
+
|
44
|
+
def expire
|
45
|
+
connection.put("/", "")
|
46
|
+
end
|
47
|
+
|
48
|
+
def url
|
49
|
+
"http://#{host}:#{port}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def up?
|
53
|
+
@pid && connection.get("/").code.to_s == "200"
|
54
|
+
rescue Errno::ECONNREFUSED
|
55
|
+
false
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def option(key)
|
61
|
+
options.fetch(key) { AWS.config.public_send(key) }
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def wait_until_up(deadline = Time.now + 2)
|
66
|
+
fail "FakeSQS didn't start in time" if Time.now > deadline
|
67
|
+
unless up?
|
68
|
+
sleep 0.01
|
69
|
+
wait_until_up(deadline)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def binfile
|
74
|
+
File.expand_path("../../../bin/fake_sqs", __FILE__)
|
75
|
+
end
|
76
|
+
|
77
|
+
def out
|
78
|
+
if debug?
|
79
|
+
:out
|
80
|
+
else
|
81
|
+
"/dev/null"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def connection
|
86
|
+
@connection ||= Net::HTTP.new(host, port)
|
87
|
+
end
|
88
|
+
|
89
|
+
def debug?
|
90
|
+
ENV["DEBUG"].to_s == "true"
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
data/lib/fake_sqs/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Actions for Messages", :
|
3
|
+
describe "Actions for Messages", :sqs do
|
4
4
|
|
5
5
|
before do
|
6
6
|
sqs.queues.create("test")
|
@@ -56,4 +56,8 @@ describe "Actions for Messages", :acceptance do
|
|
56
56
|
messages.map(&:body).should match_array bodies
|
57
57
|
end
|
58
58
|
|
59
|
+
def let_messages_in_flight_expire
|
60
|
+
$fake_sqs.expire
|
61
|
+
end
|
62
|
+
|
59
63
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Actions for Queues", :
|
3
|
+
describe "Actions for Queues", :sqs do
|
4
4
|
|
5
5
|
let(:sqs) { AWS::SQS.new }
|
6
6
|
|
@@ -18,7 +18,7 @@ describe "Actions for Queues", :acceptance do
|
|
18
18
|
specify "ListQueues" do
|
19
19
|
sqs.queues.create("test-list-1")
|
20
20
|
sqs.queues.create("test-list-2")
|
21
|
-
|
21
|
+
sqs.queues.map(&:url).should eq [
|
22
22
|
"http://0.0.0.0:4568/test-list-1",
|
23
23
|
"http://0.0.0.0:4568/test-list-2"
|
24
24
|
]
|
@@ -28,9 +28,9 @@ describe "Actions for Queues", :acceptance do
|
|
28
28
|
sqs.queues.create("test-list-1")
|
29
29
|
sqs.queues.create("test-list-2")
|
30
30
|
sqs.queues.create("other-list-3")
|
31
|
-
|
31
|
+
sqs.queues.with_prefix("test").map(&:url).should eq [
|
32
32
|
"http://0.0.0.0:4568/test-list-1",
|
33
|
-
"http://0.0.0.0:4568/test-list-2"
|
33
|
+
"http://0.0.0.0:4568/test-list-2",
|
34
34
|
]
|
35
35
|
end
|
36
36
|
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "aws-sdk"
|
2
|
+
require "fake_sqs/test_integration"
|
3
|
+
|
4
|
+
AWS.config(
|
5
|
+
:use_ssl => false,
|
6
|
+
:sqs_endpoint => "localhost",
|
7
|
+
:sqs_port => 4568,
|
8
|
+
:access_key_id => "fake access key",
|
9
|
+
:secret_access_key => "fake secret key",
|
10
|
+
)
|
11
|
+
|
12
|
+
$fake_sqs = FakeSQS::TestIntegration.new
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
|
16
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
17
|
+
config.before(:suite) { $fake_sqs = FakeSQS::TestIntegration.new }
|
18
|
+
config.before(:each, :sqs) { $fake_sqs.start }
|
19
|
+
config.after(:suite) { $fake_sqs.stop }
|
20
|
+
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fake_sqs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -174,11 +174,12 @@ files:
|
|
174
174
|
- lib/fake_sqs/responder.rb
|
175
175
|
- lib/fake_sqs/server.rb
|
176
176
|
- lib/fake_sqs/show_output.rb
|
177
|
+
- lib/fake_sqs/test_integration.rb
|
177
178
|
- lib/fake_sqs/version.rb
|
178
179
|
- lib/fake_sqs/web_interface.rb
|
179
180
|
- spec/acceptance/message_actions_spec.rb
|
180
181
|
- spec/acceptance/queue_actions_spec.rb
|
181
|
-
- spec/
|
182
|
+
- spec/spec_helper.rb
|
182
183
|
- spec/unit/api_spec.rb
|
183
184
|
- spec/unit/catch_errors_spec.rb
|
184
185
|
- spec/unit/error_response_spec.rb
|
@@ -189,7 +190,8 @@ files:
|
|
189
190
|
- spec/unit/responder_spec.rb
|
190
191
|
- spec/unit/show_output_spec.rb
|
191
192
|
homepage: https://github.com/iain/fake_sqs
|
192
|
-
licenses:
|
193
|
+
licenses:
|
194
|
+
- MIT
|
193
195
|
metadata: {}
|
194
196
|
post_install_message:
|
195
197
|
rdoc_options: []
|
@@ -214,7 +216,7 @@ summary: Provides a fake SQS server that you can run locally to test against
|
|
214
216
|
test_files:
|
215
217
|
- spec/acceptance/message_actions_spec.rb
|
216
218
|
- spec/acceptance/queue_actions_spec.rb
|
217
|
-
- spec/
|
219
|
+
- spec/spec_helper.rb
|
218
220
|
- spec/unit/api_spec.rb
|
219
221
|
- spec/unit/catch_errors_spec.rb
|
220
222
|
- spec/unit/error_response_spec.rb
|
data/spec/support/aws.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'aws-sdk'
|
2
|
-
require 'fake_sqs'
|
3
|
-
require 'faraday'
|
4
|
-
require 'uri'
|
5
|
-
require 'thin'
|
6
|
-
|
7
|
-
Thread.abort_on_exception = true
|
8
|
-
|
9
|
-
ENV['RACK_ENV'] = 'test'
|
10
|
-
|
11
|
-
Thin::Logging.silent = true
|
12
|
-
|
13
|
-
class FakeServer
|
14
|
-
|
15
|
-
attr_reader :url
|
16
|
-
|
17
|
-
def initialize(url = "http://0.0.0.0:4568")
|
18
|
-
@url = url
|
19
|
-
end
|
20
|
-
|
21
|
-
def uri
|
22
|
-
@uri ||= URI.parse(url)
|
23
|
-
end
|
24
|
-
|
25
|
-
def port
|
26
|
-
uri.port
|
27
|
-
end
|
28
|
-
|
29
|
-
def host
|
30
|
-
uri.host
|
31
|
-
end
|
32
|
-
|
33
|
-
def ssl?
|
34
|
-
uri.scheme == "https"
|
35
|
-
end
|
36
|
-
|
37
|
-
def start
|
38
|
-
return if @started
|
39
|
-
@started = true
|
40
|
-
@fake_sqs_thread = Thread.new {
|
41
|
-
load File.expand_path('../../../bin/fake_sqs', __FILE__)
|
42
|
-
}
|
43
|
-
wait_until_up
|
44
|
-
end
|
45
|
-
|
46
|
-
def stop
|
47
|
-
@fake_sqs_thread.kill
|
48
|
-
end
|
49
|
-
|
50
|
-
def reset
|
51
|
-
Faraday.delete(url)
|
52
|
-
end
|
53
|
-
|
54
|
-
def expire_messages_in_flight
|
55
|
-
Faraday.put(url)
|
56
|
-
end
|
57
|
-
|
58
|
-
def wait_until_up(tries = 0)
|
59
|
-
fail "Server didn't start in time" if tries > 200
|
60
|
-
response = Faraday.get(url)
|
61
|
-
if response.status != 200
|
62
|
-
wait_until_up(tries + 1)
|
63
|
-
end
|
64
|
-
rescue Faraday::Error::ConnectionFailed
|
65
|
-
wait_until_up(tries + 1)
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
$fake_server = FakeServer.new
|
71
|
-
|
72
|
-
module FakeServerHelper
|
73
|
-
|
74
|
-
def let_messages_in_flight_expire
|
75
|
-
$fake_server.expire_messages_in_flight
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
AWS.config(
|
81
|
-
:use_ssl => $fake_server.ssl?,
|
82
|
-
:sqs_endpoint => $fake_server.host,
|
83
|
-
:sqs_port => $fake_server.port,
|
84
|
-
:access_key_id => "access key id",
|
85
|
-
:secret_access_key => "secret access key"
|
86
|
-
)
|
87
|
-
|
88
|
-
|
89
|
-
RSpec.configure do |config|
|
90
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
91
|
-
config.before(:suite) { $fake_server.start }
|
92
|
-
config.after(:suite) { $fake_server.stop }
|
93
|
-
config.before(:each, :acceptance) { $fake_server.reset }
|
94
|
-
config.include FakeServerHelper
|
95
|
-
end
|