test/unit/manager_test.rb in sanford-0.4.0 vs test/unit/manager_test.rb in sanford-0.6.0

- old
+ new

@@ -1,21 +1,146 @@ require 'assert' -require 'sanford/manager' +require 'sanford/cli' -class Sanford::Manager +module Sanford::Manager class BaseTest < Assert::Context desc "Sanford::Manager" + subject{ Sanford::Manager } + + should have_instance_methods :call, :get_handler_class + + should "return ServerHandler or SignalHandler with get_handler_class" do + assert_equal Sanford::Manager::ServerHandler, subject.get_handler_class('run') + assert_equal Sanford::Manager::ServerHandler, subject.get_handler_class('start') + assert_equal Sanford::Manager::SignalHandler, subject.get_handler_class('stop') + assert_equal Sanford::Manager::SignalHandler, subject.get_handler_class('restart') + end + + end + + class ServerHandlerTest < BaseTest + desc "ServerHandler" setup do - @manager = Sanford::Manager.new(TestHost) + @handler = Sanford::Manager::ServerHandler.new({ :host => 'TestHost' }) end - subject{ @manager } + subject{ @handler } - should have_instance_methods :host_data, :process_name, :call - should have_class_methods :call + should have_instance_methods :run, :start + + should "raise an error when a host can't be found matching the `host` option" do + assert_raises(Sanford::NoHostError) do + Sanford::Manager::ServerHandler.new({ :host => 'poop' }) + end + end + + should "raise an error when a host is invalid for running a server" do + assert_raises(Sanford::InvalidHostError) do + Sanford::Manager::ServerHandler.new({ :host => 'InvalidHost' }) + end + end + end - # Sanford::Manager#call methods are tested in the test/system/managing_test.rb - # they require mocking the Daemons gem + class SignalHandlertest < BaseTest + desc "SignalHandler" + setup do + @handler = Sanford::Manager::SignalHandler.new({ :pid => -1 }) + end + subject{ @handler } + + should have_instance_methods :stop, :restart + + should "raise an error when a pid can't be found" do + assert_raises(Sanford::NoPIDError) do + Sanford::Manager::SignalHandler.new + end + end + end + + class ConfigTest < BaseTest + desc "Config" + setup do + @config = Sanford::Manager::Config.new({ :host => 'TestHost' }) + end + subject{ @config } + + should have_instance_methods :host_name, :host, :ip, :port, :pid, :pid_file + should have_instance_methods :file_descriptor, :client_file_descriptors + should have_instance_methods :restart_dir + should have_instance_methods :listen_args, :has_listen_args?, :found_host? + + should "find a host based on the `host` option" do + assert_equal TestHost, subject.host + assert_equal true, subject.found_host? + end + + should "set the ip, port and pid file based on the host's configuration" do + assert_equal TestHost.ip, subject.ip + assert_equal TestHost.port, subject.port + assert_equal TestHost.pid_file.to_s, subject.pid_file.to_s + end + + should "use the first host if no host option is provided" do + manager = Sanford::Manager::Config.new({ :port => 1 }) + assert_equal Sanford.hosts.first, manager.host + end + + should "return the file descriptor or ip and port with listen_args" do + config = Sanford::Manager::Config.new({ + :file_descriptor => 1, + :ip => 'localhost', :port => 1234 + }) + assert_equal [ config.file_descriptor ], config.listen_args + assert_equal true, subject.has_listen_args? + + config = Sanford::Manager::Config.new({ :ip => 'localhost', :port => 1234 }) + assert_equal [ config.ip, config.port ], config.listen_args + assert_equal true, subject.has_listen_args? + + config = Sanford::Manager::Config.new({ :host => 'InvalidHost' }) + assert_equal false, config.has_listen_args? + end + + should "build a NullHost when a host can't be found" do + config = Sanford::Manager::Config.new({ :host => 'poop' }) + assert_instance_of Sanford::Manager::NullHost, config.host + assert_equal false, config.found_host? + end + + should "split a string list of client file descriptors into an array" do + config = Sanford::Manager::Config.new({ :client_fds => '1,2,3' }) + assert_equal [ 1, 2, 3 ], config.client_file_descriptors + end + + end + + class EnvVarsTest < ConfigTest + desc "with env vars set" + setup do + ENV['SANFORD_HOST'] = 'TestHost' + ENV['SANFORD_IP'] = '127.0.0.1' + ENV['SANFORD_PORT'] = '12345' + @config = Sanford::Manager::Config.new({ + :host => 'InvalidHost', + :port => 54678 + }) + end + teardown do + ENV.delete('SANFORD_HOST') + ENV.delete('SANFORD_IP') + ENV.delete('SANFORD_PORT') + end + + should "use the env vars over passed in options or the host's configuration" do + assert_equal TestHost, subject.host + assert_equal '127.0.0.1', subject.ip + assert_equal 12345, subject.port + end + + end + + # ServerHandler run/start and SignalHandler stop/restart are tested with + # system tests: test/system/managing_test.rb end