and-son 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/and-son.gemspec +2 -2
- data/lib/and-son/client.rb +6 -9
- data/lib/and-son/version.rb +1 -1
- data/test/support/fake_server.rb +3 -3
- data/test/system/making_requests_tests.rb +16 -16
- data/test/unit/client_tests.rb +7 -9
- metadata +17 -17
data/and-son.gemspec
CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
-
gem.add_dependency("sanford-protocol", ["~>0.
|
20
|
+
gem.add_dependency("sanford-protocol", ["~>0.6"])
|
21
21
|
|
22
|
-
gem.add_development_dependency("assert", ["~>2.
|
22
|
+
gem.add_development_dependency("assert", ["~>2.3"])
|
23
23
|
gem.add_development_dependency("assert-mocha", ["~>1.0"])
|
24
24
|
end
|
data/lib/and-son/client.rb
CHANGED
@@ -43,10 +43,10 @@ module AndSon
|
|
43
43
|
|
44
44
|
DEFAULT_TIMEOUT = 60 #seconds
|
45
45
|
|
46
|
-
attr_reader :host, :port, :
|
46
|
+
attr_reader :host, :port, :responses
|
47
47
|
|
48
|
-
def initialize(host, port
|
49
|
-
@host, @port
|
48
|
+
def initialize(host, port)
|
49
|
+
@host, @port = host, port
|
50
50
|
@responses = AndSon::StoredResponses.new
|
51
51
|
end
|
52
52
|
|
@@ -58,7 +58,6 @@ module AndSon
|
|
58
58
|
CallRunner.new({
|
59
59
|
:host => host,
|
60
60
|
:port => port,
|
61
|
-
:version => version,
|
62
61
|
:timeout_value => (ENV['ANDSON_TIMEOUT'] || DEFAULT_TIMEOUT).to_f,
|
63
62
|
:params_value => {},
|
64
63
|
:logger_value => NullLogger.new,
|
@@ -68,8 +67,7 @@ module AndSon
|
|
68
67
|
end
|
69
68
|
|
70
69
|
class CallRunner < OpenStruct
|
71
|
-
# { :host, :port, :
|
72
|
-
# :responses }
|
70
|
+
# { :host, :port, :timeout_value, :params_value, :logger_value, :responses }
|
73
71
|
include CallRunnerMethods
|
74
72
|
|
75
73
|
# chain runner methods by returning itself
|
@@ -90,7 +88,6 @@ module AndSon
|
|
90
88
|
'time' => RoundedTime.new(benchmark.real),
|
91
89
|
'status' => client_response.protocol_response.code,
|
92
90
|
'host' => "#{self.host}:#{self.port}",
|
93
|
-
'version' => self.version,
|
94
91
|
'service' => name,
|
95
92
|
'params' => params
|
96
93
|
})
|
@@ -106,7 +103,7 @@ module AndSon
|
|
106
103
|
def call!(name, params)
|
107
104
|
call_params = self.params_value.merge(params)
|
108
105
|
AndSon::Connection.new(host, port).open do |connection|
|
109
|
-
connection.write(Sanford::Protocol::Request.new(
|
106
|
+
connection.write(Sanford::Protocol::Request.new(name, call_params).to_hash)
|
110
107
|
connection.close_write
|
111
108
|
if !connection.peek(timeout_value).empty?
|
112
109
|
AndSon::Response.parse(connection.read(timeout_value))
|
@@ -132,7 +129,7 @@ module AndSon
|
|
132
129
|
|
133
130
|
module SummaryLine
|
134
131
|
def self.new(line_attrs)
|
135
|
-
attr_keys = %w{time status host
|
132
|
+
attr_keys = %w{time status host service params}
|
136
133
|
attr_keys.map{ |k| "#{k}=#{line_attrs[k].inspect}" }.join(' ')
|
137
134
|
end
|
138
135
|
end
|
data/lib/and-son/version.rb
CHANGED
data/test/support/fake_server.rb
CHANGED
@@ -11,8 +11,8 @@ class FakeServer
|
|
11
11
|
@slow = !!options[:slow]
|
12
12
|
end
|
13
13
|
|
14
|
-
def add_handler(
|
15
|
-
@handlers[
|
14
|
+
def add_handler(name, &block)
|
15
|
+
@handlers[name] = block
|
16
16
|
end
|
17
17
|
|
18
18
|
def run
|
@@ -44,7 +44,7 @@ class FakeServer
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def route(request)
|
47
|
-
handler = @handlers[
|
47
|
+
handler = @handlers[request.name]
|
48
48
|
returned = handler.call(request.params)
|
49
49
|
end
|
50
50
|
|
@@ -13,13 +13,13 @@ class MakingRequestsTests < Assert::Context
|
|
13
13
|
class SuccessTests < MakingRequestsTests
|
14
14
|
desc "returns a successful response"
|
15
15
|
setup do
|
16
|
-
@fake_server.add_handler('
|
16
|
+
@fake_server.add_handler('echo'){|params| [ 200, params['message'] ] }
|
17
17
|
end
|
18
18
|
|
19
19
|
should "get a 200 response with the parameter echoed back" do
|
20
20
|
self.run_fake_server(@fake_server) do
|
21
21
|
|
22
|
-
client = AndSon.new('localhost', 12000
|
22
|
+
client = AndSon.new('localhost', 12000)
|
23
23
|
client.call('echo', :message => 'test') do |response|
|
24
24
|
assert_equal 200, response.status.code
|
25
25
|
assert_equal nil, response.status.message
|
@@ -41,7 +41,7 @@ class MakingRequestsTests < Assert::Context
|
|
41
41
|
end
|
42
42
|
|
43
43
|
should "return the registered response" do
|
44
|
-
client = AndSon.new('localhost', 12000
|
44
|
+
client = AndSon.new('localhost', 12000)
|
45
45
|
client.responses.add('echo', 'message' => 'test'){ 'test' }
|
46
46
|
|
47
47
|
client.call('echo', 'message' => 'test') do |response|
|
@@ -55,7 +55,7 @@ class MakingRequestsTests < Assert::Context
|
|
55
55
|
|
56
56
|
class AuthorizeTests < MakingRequestsTests
|
57
57
|
setup do
|
58
|
-
@fake_server.add_handler('
|
58
|
+
@fake_server.add_handler('authorize_it') do |params|
|
59
59
|
if params['api_key'] == 12345
|
60
60
|
[ 200, params['data'] ]
|
61
61
|
else
|
@@ -67,7 +67,7 @@ class MakingRequestsTests < Assert::Context
|
|
67
67
|
should "get a 200 response when api_key is passed with the correct value" do
|
68
68
|
self.run_fake_server(@fake_server) do
|
69
69
|
|
70
|
-
client = AndSon.new('localhost', 12000
|
70
|
+
client = AndSon.new('localhost', 12000).params({ 'api_key' => 12345 })
|
71
71
|
client.call('authorize_it', { 'data' => 'holla' }) do |response|
|
72
72
|
assert_equal 200, response.status.code
|
73
73
|
assert_equal nil, response.status.message
|
@@ -80,7 +80,7 @@ class MakingRequestsTests < Assert::Context
|
|
80
80
|
should "get a 401 response when api_key isn't passed" do
|
81
81
|
self.run_fake_server(@fake_server) do
|
82
82
|
|
83
|
-
client = AndSon.new('localhost', 12000
|
83
|
+
client = AndSon.new('localhost', 12000)
|
84
84
|
client.call('authorize_it', { 'data' => 'holla' }) do |response|
|
85
85
|
assert_equal 401, response.status.code
|
86
86
|
assert_equal nil, response.status.message
|
@@ -95,14 +95,14 @@ class MakingRequestsTests < Assert::Context
|
|
95
95
|
class Failure400Tests < MakingRequestsTests
|
96
96
|
desc "when a request fails with a 400"
|
97
97
|
setup do
|
98
|
-
@fake_server.add_handler('
|
98
|
+
@fake_server.add_handler('400'){|params| [ 400, false ] }
|
99
99
|
end
|
100
100
|
|
101
101
|
should "raise a bad request error" do
|
102
102
|
self.run_fake_server(@fake_server) do
|
103
103
|
|
104
104
|
assert_raises(AndSon::BadRequestError) do
|
105
|
-
client = AndSon.new('localhost', 12000
|
105
|
+
client = AndSon.new('localhost', 12000)
|
106
106
|
client.call('400')
|
107
107
|
end
|
108
108
|
|
@@ -114,14 +114,14 @@ class MakingRequestsTests < Assert::Context
|
|
114
114
|
class Failure404Tests < MakingRequestsTests
|
115
115
|
desc "when a request fails with a 404"
|
116
116
|
setup do
|
117
|
-
@fake_server.add_handler('
|
117
|
+
@fake_server.add_handler('404'){|params| [ 404, false ] }
|
118
118
|
end
|
119
119
|
|
120
120
|
should "raise a not found error" do
|
121
121
|
self.run_fake_server(@fake_server) do
|
122
122
|
|
123
123
|
assert_raises(AndSon::NotFoundError) do
|
124
|
-
client = AndSon.new('localhost', 12000
|
124
|
+
client = AndSon.new('localhost', 12000)
|
125
125
|
client.call('404')
|
126
126
|
end
|
127
127
|
|
@@ -133,14 +133,14 @@ class MakingRequestsTests < Assert::Context
|
|
133
133
|
class Failure4xxTests < MakingRequestsTests
|
134
134
|
desc "when a request fails with a 4xx"
|
135
135
|
setup do
|
136
|
-
@fake_server.add_handler('
|
136
|
+
@fake_server.add_handler('4xx'){|params| [ 402, false ] }
|
137
137
|
end
|
138
138
|
|
139
139
|
should "raise a client error" do
|
140
140
|
self.run_fake_server(@fake_server) do
|
141
141
|
|
142
142
|
assert_raises(AndSon::ClientError) do
|
143
|
-
client = AndSon.new('localhost', 12000
|
143
|
+
client = AndSon.new('localhost', 12000)
|
144
144
|
client.call('4xx')
|
145
145
|
end
|
146
146
|
|
@@ -152,14 +152,14 @@ class MakingRequestsTests < Assert::Context
|
|
152
152
|
class Failure5xxTests < MakingRequestsTests
|
153
153
|
desc "when a request fails with a 5xx"
|
154
154
|
setup do
|
155
|
-
@fake_server.add_handler('
|
155
|
+
@fake_server.add_handler('5xx'){|params| [ 500, false ] }
|
156
156
|
end
|
157
157
|
|
158
158
|
should "raise a server error" do
|
159
159
|
self.run_fake_server(@fake_server) do
|
160
160
|
|
161
161
|
assert_raises(AndSon::ServerError) do
|
162
|
-
client = AndSon.new('localhost', 12000
|
162
|
+
client = AndSon.new('localhost', 12000)
|
163
163
|
client.call('5xx')
|
164
164
|
end
|
165
165
|
|
@@ -171,7 +171,7 @@ class MakingRequestsTests < Assert::Context
|
|
171
171
|
class TimeoutErrorTests < MakingRequestsTests
|
172
172
|
desc "when a request takes to long to respond"
|
173
173
|
setup do
|
174
|
-
@fake_server.add_handler('
|
174
|
+
@fake_server.add_handler('forever') do |params|
|
175
175
|
sleep 0.2
|
176
176
|
[ 200, true ]
|
177
177
|
end
|
@@ -181,7 +181,7 @@ class MakingRequestsTests < Assert::Context
|
|
181
181
|
self.run_fake_server(@fake_server) do
|
182
182
|
|
183
183
|
assert_raises(Sanford::Protocol::TimeoutError) do
|
184
|
-
client = AndSon.new('localhost', 12000
|
184
|
+
client = AndSon.new('localhost', 12000)
|
185
185
|
client.timeout(0.1).call('forever')
|
186
186
|
end
|
187
187
|
|
data/test/unit/client_tests.rb
CHANGED
@@ -11,12 +11,12 @@ class AndSon::Client
|
|
11
11
|
|
12
12
|
desc "AndSon::Client"
|
13
13
|
setup do
|
14
|
-
@host, @port
|
15
|
-
@client = AndSon::Client.new(@host, @port
|
14
|
+
@host, @port = '0.0.0.0', 8000
|
15
|
+
@client = AndSon::Client.new(@host, @port)
|
16
16
|
end
|
17
17
|
subject{ @client }
|
18
18
|
|
19
|
-
should have_imeths :host, :port, :
|
19
|
+
should have_imeths :host, :port, :responses
|
20
20
|
should have_imeths :call_runner, :call, :timeout, :logger, :params
|
21
21
|
|
22
22
|
should "know its default call runner" do
|
@@ -24,7 +24,6 @@ class AndSon::Client
|
|
24
24
|
|
25
25
|
assert_equal @host, default_runner.host
|
26
26
|
assert_equal @port, default_runner.port
|
27
|
-
assert_equal @version, default_runner.version
|
28
27
|
assert_equal 60.0, default_runner.timeout_value
|
29
28
|
assert_instance_of AndSon::NullLogger, default_runner.logger_value
|
30
29
|
end
|
@@ -89,12 +88,11 @@ class AndSon::Client
|
|
89
88
|
should "write a request to the connection" do
|
90
89
|
@connection.stubs(:open).yields(@fake_connection).returns(@response)
|
91
90
|
|
92
|
-
client = AndSon::Client.new('localhost', 12001
|
91
|
+
client = AndSon::Client.new('localhost', 12001).call('echo', {
|
93
92
|
:message => 'test'
|
94
93
|
})
|
95
94
|
|
96
95
|
request_data = @fake_connection.written.first
|
97
|
-
assert_equal 'v1', request_data['version']
|
98
96
|
assert_equal 'echo', request_data['name']
|
99
97
|
assert_equal({ 'message' => 'test' }, request_data['params'])
|
100
98
|
end
|
@@ -102,7 +100,7 @@ class AndSon::Client
|
|
102
100
|
should "close the write stream" do
|
103
101
|
@connection.stubs(:open).yields(@fake_connection).returns(@response)
|
104
102
|
|
105
|
-
client = AndSon::Client.new('localhost', 12001
|
103
|
+
client = AndSon::Client.new('localhost', 12001).call('echo', {
|
106
104
|
:message => 'test'
|
107
105
|
})
|
108
106
|
|
@@ -110,7 +108,7 @@ class AndSon::Client
|
|
110
108
|
end
|
111
109
|
|
112
110
|
should "raise an ArgumentError when #call is not passed a Hash for params" do
|
113
|
-
client = AndSon::Client.new('localhost', 12001
|
111
|
+
client = AndSon::Client.new('localhost', 12001)
|
114
112
|
runner = client.timeout(0.1) # in case it actually tries to make the request
|
115
113
|
|
116
114
|
assert_raises(ArgumentError) do
|
@@ -120,7 +118,7 @@ class AndSon::Client
|
|
120
118
|
|
121
119
|
should "raise a ConnectionClosedError when the server closes the connection" do
|
122
120
|
self.start_closing_server(12001) do
|
123
|
-
client = AndSon::Client.new('localhost', 12001
|
121
|
+
client = AndSon::Client.new('localhost', 12001)
|
124
122
|
|
125
123
|
assert_raises(AndSon::ConnectionClosedError) do
|
126
124
|
client.call('anything')
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: and-son
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Collin Redding
|
@@ -16,40 +16,39 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-
|
19
|
+
date: 2013-10-14 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
prerelease: false
|
23
22
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
23
|
none: false
|
25
24
|
requirements:
|
26
25
|
- - ~>
|
27
26
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
27
|
+
hash: 7
|
29
28
|
segments:
|
30
29
|
- 0
|
31
|
-
-
|
32
|
-
version: "0.
|
30
|
+
- 6
|
31
|
+
version: "0.6"
|
32
|
+
type: :runtime
|
33
33
|
requirement: *id001
|
34
|
+
prerelease: false
|
34
35
|
name: sanford-protocol
|
35
|
-
type: :runtime
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
prerelease: false
|
38
37
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
38
|
none: false
|
40
39
|
requirements:
|
41
40
|
- - ~>
|
42
41
|
- !ruby/object:Gem::Version
|
43
|
-
hash:
|
42
|
+
hash: 5
|
44
43
|
segments:
|
45
44
|
- 2
|
46
|
-
-
|
47
|
-
version: "2.
|
45
|
+
- 3
|
46
|
+
version: "2.3"
|
47
|
+
type: :development
|
48
48
|
requirement: *id002
|
49
|
+
prerelease: false
|
49
50
|
name: assert
|
50
|
-
type: :development
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
-
prerelease: false
|
53
52
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
53
|
none: false
|
55
54
|
requirements:
|
@@ -60,9 +59,10 @@ dependencies:
|
|
60
59
|
- 1
|
61
60
|
- 0
|
62
61
|
version: "1.0"
|
62
|
+
type: :development
|
63
63
|
requirement: *id003
|
64
|
+
prerelease: false
|
64
65
|
name: assert-mocha
|
65
|
-
type: :development
|
66
66
|
description: Simple Sanford client for Ruby.
|
67
67
|
email:
|
68
68
|
- collin.redding@me.com
|