sanford 0.15.0 → 0.15.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sanford/server.rb +2 -4
- data/lib/sanford/server_data.rb +2 -2
- data/lib/sanford/version.rb +1 -1
- data/test/support/factory.rb +2 -1
- data/test/system/server_tests.rb +49 -15
- data/test/unit/process_tests.rb +0 -17
- data/test/unit/server_data_tests.rb +58 -54
- data/test/unit/server_tests.rb +0 -18
- metadata +4 -4
data/lib/sanford/server.rb
CHANGED
@@ -79,7 +79,7 @@ module Sanford
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def listen(*args)
|
82
|
-
args = [
|
82
|
+
args = [@server_data.ip, @server_data.port] if args.empty?
|
83
83
|
@dat_tcp_server.listen(*args) do |server_socket|
|
84
84
|
configure_tcp_server(server_socket)
|
85
85
|
end
|
@@ -274,7 +274,7 @@ module Sanford
|
|
274
274
|
include NsOptions::Proxy
|
275
275
|
|
276
276
|
option :name, String, :required => true
|
277
|
-
option :ip, String, :required => true
|
277
|
+
option :ip, String, :required => true, :default => '0.0.0.0'
|
278
278
|
option :port, Integer, :required => true
|
279
279
|
option :pid_file, Pathname
|
280
280
|
|
@@ -291,8 +291,6 @@ module Sanford
|
|
291
291
|
|
292
292
|
def initialize(values = nil)
|
293
293
|
super(values)
|
294
|
-
self.ip = !(v = ENV['SANFORD_IP'].to_s).empty? ? v : '0.0.0.0'
|
295
|
-
self.port = !(v = ENV['SANFORD_PORT'].to_s).empty? ? v : nil
|
296
294
|
@init_procs, @error_procs = [], []
|
297
295
|
@worker_start_procs, @worker_shutdown_procs = [], []
|
298
296
|
@worker_sleep_procs, @worker_wakeup_procs = [], []
|
data/lib/sanford/server_data.rb
CHANGED
@@ -20,8 +20,8 @@ module Sanford
|
|
20
20
|
def initialize(args = nil)
|
21
21
|
args ||= {}
|
22
22
|
@name = args[:name]
|
23
|
-
@ip = args[:ip]
|
24
|
-
@port = args[:port]
|
23
|
+
@ip = !(v = ENV['SANFORD_IP'].to_s).empty? ? v : args[:ip]
|
24
|
+
@port = !(v = ENV['SANFORD_PORT'].to_s).empty? ? v.to_i : args[:port]
|
25
25
|
@pid_file = args[:pid_file]
|
26
26
|
|
27
27
|
@receives_keep_alive = !!args[:receives_keep_alive]
|
data/lib/sanford/version.rb
CHANGED
data/test/support/factory.rb
CHANGED
@@ -7,7 +7,8 @@ module Factory
|
|
7
7
|
klass ||= StandardError
|
8
8
|
message ||= Factory.text
|
9
9
|
exception = nil
|
10
|
-
begin; raise(klass, message); rescue
|
10
|
+
begin; raise(klass, message); rescue klass => exception; end
|
11
|
+
exception.set_backtrace(nil) if Factory.boolean
|
11
12
|
exception
|
12
13
|
end
|
13
14
|
|
data/test/system/server_tests.rb
CHANGED
@@ -23,21 +23,28 @@ module Sanford::Server
|
|
23
23
|
# results
|
24
24
|
@current_sanford_debug = ENV['SANFORD_DEBUG']
|
25
25
|
ENV.delete('SANFORD_DEBUG')
|
26
|
+
end
|
27
|
+
teardown do
|
28
|
+
ENV['SANFORD_DEBUG'] = @current_sanford_debug
|
29
|
+
ENV['SANFORD_PROTOCOL_DEBUG'] = @current_sanford_protocol_debug
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
26
33
|
|
34
|
+
class RunningAppServerTests < SystemTests
|
35
|
+
setup do
|
27
36
|
@server = AppServer.new
|
28
37
|
@client = TestClient.new(AppServer.ip, AppServer.port)
|
29
38
|
@server_runner = ServerRunner.new(@server).tap(&:start)
|
30
39
|
end
|
31
40
|
teardown do
|
32
41
|
@server_runner.stop
|
33
|
-
ENV['SANFORD_DEBUG'] = @current_sanford_debug
|
34
|
-
ENV['SANFORD_PROTOCOL_DEBUG'] = @current_sanford_protocol_debug
|
35
42
|
end
|
36
43
|
subject{ @response }
|
37
44
|
|
38
45
|
end
|
39
46
|
|
40
|
-
class SuccessTests <
|
47
|
+
class SuccessTests < RunningAppServerTests
|
41
48
|
desc "calling a service"
|
42
49
|
setup do
|
43
50
|
@message = Factory.string
|
@@ -53,7 +60,7 @@ module Sanford::Server
|
|
53
60
|
|
54
61
|
end
|
55
62
|
|
56
|
-
class BadProtocolVersionTests <
|
63
|
+
class BadProtocolVersionTests < RunningAppServerTests
|
57
64
|
desc "calling a server with an invalid protocol version"
|
58
65
|
setup do
|
59
66
|
@client.bytes = "\000"
|
@@ -68,7 +75,7 @@ module Sanford::Server
|
|
68
75
|
|
69
76
|
end
|
70
77
|
|
71
|
-
class BadMessageTests <
|
78
|
+
class BadMessageTests < RunningAppServerTests
|
72
79
|
desc "calling a server with an invalid message size"
|
73
80
|
setup do
|
74
81
|
@client.bytes = [ Sanford::Protocol.msg_version, "\000" ].join
|
@@ -83,7 +90,7 @@ module Sanford::Server
|
|
83
90
|
|
84
91
|
end
|
85
92
|
|
86
|
-
class BadBodyTests <
|
93
|
+
class BadBodyTests < RunningAppServerTests
|
87
94
|
desc "calling a server with an invalid message body"
|
88
95
|
setup do
|
89
96
|
# these are a special set of bytes that cause BSON to throw an exception
|
@@ -99,7 +106,7 @@ module Sanford::Server
|
|
99
106
|
|
100
107
|
end
|
101
108
|
|
102
|
-
class NotFoundTests <
|
109
|
+
class NotFoundTests < RunningAppServerTests
|
103
110
|
desc "with a request for a service the server doesn't provide"
|
104
111
|
setup do
|
105
112
|
@client.set_request('doesnt_exist')
|
@@ -114,7 +121,7 @@ module Sanford::Server
|
|
114
121
|
|
115
122
|
end
|
116
123
|
|
117
|
-
class ServerErrorTests <
|
124
|
+
class ServerErrorTests < RunningAppServerTests
|
118
125
|
desc "with a request that causes a server error"
|
119
126
|
setup do
|
120
127
|
@client.set_request('raise')
|
@@ -129,7 +136,7 @@ module Sanford::Server
|
|
129
136
|
|
130
137
|
end
|
131
138
|
|
132
|
-
class BadRequestTests <
|
139
|
+
class BadRequestTests < RunningAppServerTests
|
133
140
|
desc "calling a server with an invalid request"
|
134
141
|
setup do
|
135
142
|
@client.set_msg_body({})
|
@@ -144,7 +151,7 @@ module Sanford::Server
|
|
144
151
|
|
145
152
|
end
|
146
153
|
|
147
|
-
class BadResponseTests <
|
154
|
+
class BadResponseTests < RunningAppServerTests
|
148
155
|
desc "calling a service that builds an invalid response"
|
149
156
|
setup do
|
150
157
|
@client.set_request('bad_response')
|
@@ -159,7 +166,7 @@ module Sanford::Server
|
|
159
166
|
|
160
167
|
end
|
161
168
|
|
162
|
-
class TemplateTests <
|
169
|
+
class TemplateTests < RunningAppServerTests
|
163
170
|
desc "calling a service that renders a template"
|
164
171
|
setup do
|
165
172
|
@message = Factory.text
|
@@ -175,7 +182,7 @@ module Sanford::Server
|
|
175
182
|
|
176
183
|
end
|
177
184
|
|
178
|
-
class KeepAliveTests <
|
185
|
+
class KeepAliveTests < RunningAppServerTests
|
179
186
|
desc "receiving a keep-alive connection"
|
180
187
|
setup do
|
181
188
|
# no bytes means our client won't write any, this mimics a keep-alive
|
@@ -190,7 +197,7 @@ module Sanford::Server
|
|
190
197
|
|
191
198
|
end
|
192
199
|
|
193
|
-
class TimeoutErrorTests <
|
200
|
+
class TimeoutErrorTests < RunningAppServerTests
|
194
201
|
desc "with a client that connects but doesn't send anything"
|
195
202
|
setup do
|
196
203
|
@current_sanford_timeout = ENV['SANFORD_TIMEOUT']
|
@@ -215,7 +222,7 @@ module Sanford::Server
|
|
215
222
|
|
216
223
|
end
|
217
224
|
|
218
|
-
class HaltTests <
|
225
|
+
class HaltTests < RunningAppServerTests
|
219
226
|
|
220
227
|
should "allow halting in a before callback" do
|
221
228
|
@client.set_request('halt', :when => 'before')
|
@@ -291,7 +298,7 @@ module Sanford::Server
|
|
291
298
|
|
292
299
|
end
|
293
300
|
|
294
|
-
class ErrorHandlerResponseTests <
|
301
|
+
class ErrorHandlerResponseTests < RunningAppServerTests
|
295
302
|
desc "calling a service that triggers an error handler"
|
296
303
|
setup do
|
297
304
|
@client.set_request('custom_error')
|
@@ -308,6 +315,33 @@ module Sanford::Server
|
|
308
315
|
|
309
316
|
end
|
310
317
|
|
318
|
+
class WithEnvIpAndPortTests < SystemTests
|
319
|
+
desc "with an env var ip and port"
|
320
|
+
setup do
|
321
|
+
# get our current ip address, need something different than 0.0.0.0 and
|
322
|
+
# 127.0.0.1 to bind to
|
323
|
+
ENV['SANFORD_IP'] = IPSocket.getaddress(Socket.gethostname)
|
324
|
+
ENV['SANFORD_PORT'] = (AppServer.port + 1).to_s
|
325
|
+
|
326
|
+
@server = AppServer.new
|
327
|
+
@client = TestClient.new(ENV['SANFORD_IP'], ENV['SANFORD_PORT'])
|
328
|
+
@server_runner = ServerRunner.new(@server).tap(&:start)
|
329
|
+
end
|
330
|
+
teardown do
|
331
|
+
@server_runner.stop
|
332
|
+
ENV.delete('SANFORD_IP')
|
333
|
+
ENV.delete('SANFORD_PORT')
|
334
|
+
end
|
335
|
+
|
336
|
+
should "run the server on the env var ip and port" do
|
337
|
+
@client.set_request('echo', :message => Factory.string)
|
338
|
+
response = nil
|
339
|
+
assert_nothing_raised{ response = @client.call }
|
340
|
+
assert_equal 200, response.code
|
341
|
+
end
|
342
|
+
|
343
|
+
end
|
344
|
+
|
311
345
|
class TestClient
|
312
346
|
attr_accessor :delay, :bytes
|
313
347
|
|
data/test/unit/process_tests.rb
CHANGED
@@ -223,23 +223,6 @@ class Sanford::Process
|
|
223
223
|
|
224
224
|
end
|
225
225
|
|
226
|
-
class RunWithIPAndPortTests < RunSetupTests
|
227
|
-
desc "with a custom IP and port is run"
|
228
|
-
setup do
|
229
|
-
ENV['SANFORD_IP'] = Factory.string
|
230
|
-
ENV['SANFORD_PORT'] = Factory.integer.to_s
|
231
|
-
@process = @process_class.new(@server_spy)
|
232
|
-
@process.run
|
233
|
-
end
|
234
|
-
|
235
|
-
should "have used the custom IP and port when listening" do
|
236
|
-
assert_true @server_spy.listen_called
|
237
|
-
expected = [ @process.server_ip, @process.server_port ]
|
238
|
-
assert_equal expected, @server_spy.listen_args
|
239
|
-
end
|
240
|
-
|
241
|
-
end
|
242
|
-
|
243
226
|
class RunWithServerFDTests < RunSetupTests
|
244
227
|
desc "with a server file descriptor is run"
|
245
228
|
setup do
|
@@ -8,46 +8,35 @@ class Sanford::ServerData
|
|
8
8
|
class UnitTests < Assert::Context
|
9
9
|
desc "Sanford::ServerData"
|
10
10
|
setup do
|
11
|
-
@
|
12
|
-
@
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
@server_data = Sanford::ServerData.new({
|
34
|
-
:name => @name,
|
35
|
-
:ip => @ip,
|
36
|
-
:port => @port,
|
37
|
-
:pid_file => @pid_file,
|
38
|
-
:receives_keep_alive => @receives_keep_alive,
|
39
|
-
:verbose_logging => @verbose_logging,
|
40
|
-
:logger => @logger,
|
41
|
-
:template_source => @template_source,
|
42
|
-
:init_procs => @init_procs,
|
43
|
-
:error_procs => @error_procs,
|
44
|
-
:worker_start_procs => @start_procs,
|
45
|
-
:worker_shutdown_procs => @shutdown_procs,
|
46
|
-
:worker_sleep_procs => @sleep_procs,
|
47
|
-
:worker_wakeup_procs => @wakeup_procs,
|
48
|
-
:router => @router,
|
11
|
+
@orig_ip_env_var = ENV['SANFORD_IP']
|
12
|
+
@orig_port_env_var = ENV['SANFORD_PORT']
|
13
|
+
ENV.delete('SANFORD_IP')
|
14
|
+
ENV.delete('SANFORD_PORT')
|
15
|
+
|
16
|
+
@route = Sanford::Route.new(Factory.string, TestHandler.to_s).tap(&:validate!)
|
17
|
+
@config_hash = {
|
18
|
+
:name => Factory.string,
|
19
|
+
:ip => Factory.string,
|
20
|
+
:port => Factory.integer,
|
21
|
+
:pid_file => Factory.file_path,
|
22
|
+
:receives_keep_alive => Factory.boolean,
|
23
|
+
:verbose_logging => Factory.boolean,
|
24
|
+
:logger => Factory.string,
|
25
|
+
:template_source => Factory.string,
|
26
|
+
:init_procs => Factory.integer(3).times.map{ proc{} },
|
27
|
+
:error_procs => Factory.integer(3).times.map{ proc{} },
|
28
|
+
:worker_start_procs => Factory.integer(3).times.map{ proc{} },
|
29
|
+
:worker_shutdown_procs => Factory.integer(3).times.map{ proc{} },
|
30
|
+
:worker_sleep_procs => Factory.integer(3).times.map{ proc{} },
|
31
|
+
:worker_wakeup_procs => Factory.integer(3).times.map{ proc{} },
|
32
|
+
:router => Factory.string,
|
49
33
|
:routes => [@route]
|
50
|
-
}
|
34
|
+
}
|
35
|
+
@server_data = Sanford::ServerData.new(@config_hash)
|
36
|
+
end
|
37
|
+
teardown do
|
38
|
+
ENV['SANFORD_IP'] = @orig_ip_env_var
|
39
|
+
ENV['SANFORD_PORT'] = @orig_port_env_var
|
51
40
|
end
|
52
41
|
subject{ @server_data }
|
53
42
|
|
@@ -62,26 +51,41 @@ class Sanford::ServerData
|
|
62
51
|
should have_accessors :ip, :port
|
63
52
|
|
64
53
|
should "know its attributes" do
|
65
|
-
|
66
|
-
assert_equal
|
67
|
-
assert_equal
|
68
|
-
assert_equal
|
54
|
+
h = @config_hash
|
55
|
+
assert_equal h[:name], subject.name
|
56
|
+
assert_equal h[:ip], subject.ip
|
57
|
+
assert_equal h[:port], subject.port
|
58
|
+
assert_equal h[:pid_file], subject.pid_file
|
59
|
+
|
60
|
+
assert_equal h[:receives_keep_alive], subject.receives_keep_alive
|
69
61
|
|
70
|
-
assert_equal
|
62
|
+
assert_equal h[:verbose_logging], subject.verbose_logging
|
63
|
+
assert_equal h[:logger], subject.logger
|
64
|
+
assert_equal h[:template_source], subject.template_source
|
71
65
|
|
72
|
-
assert_equal
|
73
|
-
assert_equal
|
74
|
-
assert_equal @template_source, subject.template_source
|
66
|
+
assert_equal h[:init_procs], subject.init_procs
|
67
|
+
assert_equal h[:error_procs], subject.error_procs
|
75
68
|
|
76
|
-
assert_equal
|
77
|
-
assert_equal
|
69
|
+
assert_equal h[:worker_start_procs], subject.worker_start_procs
|
70
|
+
assert_equal h[:worker_shutdown_procs], subject.worker_shutdown_procs
|
71
|
+
assert_equal h[:worker_sleep_procs], subject.worker_sleep_procs
|
72
|
+
assert_equal h[:worker_wakeup_procs], subject.worker_wakeup_procs
|
78
73
|
|
79
|
-
assert_equal
|
80
|
-
|
81
|
-
assert_equal @sleep_procs, subject.worker_sleep_procs
|
82
|
-
assert_equal @wakeup_procs, subject.worker_wakeup_procs
|
74
|
+
assert_equal h[:router], subject.router
|
75
|
+
end
|
83
76
|
|
84
|
-
|
77
|
+
should "use ip and port env vars if they are set" do
|
78
|
+
ENV['SANFORD_IP'] = Factory.string
|
79
|
+
ENV['SANFORD_PORT'] = Factory.integer.to_s
|
80
|
+
server_data = Sanford::ServerData.new(@config_hash)
|
81
|
+
assert_equal ENV['SANFORD_IP'], server_data.ip
|
82
|
+
assert_equal ENV['SANFORD_PORT'].to_i, server_data.port
|
83
|
+
|
84
|
+
ENV['SANFORD_IP'] = ""
|
85
|
+
ENV['SANFORD_PORT'] = ""
|
86
|
+
server_data = Sanford::ServerData.new(@config_hash)
|
87
|
+
assert_equal @config_hash[:ip], server_data.ip
|
88
|
+
assert_equal @config_hash[:port], server_data.port
|
85
89
|
end
|
86
90
|
|
87
91
|
should "build a routes lookup hash" do
|
data/test/unit/server_tests.rb
CHANGED
@@ -439,21 +439,12 @@ module Sanford::Server
|
|
439
439
|
|
440
440
|
desc "Configuration"
|
441
441
|
setup do
|
442
|
-
@orig_ip_env_var = ENV['SANFORD_IP']
|
443
|
-
@orig_port_env_var = ENV['SANFORD_PORT']
|
444
|
-
ENV.delete('SANFORD_IP')
|
445
|
-
ENV.delete('SANFORD_PORT')
|
446
|
-
|
447
442
|
@configuration = Configuration.new.tap do |c|
|
448
443
|
c.name Factory.string
|
449
444
|
c.ip Factory.string
|
450
445
|
c.port Factory.integer
|
451
446
|
end
|
452
447
|
end
|
453
|
-
teardown do
|
454
|
-
ENV['SANFORD_IP'] = @orig_ip_env_var
|
455
|
-
ENV['SANFORD_PORT'] = @orig_port_env_var
|
456
|
-
end
|
457
448
|
subject{ @configuration }
|
458
449
|
|
459
450
|
should have_options :name, :ip, :port, :pid_file
|
@@ -497,15 +488,6 @@ module Sanford::Server
|
|
497
488
|
assert_empty config.router.routes
|
498
489
|
end
|
499
490
|
|
500
|
-
should "use env vars for its options if they are set" do
|
501
|
-
ENV['SANFORD_IP'] = Factory.string
|
502
|
-
ENV['SANFORD_PORT'] = Factory.integer.to_s
|
503
|
-
|
504
|
-
config = Configuration.new
|
505
|
-
assert_equal ENV['SANFORD_IP'], config.ip
|
506
|
-
assert_equal ENV['SANFORD_PORT'].to_i, config.port
|
507
|
-
end
|
508
|
-
|
509
491
|
should "not be valid by default" do
|
510
492
|
assert_false subject.valid?
|
511
493
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sanford
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 33
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 15
|
9
|
-
-
|
10
|
-
version: 0.15.
|
9
|
+
- 1
|
10
|
+
version: 0.15.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Collin Redding
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2015-
|
19
|
+
date: 2015-11-04 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|