hyperion_http 0.2.4 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/hyperion_http.gemspec +1 -1
- data/lib/hyperion_test/fake.rb +7 -8
- data/lib/hyperion_test/fake_server.rb +1 -0
- data/lib/hyperion_test/kim.rb +5 -4
- data/lib/hyperion_test/server_pool.rb +33 -0
- data/spec/lib/hyperion/test_spec.rb +12 -0
- data/spec/lib/hyperion_test/server_pool_spec.rb +46 -0
- metadata +5 -3
- data/hyperion.gemspec +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 747cd659ba382e3ea9438440afec453cb26b8896
|
4
|
+
data.tar.gz: 4aef37878c21330999d96f8f29451c892dd8359b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed81d32fc7841590b149ee116fff863c26447624bf08f265a236bc06de34a93c4205fb2797da91f6732eed50538ac1f9d131cad4aa85f32af7b9febf0a267207
|
7
|
+
data.tar.gz: 6b8cc99d7517756273cfdbde316cc888bc4496d725aac003aacd8e127a98d02724a74514d72bb1a58af1902bc7e11c1aac2bbed6a164698782c7f04571e62e87
|
data/hyperion_http.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'hyperion_http'
|
7
|
-
spec.version = '0.
|
7
|
+
spec.version = '0.3.0'
|
8
8
|
spec.authors = ['Indigo BioAutomation, Inc.']
|
9
9
|
spec.email = ['pwinton@indigobio.com']
|
10
10
|
spec.summary = 'Ruby REST client'
|
data/lib/hyperion_test/fake.rb
CHANGED
@@ -27,27 +27,26 @@ class Hyperion
|
|
27
27
|
# Clear routes but don't stop servers. Meant to be called between tests.
|
28
28
|
# Starting/stopping servers is relatively slow. They can be reused.
|
29
29
|
def reset
|
30
|
-
servers.values.each(
|
30
|
+
servers.values.each { |s| server_pool.check_in(s) }
|
31
|
+
servers.clear
|
31
32
|
@configured = false
|
32
33
|
end
|
33
34
|
|
34
35
|
# Stop all servers. This should only need to be called by tests that use
|
35
36
|
# Kim directly (like kim_spec.rb).
|
36
37
|
def teardown_cached_servers
|
37
|
-
|
38
|
-
|
39
|
-
@configured = false
|
38
|
+
reset
|
39
|
+
server_pool.clear
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
43
43
|
|
44
44
|
def servers
|
45
|
-
@servers ||= Hash.new{|hash, key| hash[key] =
|
45
|
+
@servers ||= Hash.new { |hash, key| hash[key] = server_pool.check_out }
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
@
|
50
|
-
@last_port += 1
|
48
|
+
def server_pool
|
49
|
+
@server_pool ||= ServerPool.new
|
51
50
|
end
|
52
51
|
|
53
52
|
private
|
data/lib/hyperion_test/kim.rb
CHANGED
@@ -75,8 +75,9 @@ class Hyperion
|
|
75
75
|
Rack::Handler::WEBrick.run(method(:handle_request), opts) do |webrick|
|
76
76
|
q.push(webrick)
|
77
77
|
end
|
78
|
-
|
78
|
+
rescue Exception => e
|
79
79
|
$stderr.puts "Hyperion fake server on port #{@port} exited unexpectedly!" unless @stopped
|
80
|
+
raise e
|
80
81
|
end
|
81
82
|
end
|
82
83
|
@webrick = q.pop
|
@@ -159,9 +160,9 @@ class Hyperion
|
|
159
160
|
|
160
161
|
def handle(req)
|
161
162
|
pred_value, func = @handlers.lazy
|
162
|
-
|
163
|
-
|
164
|
-
|
163
|
+
.map { |h| [h.pred.call(req), h.func] }
|
164
|
+
.select { |(pv, _)| pv }
|
165
|
+
.first || [nil, no_route_matched_func]
|
165
166
|
func.call(pred_value.is_a?(Request) ? pred_value : req)
|
166
167
|
end
|
167
168
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class Hyperion
|
2
|
+
class ServerPool
|
3
|
+
def initialize
|
4
|
+
@free = []
|
5
|
+
@in_use = []
|
6
|
+
end
|
7
|
+
|
8
|
+
def check_out
|
9
|
+
s = @free.pop || FakeServer.new(next_port)
|
10
|
+
@in_use.push(s)
|
11
|
+
s
|
12
|
+
end
|
13
|
+
|
14
|
+
def check_in(s)
|
15
|
+
@in_use.delete(s)
|
16
|
+
@free.push(s)
|
17
|
+
end
|
18
|
+
|
19
|
+
def clear
|
20
|
+
all = @free + @in_use
|
21
|
+
all.each(&:teardown)
|
22
|
+
@free = []
|
23
|
+
@in_use = []
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def next_port
|
29
|
+
@last_port ||= 9000
|
30
|
+
@last_port += 1
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -210,6 +210,18 @@ describe Hyperion do
|
|
210
210
|
expect(result.body).to eql({'user' => 'new user'})
|
211
211
|
end
|
212
212
|
|
213
|
+
it 'forgets routes after being reset' do
|
214
|
+
Hyperion.fake('https://www.google.com') do |svr|
|
215
|
+
svr.allow(:get, '/webhp') { 'fake google' }
|
216
|
+
end
|
217
|
+
result = Hyperion.request(RestRoute.new(:get, 'https://www.google.com/webhp'))
|
218
|
+
expect(result.body).to include 'fake google'
|
219
|
+
Hyperion.reset
|
220
|
+
result = Hyperion.request(RestRoute.new(:get, 'https://www.google.com/webhp'))
|
221
|
+
expect(result.status).to eql HyperionStatus::SUCCESS
|
222
|
+
expect(result.body).to include 'Google Search'
|
223
|
+
end
|
224
|
+
|
213
225
|
def success_response(body)
|
214
226
|
[200, {'Content-Type' => 'application/json'}, write(body, :json)]
|
215
227
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'hyperion_test'
|
3
|
+
|
4
|
+
describe Hyperion::ServerPool do
|
5
|
+
|
6
|
+
let(:pool) { Hyperion::ServerPool.new }
|
7
|
+
before(:each) do
|
8
|
+
allow(Hyperion::FakeServer).to receive(:new) do
|
9
|
+
server = double
|
10
|
+
allow(server).to receive(:teardown)
|
11
|
+
server
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#check_out' do
|
16
|
+
it 'creates a new server if there are none free' do
|
17
|
+
new_server = double
|
18
|
+
expect(Hyperion::FakeServer).to receive(:new).and_return(new_server)
|
19
|
+
expect(pool.check_out).to eql new_server
|
20
|
+
end
|
21
|
+
it 'returns a free server' do
|
22
|
+
server = pool.check_out
|
23
|
+
pool.check_in(server)
|
24
|
+
expect(pool.check_out).to eql server
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#check_in' do
|
29
|
+
it 'returns a server to the pool' do
|
30
|
+
server = pool.check_out
|
31
|
+
pool.check_in(server)
|
32
|
+
expect(pool.check_out).to eql server
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#clear' do
|
37
|
+
it 'tears down both checked out and checked in servers' do
|
38
|
+
a = pool.check_out
|
39
|
+
b = pool.check_out
|
40
|
+
pool.check_in(b)
|
41
|
+
expect(a).to receive(:teardown)
|
42
|
+
expect(b).to receive(:teardown)
|
43
|
+
pool.clear
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyperion_http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Indigo BioAutomation, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -208,7 +208,6 @@ files:
|
|
208
208
|
- README.md
|
209
209
|
- Rakefile
|
210
210
|
- build.yml
|
211
|
-
- hyperion.gemspec
|
212
211
|
- hyperion_http.gemspec
|
213
212
|
- lib/hyperion.rb
|
214
213
|
- lib/hyperion/aux/bug_error.rb
|
@@ -242,6 +241,7 @@ files:
|
|
242
241
|
- lib/hyperion_test/kim.rb
|
243
242
|
- lib/hyperion_test/kim/matcher.rb
|
244
243
|
- lib/hyperion_test/kim/matchers.rb
|
244
|
+
- lib/hyperion_test/server_pool.rb
|
245
245
|
- lib/hyperion_test/spec_helper.rb
|
246
246
|
- lib/hyperion_test/test_framework_hooks.rb
|
247
247
|
- spec/fixtures/test
|
@@ -259,6 +259,7 @@ files:
|
|
259
259
|
- spec/lib/hyperion_test/kim/matcher_spec.rb
|
260
260
|
- spec/lib/hyperion_test/kim/matchers_spec.rb
|
261
261
|
- spec/lib/hyperion_test/kim_spec.rb
|
262
|
+
- spec/lib/hyperion_test/server_pool_spec.rb
|
262
263
|
- spec/lib/types_spec.rb
|
263
264
|
- spec/spec_helper.rb
|
264
265
|
- spec/support/core_helpers.rb
|
@@ -303,6 +304,7 @@ test_files:
|
|
303
304
|
- spec/lib/hyperion_test/kim/matcher_spec.rb
|
304
305
|
- spec/lib/hyperion_test/kim/matchers_spec.rb
|
305
306
|
- spec/lib/hyperion_test/kim_spec.rb
|
307
|
+
- spec/lib/hyperion_test/server_pool_spec.rb
|
306
308
|
- spec/lib/types_spec.rb
|
307
309
|
- spec/spec_helper.rb
|
308
310
|
- spec/support/core_helpers.rb
|
data/hyperion.gemspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
hyperion_http.gemspec
|