hyperion_http 0.2.4 → 0.3.0
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/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
|