sanford 0.17.0 → 0.18.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/Gemfile +1 -1
- data/bench/report.rb +2 -0
- data/bench/report.txt +28 -37
- data/lib/sanford/connection_handler.rb +10 -3
- data/lib/sanford/error_handler.rb +4 -4
- data/lib/sanford/io_pipe.rb +40 -0
- data/lib/sanford/process.rb +108 -28
- data/lib/sanford/router.rb +5 -0
- data/lib/sanford/server.rb +133 -95
- data/lib/sanford/server_data.rb +27 -28
- data/lib/sanford/template_source.rb +2 -2
- data/lib/sanford/version.rb +1 -1
- data/sanford.gemspec +4 -5
- data/test/helper.rb +11 -0
- data/test/support/app_server.rb +6 -3
- data/test/support/factory.rb +7 -0
- data/test/system/server_tests.rb +21 -3
- data/test/system/service_handler_tests.rb +4 -4
- data/test/unit/cli_tests.rb +2 -2
- data/test/unit/connection_handler_tests.rb +107 -47
- data/test/unit/error_handler_tests.rb +11 -11
- data/test/unit/io_pipe_tests.rb +84 -0
- data/test/unit/process_tests.rb +266 -131
- data/test/unit/router_tests.rb +25 -7
- data/test/unit/server_data_tests.rb +68 -46
- data/test/unit/server_tests.rb +197 -240
- data/test/unit/template_engine_tests.rb +1 -1
- data/test/unit/template_source_tests.rb +6 -0
- data/test/unit/test_runner_tests.rb +0 -19
- metadata +12 -19
data/test/unit/router_tests.rb
CHANGED
@@ -8,12 +8,21 @@ class Sanford::Router
|
|
8
8
|
class UnitTests < Assert::Context
|
9
9
|
desc "Sanford::Router"
|
10
10
|
setup do
|
11
|
-
@
|
11
|
+
@router_class = Sanford::Router
|
12
|
+
end
|
13
|
+
subject{ @router_class }
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
class InitTests < UnitTests
|
18
|
+
desc "when init"
|
19
|
+
setup do
|
20
|
+
@router = @router_class.new
|
12
21
|
end
|
13
22
|
subject{ @router }
|
14
23
|
|
15
24
|
should have_readers :routes
|
16
|
-
should have_imeths :service_handler_ns, :service
|
25
|
+
should have_imeths :service_handler_ns, :service, :validate!
|
17
26
|
|
18
27
|
should "build an empty array for its routes by default" do
|
19
28
|
assert_equal [], subject.routes
|
@@ -49,17 +58,26 @@ class Sanford::Router
|
|
49
58
|
subject.service service_name, handler_name
|
50
59
|
|
51
60
|
route = subject.routes.last
|
52
|
-
|
53
|
-
assert_equal
|
61
|
+
exp = "#{namespace}::#{handler_name}"
|
62
|
+
assert_equal exp, route.handler_class_name
|
63
|
+
end
|
64
|
+
|
65
|
+
should "validate each route when validating" do
|
66
|
+
subject.service(Factory.string, TestHandler.to_s)
|
67
|
+
subject.routes.each{ |route| assert_nil route.handler_class }
|
68
|
+
subject.validate!
|
69
|
+
subject.routes.each{ |route| assert_not_nil route.handler_class }
|
54
70
|
end
|
55
71
|
|
56
72
|
should "know its custom inspect" do
|
57
73
|
reference = '0x0%x' % (subject.object_id << 1)
|
58
|
-
|
59
|
-
|
60
|
-
assert_equal
|
74
|
+
exp = "#<#{subject.class}:#{reference} " \
|
75
|
+
"@service_handler_ns=#{subject.service_handler_ns.inspect}>"
|
76
|
+
assert_equal exp, subject.inspect
|
61
77
|
end
|
62
78
|
|
63
79
|
end
|
64
80
|
|
81
|
+
TestHandler = Class.new
|
82
|
+
|
65
83
|
end
|
@@ -8,72 +8,76 @@ class Sanford::ServerData
|
|
8
8
|
class UnitTests < Assert::Context
|
9
9
|
desc "Sanford::ServerData"
|
10
10
|
setup do
|
11
|
-
@orig_ip_env_var
|
12
|
-
@orig_port_env_var
|
11
|
+
@orig_ip_env_var = ENV['SANFORD_IP']
|
12
|
+
@orig_port_env_var = ENV['SANFORD_PORT']
|
13
|
+
@orig_label_env_var = ENV['SANFORD_PROCESS_LABEL']
|
13
14
|
ENV.delete('SANFORD_IP')
|
14
15
|
ENV.delete('SANFORD_PORT')
|
16
|
+
ENV.delete('SANFORD_PROCESS_LABEL')
|
17
|
+
ENV.delete('SANFORD_DEBUG')
|
15
18
|
|
16
19
|
@route = Sanford::Route.new(Factory.string, TestHandler.to_s).tap(&:validate!)
|
20
|
+
|
17
21
|
@config_hash = {
|
18
22
|
:name => Factory.string,
|
19
23
|
:ip => Factory.string,
|
20
24
|
:port => Factory.integer,
|
21
25
|
:pid_file => Factory.file_path,
|
22
|
-
:
|
26
|
+
:shutdown_timeout => Factory.integer,
|
23
27
|
:worker_class => Class.new,
|
24
28
|
:worker_params => { Factory.string => Factory.string },
|
25
29
|
:num_workers => Factory.integer,
|
26
|
-
:verbose_logging => Factory.boolean,
|
27
|
-
:logger => Factory.string,
|
28
|
-
:template_source => Factory.string,
|
29
|
-
:shutdown_timeout => Factory.integer,
|
30
|
-
:init_procs => Factory.integer(3).times.map{ proc{} },
|
31
30
|
:error_procs => Factory.integer(3).times.map{ proc{} },
|
31
|
+
:template_source => Factory.string,
|
32
|
+
:logger => Factory.string,
|
32
33
|
:router => Factory.string,
|
34
|
+
:receives_keep_alive => Factory.boolean,
|
35
|
+
:verbose_logging => Factory.boolean,
|
33
36
|
:routes => [@route]
|
34
37
|
}
|
35
38
|
@server_data = Sanford::ServerData.new(@config_hash)
|
36
39
|
end
|
37
40
|
teardown do
|
38
|
-
ENV['SANFORD_IP']
|
39
|
-
ENV['SANFORD_PORT']
|
41
|
+
ENV['SANFORD_IP'] = @orig_ip_env_var
|
42
|
+
ENV['SANFORD_PORT'] = @orig_port_env_var
|
43
|
+
ENV['SANFORD_PROCESS_LABEL'] = @orig_label_env_var
|
44
|
+
ENV['SANFORD_DEBUG'] = @orig_debug_env_var
|
40
45
|
end
|
41
46
|
subject{ @server_data }
|
42
47
|
|
43
|
-
should have_readers :name
|
44
|
-
should have_readers :pid_file
|
45
|
-
should have_readers :receives_keep_alive
|
46
|
-
should have_readers :worker_class, :worker_params, :num_workers
|
47
|
-
should have_readers :debug, :logger, :dtcp_logger, :verbose_logging
|
48
|
-
should have_readers :template_source, :shutdown_timeout
|
49
|
-
should have_readers :init_procs, :error_procs
|
50
|
-
should have_readers :router, :routes
|
51
48
|
should have_accessors :ip, :port
|
49
|
+
should have_readers :name, :pid_file, :shutdown_timeout
|
50
|
+
should have_readers :worker_class, :worker_params, :num_workers
|
51
|
+
should have_readers :error_procs, :template_source, :logger, :router
|
52
|
+
should have_readers :receives_keep_alive, :verbose_logging
|
53
|
+
should have_readers :debug, :dtcp_logger, :routes, :process_label
|
54
|
+
should have_imeths :route_for
|
52
55
|
|
53
|
-
should "know its
|
56
|
+
should "know its attrs" do
|
54
57
|
h = @config_hash
|
55
58
|
assert_equal h[:name], subject.name
|
56
59
|
assert_equal h[:ip], subject.ip
|
57
60
|
assert_equal h[:port], subject.port
|
58
61
|
assert_equal h[:pid_file], subject.pid_file
|
59
62
|
|
60
|
-
assert_equal h[:
|
61
|
-
|
62
|
-
assert_equal h[:worker_class], subject.worker_class
|
63
|
-
assert_equal h[:worker_params], subject.worker_params
|
64
|
-
assert_equal h[:num_workers], subject.num_workers
|
65
|
-
|
66
|
-
assert_equal h[:verbose_logging], subject.verbose_logging
|
67
|
-
assert_equal h[:logger], subject.logger
|
63
|
+
assert_equal h[:shutdown_timeout], subject.shutdown_timeout
|
68
64
|
|
65
|
+
assert_equal h[:worker_class], subject.worker_class
|
66
|
+
assert_equal h[:worker_params], subject.worker_params
|
67
|
+
assert_equal h[:num_workers], subject.num_workers
|
68
|
+
assert_equal h[:error_procs], subject.error_procs
|
69
69
|
assert_equal h[:template_source], subject.template_source
|
70
|
+
assert_equal h[:logger], subject.logger
|
71
|
+
assert_equal h[:router], subject.router
|
70
72
|
|
71
|
-
assert_equal h[:
|
73
|
+
assert_equal h[:receives_keep_alive], subject.receives_keep_alive
|
74
|
+
assert_equal h[:verbose_logging], subject.verbose_logging
|
72
75
|
|
73
|
-
|
74
|
-
|
76
|
+
assert_false subject.debug
|
77
|
+
assert_nil subject.dtcp_logger
|
75
78
|
|
76
|
-
|
79
|
+
exp = { @route.name => @route }
|
80
|
+
assert_equal exp, subject.routes
|
77
81
|
end
|
78
82
|
|
79
83
|
should "use ip and port env vars if they are set" do
|
@@ -90,14 +94,32 @@ class Sanford::ServerData
|
|
90
94
|
assert_equal @config_hash[:port], server_data.port
|
91
95
|
end
|
92
96
|
|
93
|
-
should "
|
94
|
-
|
95
|
-
|
97
|
+
should "know its process label" do
|
98
|
+
ENV['SANFORD_PROCESS_LABEL'] = Factory.string
|
99
|
+
server_data = Sanford::ServerData.new(@config_hash)
|
100
|
+
exp = ENV['SANFORD_PROCESS_LABEL']
|
101
|
+
assert_equal exp, server_data.process_label
|
102
|
+
|
103
|
+
ENV['SANFORD_PROCESS_LABEL'] = ""
|
104
|
+
server_data = Sanford::ServerData.new(@config_hash)
|
105
|
+
exp = "#{@config_hash[:name]}-#{@config_hash[:ip]}-#{@config_hash[:port]}"
|
106
|
+
assert_equal exp, server_data.process_label
|
107
|
+
|
108
|
+
ENV.delete('SANFORD_PROCESS_LABEL')
|
109
|
+
server_data = Sanford::ServerData.new(@config_hash)
|
110
|
+
exp = "#{@config_hash[:name]}-#{@config_hash[:ip]}-#{@config_hash[:port]}"
|
111
|
+
assert_equal exp, server_data.process_label
|
112
|
+
end
|
113
|
+
|
114
|
+
should "use the debug env var if set" do
|
115
|
+
ENV['SANFORD_DEBUG'] = Factory.string
|
116
|
+
server_data = Sanford::ServerData.new(@config_hash)
|
117
|
+
assert_true server_data.debug
|
118
|
+
assert_equal server_data.logger, server_data.dtcp_logger
|
96
119
|
end
|
97
120
|
|
98
|
-
should "
|
99
|
-
route
|
100
|
-
assert_equal @route, route
|
121
|
+
should "look up a route using `route_for`" do
|
122
|
+
assert_equal @route, subject.route_for(@route.name)
|
101
123
|
end
|
102
124
|
|
103
125
|
should "raise a not found error using `route_for` with an invalid name" do
|
@@ -106,30 +128,30 @@ class Sanford::ServerData
|
|
106
128
|
end
|
107
129
|
end
|
108
130
|
|
109
|
-
should "default its
|
131
|
+
should "default its attrs when they aren't provided" do
|
110
132
|
server_data = Sanford::ServerData.new
|
111
133
|
assert_nil server_data.name
|
112
134
|
assert_nil server_data.ip
|
113
135
|
assert_nil server_data.port
|
114
136
|
assert_nil server_data.pid_file
|
115
|
-
|
116
|
-
assert_false server_data.receives_keep_alive
|
137
|
+
assert_nil server_data.shutdown_timeout
|
117
138
|
|
118
139
|
assert_nil server_data.worker_class
|
119
140
|
assert_equal({}, server_data.worker_params)
|
120
141
|
assert_nil server_data.num_workers
|
121
142
|
|
122
|
-
|
123
|
-
assert_nil server_data.logger
|
143
|
+
assert_equal [], server_data.error_procs
|
124
144
|
|
125
145
|
assert_nil server_data.template_source
|
146
|
+
assert_nil server_data.logger
|
147
|
+
assert_nil server_data.router
|
126
148
|
|
127
|
-
|
149
|
+
assert_false server_data.receives_keep_alive
|
150
|
+
assert_false server_data.verbose_logging
|
128
151
|
|
129
|
-
|
130
|
-
|
152
|
+
assert_false server_data.debug
|
153
|
+
assert_nil server_data.dtcp_logger
|
131
154
|
|
132
|
-
assert_nil server_data.router
|
133
155
|
assert_equal({}, server_data.routes)
|
134
156
|
end
|
135
157
|
|
data/test/unit/server_tests.rb
CHANGED
@@ -3,158 +3,107 @@ require 'sanford/server'
|
|
3
3
|
|
4
4
|
require 'dat-tcp/server_spy'
|
5
5
|
require 'much-plugin'
|
6
|
-
require '
|
7
|
-
require 'sanford/
|
6
|
+
require 'sanford/logger'
|
7
|
+
require 'sanford/router'
|
8
|
+
require 'sanford/template_source'
|
8
9
|
|
9
10
|
module Sanford::Server
|
10
11
|
|
11
12
|
class UnitTests < Assert::Context
|
12
13
|
desc "Sanford::Server"
|
13
14
|
setup do
|
14
|
-
@server_class = Class.new
|
15
|
-
include Sanford::Server
|
16
|
-
end
|
15
|
+
@server_class = Class.new{ include Sanford::Server }
|
17
16
|
end
|
18
17
|
subject{ @server_class }
|
19
18
|
|
20
|
-
should have_imeths :
|
21
|
-
should have_imeths :name, :ip, :port, :pid_file
|
22
|
-
should have_imeths :
|
23
|
-
should have_imeths :
|
24
|
-
should have_imeths :
|
25
|
-
should have_imeths :verbose_logging, :logger
|
26
|
-
should have_imeths :shutdown_timeout
|
27
|
-
should have_imeths :init, :error
|
28
|
-
should have_imeths :router, :template_source
|
19
|
+
should have_imeths :config
|
20
|
+
should have_imeths :name, :ip, :port, :pid_file, :shutdown_timeout
|
21
|
+
should have_imeths :worker_class, :worker_params, :num_workers, :workers
|
22
|
+
should have_imeths :init, :error, :template_source, :logger, :router
|
23
|
+
should have_imeths :receives_keep_alive, :verbose_logging
|
29
24
|
|
30
25
|
should "use much-plugin" do
|
31
26
|
assert_includes MuchPlugin, Sanford::Server
|
32
27
|
end
|
33
28
|
|
34
|
-
should "
|
35
|
-
config = subject.
|
36
|
-
assert_instance_of Configuration, config
|
37
|
-
assert_same config, subject.configuration
|
38
|
-
end
|
29
|
+
should "allow setting its config values" do
|
30
|
+
config = subject.config
|
39
31
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
assert_equal new_name, subject.configuration.name
|
44
|
-
assert_equal new_name, subject.name
|
45
|
-
end
|
32
|
+
exp = Factory.string
|
33
|
+
subject.name exp
|
34
|
+
assert_equal exp, config.name
|
46
35
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
assert_equal new_ip, subject.configuration.ip
|
51
|
-
assert_equal new_ip, subject.ip
|
52
|
-
end
|
36
|
+
exp = Factory.string
|
37
|
+
subject.ip exp
|
38
|
+
assert_equal exp, config.ip
|
53
39
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
assert_equal new_port, subject.configuration.port
|
58
|
-
assert_equal new_port, subject.port
|
59
|
-
end
|
40
|
+
exp = Factory.integer
|
41
|
+
subject.port exp
|
42
|
+
assert_equal exp, config.port
|
60
43
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
exp = Pathname.new(new_pid_file)
|
65
|
-
assert_equal exp, subject.configuration.pid_file
|
66
|
-
assert_equal exp, subject.pid_file
|
67
|
-
end
|
44
|
+
exp = Factory.file_path
|
45
|
+
subject.pid_file exp
|
46
|
+
assert_equal exp, config.pid_file
|
68
47
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
assert_equal new_keep_alive, subject.configuration.receives_keep_alive
|
73
|
-
assert_equal new_keep_alive, subject.receives_keep_alive
|
74
|
-
end
|
48
|
+
exp = Factory.integer
|
49
|
+
subject.shutdown_timeout exp
|
50
|
+
assert_equal exp, config.shutdown_timeout
|
75
51
|
|
76
|
-
|
77
|
-
|
78
|
-
subject.worker_class
|
79
|
-
assert_equal new_worker_class, subject.configuration.worker_class
|
80
|
-
assert_equal new_worker_class, subject.worker_class
|
81
|
-
end
|
52
|
+
exp = Class.new
|
53
|
+
subject.worker_class exp
|
54
|
+
assert_equal exp, subject.config.worker_class
|
82
55
|
|
83
|
-
|
84
|
-
|
85
|
-
subject.worker_params
|
86
|
-
assert_equal new_worker_params, subject.configuration.worker_params
|
87
|
-
assert_equal new_worker_params, subject.worker_params
|
88
|
-
end
|
56
|
+
exp = { Factory.string => Factory.string }
|
57
|
+
subject.worker_params exp
|
58
|
+
assert_equal exp, subject.config.worker_params
|
89
59
|
|
90
|
-
|
91
|
-
|
92
|
-
subject.num_workers
|
93
|
-
assert_equal
|
94
|
-
assert_equal new_num_workers, subject.num_workers
|
95
|
-
end
|
60
|
+
exp = Factory.integer
|
61
|
+
subject.num_workers(exp)
|
62
|
+
assert_equal exp, subject.config.num_workers
|
63
|
+
assert_equal exp, subject.workers
|
96
64
|
|
97
|
-
|
98
|
-
|
99
|
-
subject.
|
100
|
-
assert_equal
|
101
|
-
assert_equal
|
102
|
-
end
|
65
|
+
exp = proc{ }
|
66
|
+
assert_equal 0, config.init_procs.size
|
67
|
+
subject.init(&exp)
|
68
|
+
assert_equal 1, config.init_procs.size
|
69
|
+
assert_equal exp, config.init_procs.first
|
103
70
|
|
104
|
-
|
105
|
-
|
106
|
-
subject.
|
107
|
-
assert_equal
|
108
|
-
assert_equal
|
109
|
-
end
|
71
|
+
exp = proc{ }
|
72
|
+
assert_equal 0, config.error_procs.size
|
73
|
+
subject.error(&exp)
|
74
|
+
assert_equal 1, config.error_procs.size
|
75
|
+
assert_equal exp, config.error_procs.first
|
110
76
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
assert_equal new_logger, subject.configuration.logger
|
115
|
-
assert_equal new_logger, subject.logger
|
116
|
-
end
|
77
|
+
exp = Sanford::TemplateSource.new(Factory.path)
|
78
|
+
subject.template_source exp
|
79
|
+
assert_equal exp, config.template_source
|
117
80
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
assert_equal new_shutdown_timeout, subject.configuration.shutdown_timeout
|
122
|
-
assert_equal new_shutdown_timeout, subject.shutdown_timeout
|
123
|
-
end
|
81
|
+
exp = Logger.new(STDOUT)
|
82
|
+
subject.logger exp
|
83
|
+
assert_equal exp, config.logger
|
124
84
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
assert_includes new_init_proc, subject.configuration.init_procs
|
129
|
-
end
|
85
|
+
exp = Factory.boolean
|
86
|
+
subject.receives_keep_alive exp
|
87
|
+
assert_equal exp, config.receives_keep_alive
|
130
88
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
assert_includes new_error_proc, subject.configuration.error_procs
|
89
|
+
exp = Factory.boolean
|
90
|
+
subject.verbose_logging exp
|
91
|
+
assert_equal exp, config.verbose_logging
|
135
92
|
end
|
136
93
|
|
137
|
-
should "
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
94
|
+
should "have a router by default and allow overriding it" do
|
95
|
+
assert_kind_of Sanford::Router, subject.router
|
96
|
+
|
97
|
+
new_router = Sanford::Router.new
|
98
|
+
subject.router new_router
|
99
|
+
assert_same new_router, subject.config.router
|
100
|
+
assert_same new_router, subject.router
|
142
101
|
end
|
143
102
|
|
144
103
|
should "allow configuring the router by passing a block to `router`" do
|
145
|
-
new_router = Factory.string
|
146
|
-
|
147
104
|
block_scope = nil
|
148
|
-
subject.router
|
149
|
-
assert_equal
|
150
|
-
assert_equal new_router, block_scope
|
151
|
-
end
|
152
|
-
|
153
|
-
should "allow setting the configuration template source" do
|
154
|
-
new_template_source = Factory.string
|
155
|
-
subject.template_source(new_template_source)
|
156
|
-
assert_equal new_template_source, subject.configuration.template_source
|
157
|
-
assert_equal new_template_source, subject.template_source
|
105
|
+
subject.router{ block_scope = self }
|
106
|
+
assert_equal subject.router, block_scope
|
158
107
|
end
|
159
108
|
|
160
109
|
end
|
@@ -165,17 +114,13 @@ module Sanford::Server
|
|
165
114
|
@server_class.name Factory.string
|
166
115
|
@server_class.ip Factory.string
|
167
116
|
@server_class.port Factory.integer
|
168
|
-
@server_class.num_workers Factory.integer
|
169
|
-
@server_class.worker_params(Factory.string => Factory.string)
|
170
117
|
@server_class.shutdown_timeout Factory.integer
|
118
|
+
@server_class.worker_params(Factory.string => Factory.string)
|
119
|
+
@server_class.num_workers Factory.integer
|
171
120
|
|
172
121
|
@error_procs = Factory.integer(3).times.map{ proc{} }
|
173
122
|
@error_procs.each{ |p| @server_class.error(&p) }
|
174
123
|
|
175
|
-
@server_class.router do
|
176
|
-
service Factory.string, TestHandler.to_s
|
177
|
-
end
|
178
|
-
|
179
124
|
@dtcp_spy = nil
|
180
125
|
Assert.stub(DatTCP::Server, :new) do |*args|
|
181
126
|
@dtcp_spy = DatTCP::ServerSpy.new(*args)
|
@@ -185,37 +130,44 @@ module Sanford::Server
|
|
185
130
|
end
|
186
131
|
subject{ @server }
|
187
132
|
|
188
|
-
should have_readers :server_data
|
189
|
-
should have_imeths :
|
190
|
-
should have_imeths :
|
191
|
-
should have_imeths :configured_ip, :configured_port
|
133
|
+
should have_readers :server_data
|
134
|
+
should have_imeths :ip, :port, :file_descriptor, :client_file_descriptors
|
135
|
+
should have_imeths :name, :configured_ip, :configured_port, :process_label
|
192
136
|
should have_imeths :pid_file, :logger, :router, :template_source
|
193
137
|
should have_imeths :listen, :start, :pause, :stop, :halt
|
194
|
-
should have_imeths :paused?
|
138
|
+
should have_imeths :listening?, :running?, :paused?
|
195
139
|
|
196
|
-
should "have validated its
|
197
|
-
assert_true
|
140
|
+
should "have validated its config" do
|
141
|
+
assert_true @server_class.config.valid?
|
198
142
|
end
|
199
143
|
|
200
144
|
should "know its server data" do
|
201
|
-
|
202
|
-
data
|
145
|
+
config = @server_class.config
|
146
|
+
data = subject.server_data
|
203
147
|
|
204
148
|
assert_instance_of Sanford::ServerData, data
|
205
|
-
assert_equal configuration.name, data.name
|
206
|
-
assert_equal configuration.ip, data.ip
|
207
|
-
assert_equal configuration.port, data.port
|
208
|
-
assert_equal configuration.worker_class, data.worker_class
|
209
|
-
assert_equal configuration.worker_params, data.worker_params
|
210
|
-
assert_equal configuration.verbose_logging, data.verbose_logging
|
211
|
-
assert_equal configuration.receives_keep_alive, data.receives_keep_alive
|
212
|
-
assert_equal configuration.error_procs, data.error_procs
|
213
|
-
assert_equal configuration.routes, data.routes.values
|
214
149
|
|
215
|
-
|
150
|
+
assert_equal config.name, data.name
|
151
|
+
assert_equal config.ip, data.ip
|
152
|
+
assert_equal config.port, data.port
|
153
|
+
assert_equal config.pid_file, data.pid_file
|
154
|
+
assert_equal config.shutdown_timeout, data.shutdown_timeout
|
155
|
+
assert_equal config.worker_class, data.worker_class
|
156
|
+
assert_equal config.worker_params, data.worker_params
|
157
|
+
assert_equal config.num_workers, data.num_workers
|
158
|
+
assert_equal config.error_procs, data.error_procs
|
159
|
+
|
160
|
+
assert_instance_of config.logger.class, data.logger
|
161
|
+
assert_instance_of config.router.class, data.router
|
162
|
+
|
163
|
+
assert_equal config.template_source, data.template_source
|
164
|
+
assert_equal config.verbose_logging, data.verbose_logging
|
165
|
+
assert_equal config.receives_keep_alive, data.receives_keep_alive
|
166
|
+
|
167
|
+
assert_equal config.routes, data.routes.values
|
216
168
|
end
|
217
169
|
|
218
|
-
should "
|
170
|
+
should "build a dat-tcp server" do
|
219
171
|
data = subject.server_data
|
220
172
|
|
221
173
|
assert_not_nil @dtcp_spy
|
@@ -227,21 +179,19 @@ module Sanford::Server
|
|
227
179
|
:sanford_server_data => data
|
228
180
|
})
|
229
181
|
assert_equal exp, @dtcp_spy.worker_params
|
230
|
-
|
231
|
-
assert_equal @dtcp_spy, subject.dat_tcp_server
|
232
182
|
end
|
233
183
|
|
234
184
|
should "demeter its server data" do
|
235
|
-
|
236
|
-
assert_equal subject.server_data.ip, subject.configured_ip
|
237
|
-
assert_equal subject.server_data.port, subject.configured_port
|
238
|
-
assert_equal subject.server_data.pid_file, subject.pid_file
|
239
|
-
end
|
185
|
+
data = subject.server_data
|
240
186
|
|
241
|
-
|
242
|
-
assert_equal
|
243
|
-
assert_equal
|
244
|
-
assert_equal
|
187
|
+
assert_equal data.name, subject.name
|
188
|
+
assert_equal data.ip, subject.configured_ip
|
189
|
+
assert_equal data.port, subject.configured_port
|
190
|
+
assert_equal data.process_label, subject.process_label
|
191
|
+
assert_equal data.pid_file, subject.pid_file
|
192
|
+
assert_equal data.logger, subject.logger
|
193
|
+
assert_equal data.router, subject.router
|
194
|
+
assert_equal data.template_source, subject.template_source
|
245
195
|
end
|
246
196
|
|
247
197
|
should "call listen on its dat tcp server using `listen`" do
|
@@ -324,13 +274,21 @@ module Sanford::Server
|
|
324
274
|
assert_equal wait, @dtcp_spy.waiting_for_halt
|
325
275
|
end
|
326
276
|
|
327
|
-
should "know if its been paused" do
|
277
|
+
should "know if its listening, running or been paused" do
|
278
|
+
assert_false subject.listening?
|
279
|
+
assert_false subject.running?
|
328
280
|
assert_false subject.paused?
|
329
281
|
subject.listen
|
282
|
+
assert_true subject.listening?
|
283
|
+
assert_false subject.running?
|
330
284
|
assert_true subject.paused?
|
331
285
|
subject.start
|
286
|
+
assert_true subject.listening?
|
287
|
+
assert_true subject.running?
|
332
288
|
assert_false subject.paused?
|
333
289
|
subject.pause
|
290
|
+
assert_true subject.listening?
|
291
|
+
assert_false subject.running?
|
334
292
|
assert_true subject.paused?
|
335
293
|
end
|
336
294
|
|
@@ -355,111 +313,85 @@ module Sanford::Server
|
|
355
313
|
|
356
314
|
end
|
357
315
|
|
358
|
-
class
|
359
|
-
|
360
|
-
|
361
|
-
desc "Configuration"
|
316
|
+
class ConfigTests < UnitTests
|
317
|
+
desc "Config"
|
362
318
|
setup do
|
363
|
-
@
|
364
|
-
|
365
|
-
c.ip Factory.string
|
366
|
-
c.port Factory.integer
|
367
|
-
end
|
319
|
+
@config_class = Config
|
320
|
+
@config = Config.new
|
368
321
|
end
|
369
|
-
subject{ @
|
322
|
+
subject{ @config }
|
370
323
|
|
371
|
-
should
|
372
|
-
should have_options :receives_keep_alive
|
373
|
-
should have_options :verbose_logging, :logger
|
374
|
-
should have_options :template_source
|
375
|
-
should have_accessors :init_procs, :error_procs
|
324
|
+
should have_accessors :name, :ip, :port, :pid_file, :shutdown_timeout
|
376
325
|
should have_accessors :worker_class, :worker_params, :num_workers
|
377
|
-
should have_accessors :
|
378
|
-
should have_accessors :
|
379
|
-
should have_imeths :routes
|
380
|
-
should have_imeths :to_hash
|
381
|
-
should have_imeths :valid?, :validate!
|
326
|
+
should have_accessors :init_procs, :error_procs, :template_source, :logger, :router
|
327
|
+
should have_accessors :receives_keep_alive, :verbose_logging
|
328
|
+
should have_imeths :routes, :valid?, :validate!
|
382
329
|
|
383
|
-
should "
|
384
|
-
|
330
|
+
should "know its default attr values" do
|
331
|
+
assert_equal 4, @config_class::DEFAULT_NUM_WORKERS
|
332
|
+
assert_equal '0.0.0.0', @config_class::DEFAULT_IP_ADDRESS
|
385
333
|
end
|
386
334
|
|
387
|
-
should "
|
388
|
-
|
389
|
-
end
|
335
|
+
should "default its attrs" do
|
336
|
+
assert_nil subject.name
|
390
337
|
|
391
|
-
|
392
|
-
|
393
|
-
assert_nil config.name
|
394
|
-
assert_equal '0.0.0.0', config.ip
|
395
|
-
assert_nil config.port
|
396
|
-
assert_nil config.pid_file
|
338
|
+
exp = @config_class::DEFAULT_IP_ADDRESS
|
339
|
+
assert_equal exp, subject.ip
|
397
340
|
|
398
|
-
|
341
|
+
assert_nil subject.port
|
342
|
+
assert_nil subject.pid_file
|
343
|
+
assert_nil subject.shutdown_timeout
|
399
344
|
|
400
|
-
|
401
|
-
assert_instance_of Sanford::NullLogger, config.logger
|
402
|
-
assert_instance_of Sanford::NullTemplateSource, config.template_source
|
345
|
+
assert_equal DefaultWorker, subject.worker_class
|
403
346
|
|
404
|
-
|
405
|
-
assert_nil config.worker_params
|
406
|
-
assert_equal Configuration::DEFAULT_NUM_WORKERS, config.num_workers
|
347
|
+
assert_nil subject.worker_params
|
407
348
|
|
408
|
-
|
349
|
+
exp = @config_class::DEFAULT_NUM_WORKERS
|
350
|
+
assert_equal exp, subject.num_workers
|
409
351
|
|
410
|
-
assert_equal [],
|
411
|
-
assert_equal [],
|
352
|
+
assert_equal [], subject.init_procs
|
353
|
+
assert_equal [], subject.error_procs
|
412
354
|
|
413
|
-
assert_instance_of Sanford::
|
414
|
-
|
415
|
-
end
|
355
|
+
assert_instance_of Sanford::NullTemplateSource, subject.template_source
|
356
|
+
assert_equal ENV['PWD'], subject.template_source.path
|
416
357
|
|
417
|
-
|
418
|
-
|
358
|
+
assert_instance_of Sanford::NullLogger, subject.logger
|
359
|
+
assert_instance_of Sanford::Router, subject.router
|
360
|
+
|
361
|
+
assert_equal false, subject.receives_keep_alive
|
362
|
+
assert_equal true, subject.verbose_logging
|
419
363
|
end
|
420
364
|
|
421
|
-
should "
|
422
|
-
assert_equal subject.router.routes, subject.routes
|
423
|
-
subject.router.service(Factory.string, TestHandler.to_s)
|
365
|
+
should "demeter its router" do
|
424
366
|
assert_equal subject.router.routes, subject.routes
|
425
367
|
end
|
426
368
|
|
427
|
-
should "
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
assert_equal subject.init_procs, config_hash[:init_procs]
|
434
|
-
assert_equal subject.error_procs, config_hash[:error_procs]
|
435
|
-
assert_equal subject.router, config_hash[:router]
|
436
|
-
assert_equal subject.routes, config_hash[:routes]
|
437
|
-
end
|
369
|
+
should "not be valid until validate! has been run" do
|
370
|
+
assert_false subject.valid?
|
371
|
+
|
372
|
+
subject.name = Factory.string
|
373
|
+
subject.ip = Factory.string
|
374
|
+
subject.port = Factory.integer
|
438
375
|
|
439
|
-
should "call its init procs when validated" do
|
440
|
-
called = false
|
441
|
-
subject.init_procs << proc{ called = true }
|
442
376
|
subject.validate!
|
443
|
-
assert_true
|
377
|
+
assert_true subject.valid?
|
444
378
|
end
|
445
379
|
|
446
|
-
should "
|
447
|
-
subject.name = nil
|
448
|
-
assert_raises(InvalidError){ subject.validate! }
|
380
|
+
should "complain if validating and its name/ip/port is nil" do
|
449
381
|
subject.name = Factory.string
|
382
|
+
subject.ip = Factory.string
|
383
|
+
subject.port = Factory.integer
|
450
384
|
|
451
|
-
|
385
|
+
a = [:name, :ip, :port].sample
|
386
|
+
subject.send("#{a}=", nil)
|
452
387
|
assert_raises(InvalidError){ subject.validate! }
|
453
|
-
|
388
|
+
end
|
454
389
|
|
455
|
-
|
456
|
-
|
390
|
+
should "complain if validating and its worker class isn't a Worker" do
|
391
|
+
subject.name = Factory.string
|
392
|
+
subject.ip = Factory.string
|
457
393
|
subject.port = Factory.integer
|
458
394
|
|
459
|
-
assert_nothing_raised{ subject.validate! }
|
460
|
-
end
|
461
|
-
|
462
|
-
should "validate its worker class when validated" do
|
463
395
|
subject.worker_class = Module.new
|
464
396
|
assert_raises(InvalidError){ subject.validate! }
|
465
397
|
|
@@ -467,17 +399,44 @@ module Sanford::Server
|
|
467
399
|
assert_raises(InvalidError){ subject.validate! }
|
468
400
|
end
|
469
401
|
|
470
|
-
|
471
|
-
|
472
|
-
|
402
|
+
end
|
403
|
+
|
404
|
+
class ValidationTests < ConfigTests
|
405
|
+
desc "when successfully validated"
|
406
|
+
setup do
|
407
|
+
@router = Sanford::Router.new
|
408
|
+
@router_validate_called = false
|
409
|
+
Assert.stub(@router, :validate!){ @router_validate_called = true }
|
410
|
+
|
411
|
+
@config = Config.new.tap do |c|
|
412
|
+
c.name = Factory.string
|
413
|
+
c.ip = Factory.string
|
414
|
+
c.port = Factory.integer
|
415
|
+
c.router = @router
|
416
|
+
end
|
417
|
+
|
418
|
+
@initialized = false
|
419
|
+
@config.init_procs << proc{ @initialized = true }
|
420
|
+
|
421
|
+
@other_initialized = false
|
422
|
+
@config.init_procs << proc{ @other_initialized = true }
|
423
|
+
end
|
424
|
+
|
425
|
+
should "call its init procs" do
|
426
|
+
assert_equal false, @initialized
|
427
|
+
assert_equal false, @other_initialized
|
428
|
+
|
473
429
|
subject.validate!
|
474
|
-
|
430
|
+
|
431
|
+
assert_equal true, @initialized
|
432
|
+
assert_equal true, @other_initialized
|
475
433
|
end
|
476
434
|
|
477
|
-
should "
|
478
|
-
assert_false
|
435
|
+
should "call validate! on the router" do
|
436
|
+
assert_false @router_validate_called
|
437
|
+
|
479
438
|
subject.validate!
|
480
|
-
assert_true
|
439
|
+
assert_true @router_validate_called
|
481
440
|
end
|
482
441
|
|
483
442
|
should "only be able to be validated once" do
|
@@ -491,8 +450,6 @@ module Sanford::Server
|
|
491
450
|
|
492
451
|
end
|
493
452
|
|
494
|
-
TestHandler = Class.new
|
495
|
-
|
496
453
|
class TCPServerSpy
|
497
454
|
attr_reader :set_socket_option_calls
|
498
455
|
|