and-son 0.3.1 → 0.4.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.
- 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
|