sanford 0.4.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +16 -20
- data/Rakefile +0 -2
- data/bench/report.txt +30 -32
- data/bench/runner.rb +6 -5
- data/bench/services.rb +2 -2
- data/bench/tasks.rb +23 -0
- data/bin/sanford +7 -0
- data/lib/sanford.rb +2 -1
- data/lib/sanford/cli.rb +364 -0
- data/lib/sanford/error_handler.rb +1 -0
- data/lib/sanford/host.rb +18 -13
- data/lib/sanford/host_data.rb +21 -17
- data/lib/sanford/runner.rb +6 -3
- data/lib/sanford/server.rb +64 -12
- data/lib/sanford/service_handler.rb +19 -0
- data/lib/sanford/test_runner.rb +3 -4
- data/lib/sanford/version.rb +1 -1
- data/lib/sanford/worker.rb +4 -6
- data/sanford.gemspec +1 -2
- data/test/support/fake_connection.rb +12 -3
- data/test/support/helpers.rb +11 -34
- data/test/support/service_handlers.rb +9 -0
- data/test/support/services.rb +9 -8
- data/test/support/simple_client.rb +6 -0
- data/test/system/managing_test.rb +55 -66
- data/test/system/request_handling_test.rb +248 -36
- data/test/unit/config_test.rb +1 -1
- data/test/unit/host_configuration_test.rb +2 -6
- data/test/unit/host_data_test.rb +13 -30
- data/test/unit/host_test.rb +3 -3
- data/test/unit/manager_pid_file_test.rb +45 -0
- data/test/unit/manager_test.rb +133 -8
- data/test/unit/runner_test.rb +10 -0
- data/test/unit/server_test.rb +24 -5
- data/test/unit/service_handler_test.rb +19 -0
- data/test/unit/worker_test.rb +3 -192
- metadata +22 -36
- data/lib/sanford/exceptions.rb +0 -37
- data/lib/sanford/manager.rb +0 -49
- data/lib/sanford/rake.rb +0 -42
data/test/unit/config_test.rb
CHANGED
@@ -9,8 +9,8 @@ class Sanford::Host::Configuration
|
|
9
9
|
end
|
10
10
|
subject{ @configuration }
|
11
11
|
|
12
|
-
should have_instance_methods :name, :ip, :port, :
|
13
|
-
:error_proc
|
12
|
+
should have_instance_methods :name, :ip, :port, :pid_file, :logger,
|
13
|
+
:verbose_logging, :logger, :error_proc
|
14
14
|
|
15
15
|
should "default name to the class name of the host" do
|
16
16
|
assert_equal 'EmptyHost', subject.name
|
@@ -24,10 +24,6 @@ class Sanford::Host::Configuration
|
|
24
24
|
assert_nil subject.port
|
25
25
|
end
|
26
26
|
|
27
|
-
should "default pid_dir to the current working directory" do
|
28
|
-
assert_equal Pathname.new(Dir.pwd), subject.pid_dir
|
29
|
-
end
|
30
|
-
|
31
27
|
should "default logger to a null logger" do
|
32
28
|
assert_instance_of Sanford::NullLogger, subject.logger
|
33
29
|
end
|
data/test/unit/host_data_test.rb
CHANGED
@@ -1,52 +1,35 @@
|
|
1
1
|
require 'assert'
|
2
2
|
|
3
|
-
require 'sanford/manager'
|
4
|
-
|
5
3
|
class Sanford::HostData
|
6
4
|
|
7
5
|
class BaseTest < Assert::Context
|
8
6
|
desc "Sanford::HostData"
|
9
7
|
setup do
|
8
|
+
TestHost.init_has_been_called = false
|
10
9
|
@host_data = Sanford::HostData.new(TestHost)
|
11
10
|
end
|
11
|
+
teardown do
|
12
|
+
TestHost.init_has_been_called = false
|
13
|
+
end
|
12
14
|
subject{ @host_data }
|
13
15
|
|
14
|
-
should have_instance_methods :name, :
|
15
|
-
:
|
16
|
+
should have_instance_methods :name, :logger, :verbose, :error_proc,
|
17
|
+
:handler_class_for
|
16
18
|
|
17
19
|
should "default it's configuration from the service host, but allow overrides" do
|
18
|
-
host_data = Sanford::HostData.new(TestHost, :
|
20
|
+
host_data = Sanford::HostData.new(TestHost, :verbose_logging => false)
|
19
21
|
|
20
|
-
assert_equal
|
21
|
-
assert_equal
|
22
|
-
assert_equal 12345, host_data.port
|
22
|
+
assert_equal TestHost.receives_keep_alive, host_data.keep_alive
|
23
|
+
assert_equal false, host_data.verbose
|
23
24
|
end
|
24
25
|
|
25
26
|
should "ignore nil values passed as overrides" do
|
26
|
-
host_data = Sanford::HostData.new(TestHost, :
|
27
|
-
|
28
|
-
assert_not_nil host_data.ip
|
29
|
-
end
|
30
|
-
|
31
|
-
should "raise a custom exception when passed invalid host" do
|
32
|
-
assert_raises(Sanford::InvalidHostError) do
|
33
|
-
Sanford::Manager.new(InvalidHost)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
class SetupTest < BaseTest
|
40
|
-
desc "after calling setup"
|
41
|
-
setup do
|
42
|
-
TestHost.setup_has_been_called = false
|
43
|
-
@host_data.setup
|
27
|
+
host_data = Sanford::HostData.new(TestHost, :verbose_logging => nil)
|
28
|
+
assert_not_nil host_data.verbose
|
44
29
|
end
|
45
30
|
|
46
31
|
should "have called the setup proc" do
|
47
|
-
assert_equal true, TestHost.
|
48
|
-
|
49
|
-
TestHost.setup_has_been_called = false
|
32
|
+
assert_equal true, TestHost.init_has_been_called
|
50
33
|
end
|
51
34
|
|
52
35
|
should "constantize a host's handlers" do
|
@@ -58,7 +41,7 @@ class Sanford::HostData
|
|
58
41
|
assert_equal TestHost::Multiply, handlers['v1']['multiply']
|
59
42
|
end
|
60
43
|
|
61
|
-
|
44
|
+
should "look up handler classes with #handler_class_for" do
|
62
45
|
assert_equal TestHost::Echo, subject.handler_class_for('v1', 'echo')
|
63
46
|
end
|
64
47
|
|
data/test/unit/host_test.rb
CHANGED
@@ -12,8 +12,8 @@ module Sanford::Host
|
|
12
12
|
end
|
13
13
|
subject{ MyHost.instance }
|
14
14
|
|
15
|
-
should have_instance_methods :configuration, :name, :ip, :port, :
|
16
|
-
:verbose_logging, :error, :
|
15
|
+
should have_instance_methods :configuration, :name, :ip, :port, :pid_file,
|
16
|
+
:logger, :verbose_logging, :error, :init, :version, :versioned_services
|
17
17
|
|
18
18
|
should "get and set it's configuration options with their matching methods" do
|
19
19
|
subject.name 'my_awesome_host'
|
@@ -36,7 +36,7 @@ module Sanford::Host
|
|
36
36
|
|
37
37
|
should "proxy it's method to it's instance" do
|
38
38
|
assert_equal subject.instance.name, subject.name
|
39
|
-
assert subject.respond_to?(:
|
39
|
+
assert subject.respond_to?(:pid_file)
|
40
40
|
end
|
41
41
|
|
42
42
|
should "have registered the class with sanford's known hosts" do
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'assert'
|
2
|
+
|
3
|
+
require 'sanford/cli'
|
4
|
+
|
5
|
+
class Sanford::Manager::PIDFile
|
6
|
+
|
7
|
+
class BaseTest < Assert::Context
|
8
|
+
desc "Sanford::Manager::PIDFile"
|
9
|
+
setup do
|
10
|
+
@pid_file = Sanford::Manager::PIDFile.new("tmp/my.pid")
|
11
|
+
end
|
12
|
+
teardown do
|
13
|
+
FileUtils.rm_rf("tmp/my.pid")
|
14
|
+
end
|
15
|
+
subject{ @pid_file }
|
16
|
+
|
17
|
+
should have_instance_methods :pid, :to_s, :write, :remove
|
18
|
+
|
19
|
+
should "return it's path with #to_s" do
|
20
|
+
assert_equal "tmp/my.pid", subject.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
should "write the pid file with #write" do
|
24
|
+
subject.write
|
25
|
+
|
26
|
+
assert File.exists?("tmp/my.pid")
|
27
|
+
assert_equal "#{Process.pid}\n", File.read("tmp/my.pid")
|
28
|
+
end
|
29
|
+
|
30
|
+
should "return the value stored in the pid value with #pid" do
|
31
|
+
subject.write
|
32
|
+
|
33
|
+
assert_equal Process.pid, subject.pid
|
34
|
+
end
|
35
|
+
|
36
|
+
should "remove the file with #remove" do
|
37
|
+
subject.write
|
38
|
+
subject.remove
|
39
|
+
|
40
|
+
assert_not File.exists?("tmp/my.pid")
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/test/unit/manager_test.rb
CHANGED
@@ -1,21 +1,146 @@
|
|
1
1
|
require 'assert'
|
2
2
|
|
3
|
-
require 'sanford/
|
3
|
+
require 'sanford/cli'
|
4
4
|
|
5
|
-
|
5
|
+
module Sanford::Manager
|
6
6
|
|
7
7
|
class BaseTest < Assert::Context
|
8
8
|
desc "Sanford::Manager"
|
9
|
+
subject{ Sanford::Manager }
|
10
|
+
|
11
|
+
should have_instance_methods :call, :get_handler_class
|
12
|
+
|
13
|
+
should "return ServerHandler or SignalHandler with get_handler_class" do
|
14
|
+
assert_equal Sanford::Manager::ServerHandler, subject.get_handler_class('run')
|
15
|
+
assert_equal Sanford::Manager::ServerHandler, subject.get_handler_class('start')
|
16
|
+
assert_equal Sanford::Manager::SignalHandler, subject.get_handler_class('stop')
|
17
|
+
assert_equal Sanford::Manager::SignalHandler, subject.get_handler_class('restart')
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class ServerHandlerTest < BaseTest
|
23
|
+
desc "ServerHandler"
|
24
|
+
setup do
|
25
|
+
@handler = Sanford::Manager::ServerHandler.new({ :host => 'TestHost' })
|
26
|
+
end
|
27
|
+
subject{ @handler }
|
28
|
+
|
29
|
+
should have_instance_methods :run, :start
|
30
|
+
|
31
|
+
should "raise an error when a host can't be found matching the `host` option" do
|
32
|
+
assert_raises(Sanford::NoHostError) do
|
33
|
+
Sanford::Manager::ServerHandler.new({ :host => 'poop' })
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
should "raise an error when a host is invalid for running a server" do
|
38
|
+
assert_raises(Sanford::InvalidHostError) do
|
39
|
+
Sanford::Manager::ServerHandler.new({ :host => 'InvalidHost' })
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
class SignalHandlertest < BaseTest
|
46
|
+
desc "SignalHandler"
|
47
|
+
setup do
|
48
|
+
@handler = Sanford::Manager::SignalHandler.new({ :pid => -1 })
|
49
|
+
end
|
50
|
+
subject{ @handler }
|
51
|
+
|
52
|
+
should have_instance_methods :stop, :restart
|
53
|
+
|
54
|
+
should "raise an error when a pid can't be found" do
|
55
|
+
assert_raises(Sanford::NoPIDError) do
|
56
|
+
Sanford::Manager::SignalHandler.new
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class ConfigTest < BaseTest
|
62
|
+
desc "Config"
|
9
63
|
setup do
|
10
|
-
@
|
64
|
+
@config = Sanford::Manager::Config.new({ :host => 'TestHost' })
|
65
|
+
end
|
66
|
+
subject{ @config }
|
67
|
+
|
68
|
+
should have_instance_methods :host_name, :host, :ip, :port, :pid, :pid_file
|
69
|
+
should have_instance_methods :file_descriptor, :client_file_descriptors
|
70
|
+
should have_instance_methods :restart_dir
|
71
|
+
should have_instance_methods :listen_args, :has_listen_args?, :found_host?
|
72
|
+
|
73
|
+
should "find a host based on the `host` option" do
|
74
|
+
assert_equal TestHost, subject.host
|
75
|
+
assert_equal true, subject.found_host?
|
76
|
+
end
|
77
|
+
|
78
|
+
should "set the ip, port and pid file based on the host's configuration" do
|
79
|
+
assert_equal TestHost.ip, subject.ip
|
80
|
+
assert_equal TestHost.port, subject.port
|
81
|
+
assert_equal TestHost.pid_file.to_s, subject.pid_file.to_s
|
82
|
+
end
|
83
|
+
|
84
|
+
should "use the first host if no host option is provided" do
|
85
|
+
manager = Sanford::Manager::Config.new({ :port => 1 })
|
86
|
+
assert_equal Sanford.hosts.first, manager.host
|
87
|
+
end
|
88
|
+
|
89
|
+
should "return the file descriptor or ip and port with listen_args" do
|
90
|
+
config = Sanford::Manager::Config.new({
|
91
|
+
:file_descriptor => 1,
|
92
|
+
:ip => 'localhost', :port => 1234
|
93
|
+
})
|
94
|
+
assert_equal [ config.file_descriptor ], config.listen_args
|
95
|
+
assert_equal true, subject.has_listen_args?
|
96
|
+
|
97
|
+
config = Sanford::Manager::Config.new({ :ip => 'localhost', :port => 1234 })
|
98
|
+
assert_equal [ config.ip, config.port ], config.listen_args
|
99
|
+
assert_equal true, subject.has_listen_args?
|
100
|
+
|
101
|
+
config = Sanford::Manager::Config.new({ :host => 'InvalidHost' })
|
102
|
+
assert_equal false, config.has_listen_args?
|
103
|
+
end
|
104
|
+
|
105
|
+
should "build a NullHost when a host can't be found" do
|
106
|
+
config = Sanford::Manager::Config.new({ :host => 'poop' })
|
107
|
+
assert_instance_of Sanford::Manager::NullHost, config.host
|
108
|
+
assert_equal false, config.found_host?
|
109
|
+
end
|
110
|
+
|
111
|
+
should "split a string list of client file descriptors into an array" do
|
112
|
+
config = Sanford::Manager::Config.new({ :client_fds => '1,2,3' })
|
113
|
+
assert_equal [ 1, 2, 3 ], config.client_file_descriptors
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
class EnvVarsTest < ConfigTest
|
119
|
+
desc "with env vars set"
|
120
|
+
setup do
|
121
|
+
ENV['SANFORD_HOST'] = 'TestHost'
|
122
|
+
ENV['SANFORD_IP'] = '127.0.0.1'
|
123
|
+
ENV['SANFORD_PORT'] = '12345'
|
124
|
+
@config = Sanford::Manager::Config.new({
|
125
|
+
:host => 'InvalidHost',
|
126
|
+
:port => 54678
|
127
|
+
})
|
128
|
+
end
|
129
|
+
teardown do
|
130
|
+
ENV.delete('SANFORD_HOST')
|
131
|
+
ENV.delete('SANFORD_IP')
|
132
|
+
ENV.delete('SANFORD_PORT')
|
133
|
+
end
|
134
|
+
|
135
|
+
should "use the env vars over passed in options or the host's configuration" do
|
136
|
+
assert_equal TestHost, subject.host
|
137
|
+
assert_equal '127.0.0.1', subject.ip
|
138
|
+
assert_equal 12345, subject.port
|
11
139
|
end
|
12
|
-
subject{ @manager }
|
13
140
|
|
14
|
-
should have_instance_methods :host_data, :process_name, :call
|
15
|
-
should have_class_methods :call
|
16
141
|
end
|
17
142
|
|
18
|
-
#
|
19
|
-
#
|
143
|
+
# ServerHandler run/start and SignalHandler stop/restart are tested with
|
144
|
+
# system tests: test/system/managing_test.rb
|
20
145
|
|
21
146
|
end
|
data/test/unit/runner_test.rb
CHANGED
@@ -11,6 +11,7 @@ class Sanford::Runner
|
|
11
11
|
subject{ @runner }
|
12
12
|
|
13
13
|
should have_instance_methods :handler_class, :request, :logger, :run
|
14
|
+
should have_class_methods :run
|
14
15
|
|
15
16
|
should "run the handler and return the response it generates when `run` is called" do
|
16
17
|
response = subject.run
|
@@ -21,6 +22,15 @@ class Sanford::Runner
|
|
21
22
|
assert_equal 'joe.test@example.com', response.data['email']
|
22
23
|
end
|
23
24
|
|
25
|
+
should "be able to build a runner with a handler class and params" do
|
26
|
+
response = nil
|
27
|
+
assert_nothing_raised do
|
28
|
+
response = Sanford::Runner.run(BasicServiceHandler, {})
|
29
|
+
end
|
30
|
+
|
31
|
+
assert_equal 200, response.code
|
32
|
+
end
|
33
|
+
|
24
34
|
end
|
25
35
|
|
26
36
|
end
|
data/test/unit/server_test.rb
CHANGED
@@ -1,24 +1,43 @@
|
|
1
1
|
require 'assert'
|
2
2
|
|
3
3
|
require 'sanford/server'
|
4
|
-
require 'sanford/manager'
|
5
4
|
|
6
5
|
class Sanford::Server
|
7
6
|
|
8
7
|
class BaseTest < Assert::Context
|
9
8
|
desc "Sanford::Server"
|
10
9
|
setup do
|
11
|
-
@server = Sanford::Server.new(TestHost)
|
10
|
+
@server = Sanford::Server.new(TestHost, { :keep_alive => true })
|
12
11
|
end
|
13
12
|
subject{ @server }
|
14
13
|
|
14
|
+
should have_instance_methods :sanford_host, :sanford_host_data, :sanford_host_options
|
15
|
+
should have_instance_methods :on_run
|
16
|
+
|
15
17
|
should "include DatTCP::Server" do
|
16
18
|
assert_includes DatTCP::Server, subject.class.included_modules
|
17
19
|
end
|
18
20
|
|
19
|
-
should "
|
20
|
-
assert_equal TestHost
|
21
|
-
assert_equal
|
21
|
+
should "save it's host and host options but not initialize a host data yet" do
|
22
|
+
assert_equal TestHost, subject.sanford_host
|
23
|
+
assert_equal true, subject.sanford_host_options[:receives_keep_alive]
|
24
|
+
assert_nil subject.sanford_host_data
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
class RunTest < BaseTest
|
30
|
+
desc "run"
|
31
|
+
setup do
|
32
|
+
@server.listen(TestHost.ip, TestHost.port)
|
33
|
+
@server.run
|
34
|
+
end
|
35
|
+
teardown do
|
36
|
+
@server.stop
|
37
|
+
end
|
38
|
+
|
39
|
+
should "have initialized a host data instance" do
|
40
|
+
assert_instance_of Sanford::HostData, subject.sanford_host_data
|
22
41
|
end
|
23
42
|
|
24
43
|
end
|
@@ -14,11 +14,30 @@ module Sanford::ServiceHandler
|
|
14
14
|
subject{ @handler }
|
15
15
|
|
16
16
|
should have_instance_methods :init, :init!, :run, :run!
|
17
|
+
should have_class_methods :run
|
17
18
|
|
18
19
|
should "raise a NotImplementedError if run! is not overwritten" do
|
19
20
|
assert_raises(NotImplementedError){ subject.run! }
|
20
21
|
end
|
21
22
|
|
23
|
+
should "allow running a handler class with the class method #run" do
|
24
|
+
response = HaltServiceHandler.run({
|
25
|
+
'code' => 648,
|
26
|
+
'data' => true
|
27
|
+
})
|
28
|
+
assert_equal 648, response.code
|
29
|
+
assert_equal true, response.data
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class RunHandlerTest < BaseTest
|
35
|
+
desc "run_handler helper"
|
36
|
+
|
37
|
+
should "allow easily running another handler" do
|
38
|
+
response = test_runner(RunOtherHandler).run
|
39
|
+
assert_equal 'RunOtherHandler', response.data
|
40
|
+
end
|
22
41
|
end
|
23
42
|
|
24
43
|
class WithMethodFlagsTest < BaseTest
|
data/test/unit/worker_test.rb
CHANGED
@@ -4,27 +4,12 @@ require 'sanford-protocol/test/helpers'
|
|
4
4
|
|
5
5
|
class Sanford::Worker
|
6
6
|
|
7
|
-
|
8
|
-
# debugging
|
9
|
-
class SetupContextToRaiseExceptions < Assert::Context
|
10
|
-
setup do
|
11
|
-
@env_sanford_protocol_debug = ENV['SANFORD_PROTOCOL_DEBUG']
|
12
|
-
@env_sanford_debug = ENV['SANFORD_DEBUG']
|
13
|
-
ENV.delete('SANFORD_PROTOCOL_DEBUG')
|
14
|
-
ENV['SANFORD_DEBUG'] = '1'
|
15
|
-
end
|
16
|
-
teardown do
|
17
|
-
ENV['SANFORD_DEBUG'] = @env_sanford_debug
|
18
|
-
ENV['SANFORD_PROTOCOL_DEBUG'] = @env_sanford_protocol_debug
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class BaseTest < SetupContextToRaiseExceptions
|
7
|
+
class BaseTest < Assert::Context
|
23
8
|
include Sanford::Protocol::Test::Helpers
|
24
9
|
|
25
10
|
desc "Sanford::Worker"
|
26
11
|
setup do
|
27
|
-
@host_data = Sanford::HostData.new(TestHost)
|
12
|
+
@host_data = Sanford::HostData.new(TestHost)
|
28
13
|
@connection = FakeConnection.with_request('version', 'service', {})
|
29
14
|
@worker = Sanford::Worker.new(@host_data, @connection)
|
30
15
|
end
|
@@ -34,180 +19,6 @@ class Sanford::Worker
|
|
34
19
|
|
35
20
|
end
|
36
21
|
|
37
|
-
|
38
|
-
desc "running a request for the echo server"
|
39
|
-
setup do
|
40
|
-
@connection = FakeConnection.with_request('v1', 'echo', { :message => 'test' })
|
41
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
42
|
-
end
|
43
|
-
|
44
|
-
should "return a successful response and echo the params sent to it" do
|
45
|
-
assert_nothing_raised{ @worker.run }
|
46
|
-
response = @connection.response
|
47
|
-
|
48
|
-
assert_equal 200, response.status.code
|
49
|
-
assert_equal nil, response.status.message
|
50
|
-
assert_equal 'test', response.data
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
class MissingServiceVersionTest < BaseTest
|
56
|
-
desc "running a request with no service version"
|
57
|
-
setup do
|
58
|
-
request_hash = Sanford::Protocol::Request.new('v1', 'what', {}).to_hash
|
59
|
-
request_hash.delete('version')
|
60
|
-
@connection = FakeConnection.new(request_hash)
|
61
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
62
|
-
end
|
63
|
-
|
64
|
-
should "return a bad request response" do
|
65
|
-
assert_raises(Sanford::Protocol::BadRequestError) do
|
66
|
-
@worker.run
|
67
|
-
end
|
68
|
-
response = @connection.response
|
69
|
-
|
70
|
-
assert_equal 400, response.status.code
|
71
|
-
assert_match "request", response.status.message
|
72
|
-
assert_match "version", response.status.message
|
73
|
-
assert_equal nil, response.data
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
class MissingServiceNameTest < BaseTest
|
79
|
-
desc "running a request with no service name"
|
80
|
-
setup do
|
81
|
-
request_hash = Sanford::Protocol::Request.new('v1', 'what', {}).to_hash
|
82
|
-
request_hash.delete('name')
|
83
|
-
@connection = FakeConnection.new(request_hash)
|
84
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
85
|
-
end
|
86
|
-
|
87
|
-
should "return a bad request response" do
|
88
|
-
assert_raises(Sanford::Protocol::BadRequestError) do
|
89
|
-
@worker.run
|
90
|
-
end
|
91
|
-
response = @connection.response
|
92
|
-
|
93
|
-
assert_equal 400, response.status.code
|
94
|
-
assert_match "request", response.status.message
|
95
|
-
assert_match "name", response.status.message
|
96
|
-
assert_equal nil, response.data
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
class NotFoundServiceTest < BaseTest
|
102
|
-
desc "running a request with no matching service name"
|
103
|
-
setup do
|
104
|
-
@connection = FakeConnection.with_request('v1', 'what', {})
|
105
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
106
|
-
end
|
107
|
-
|
108
|
-
should "return a bad request response" do
|
109
|
-
assert_raises(Sanford::NotFoundError) do
|
110
|
-
@worker.run
|
111
|
-
end
|
112
|
-
response = @connection.response
|
113
|
-
|
114
|
-
assert_equal 404, response.status.code
|
115
|
-
assert_equal nil, response.status.message
|
116
|
-
assert_equal nil, response.data
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
120
|
-
|
121
|
-
class ErrorServiceTest < BaseTest
|
122
|
-
desc "running a request that errors on the server"
|
123
|
-
setup do
|
124
|
-
@connection = FakeConnection.with_request('v1', 'bad', {})
|
125
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
126
|
-
end
|
127
|
-
|
128
|
-
should "return a bad request response" do
|
129
|
-
assert_raises(RuntimeError) do
|
130
|
-
@worker.run
|
131
|
-
end
|
132
|
-
response = @connection.response
|
133
|
-
|
134
|
-
assert_equal 500, response.status.code
|
135
|
-
assert_match "error", response.status.message
|
136
|
-
assert_equal nil, response.data
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
140
|
-
|
141
|
-
class HaltTest < BaseTest
|
142
|
-
desc "running a request that halts"
|
143
|
-
setup do
|
144
|
-
@connection = FakeConnection.with_request('v1', 'halt_it', {})
|
145
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
146
|
-
end
|
147
|
-
|
148
|
-
should "return the response that was halted" do
|
149
|
-
assert_nothing_raised{ @worker.run }
|
150
|
-
response = @connection.response
|
151
|
-
|
152
|
-
assert_equal 728, response.status.code
|
153
|
-
assert_equal "I do what I want", response.status.message
|
154
|
-
assert_equal [ 1, true, 'yes' ], response.data
|
155
|
-
end
|
156
|
-
|
157
|
-
end
|
158
|
-
|
159
|
-
class AuthorizeRequestTest < BaseTest
|
160
|
-
desc "running a request that halts in a callback"
|
161
|
-
setup do
|
162
|
-
@connection = FakeConnection.with_request('v1', 'authorized', {})
|
163
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
164
|
-
end
|
165
|
-
|
166
|
-
should "return the response that was halted" do
|
167
|
-
assert_nothing_raised{ @worker.run }
|
168
|
-
response = @connection.response
|
169
|
-
|
170
|
-
assert_equal 401, response.status.code
|
171
|
-
assert_equal "Not authorized", response.status.message
|
172
|
-
assert_equal nil, response.data
|
173
|
-
end
|
174
|
-
|
175
|
-
end
|
176
|
-
|
177
|
-
class WithCustomErrorHandlerTest < BaseTest
|
178
|
-
desc "running a request that triggers our custom error handler"
|
179
|
-
setup do
|
180
|
-
@connection = FakeConnection.with_request('v1', 'custom_error', {})
|
181
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
182
|
-
end
|
183
|
-
|
184
|
-
should "return the response that was halted" do
|
185
|
-
assert_raises(::MyCustomError){ @worker.run }
|
186
|
-
response = @connection.response
|
187
|
-
|
188
|
-
assert_equal 987, response.status.code
|
189
|
-
assert_equal "custom error!", response.status.message
|
190
|
-
assert_equal nil, response.data
|
191
|
-
end
|
192
|
-
|
193
|
-
end
|
194
|
-
|
195
|
-
class WithBadResponseHashTest < BaseTest
|
196
|
-
desc "running a request that builds an object that can't be encoded"
|
197
|
-
setup do
|
198
|
-
@connection = FakeConnection.with_request('v1', 'echo', { :message => 'cant encode' }, true)
|
199
|
-
@worker = Sanford::Worker.new(@host_data, @connection)
|
200
|
-
end
|
201
|
-
|
202
|
-
should "return the response that was halted" do
|
203
|
-
assert_raises(RuntimeError){ @worker.run }
|
204
|
-
response = @connection.response
|
205
|
-
|
206
|
-
assert_equal 500, response.status.code
|
207
|
-
assert_equal "An unexpected error occurred.", response.status.message
|
208
|
-
assert_equal nil, response.data
|
209
|
-
end
|
210
|
-
|
211
|
-
end
|
22
|
+
# `Worker`'s logic is tested in the system test: `request_handling_test.rb`
|
212
23
|
|
213
24
|
end
|