def setup
@rep = Rucy::Repository.new
Rucy::Config.config(@rep)
if (DEBUG_LOGGING) then
@log_io = File.open('test_multi_process_server.log', 'a')
@log_io.sync = true
@log_io.puts '<start>'
end
@document_open_call = 0
@document_close_call = 0
@document = Forwarder.new(self)
class << @document
def_delegator :__getobj__, :open
def_delegator :__getobj__, :close
def_delegator :__getobj__, :each
end
@privileged_user_call = 0
@cancel_privilege_call = 0
@privilege = Forwarder.new(self)
class << @privilege
def_delegator :__getobj__, :privileged_user?
def_delegator :__getobj__, :cancel_privilege
end
@restart_called = 0
@server_open_call = 0
@server_close_call = 0
@server = Rucy::Server.new(@rep)
@server.open_hook{|s|
@server_open_call += 1
s.port = SERVER_PORT
s.privilege = @privilege
s.mount(Rucy::Page.new("<html>Hello world.</html>\n"), '/')
s.mount(@document, '/test_document_open_close')
s.messenger_factory = Rucy::MultiProcessMessenger
if (DEBUG_LOGGING) then
logger = Rucy::Logger.new(@log_io)
logger.level = Rucy::LoggingLevel::LOG_DEBUG
s.add_logger(logger)
s.logging_access
end
}
@server.close_hook{|s|
@server_close_call += 1
}
@svr_pid = fork{
trap(:USR1) { @server.close }
begin
@server.accept
assert_equal(1 + @restart_called, @server_open_call)
assert_equal(1 + @restart_called, @server_close_call)
assert_equal(1 + @restart_called, @document_open_call)
assert_equal(1 + @restart_called, @document_close_call)
rescue
STDERR.puts "server error: #{$!}"
for frame in $!.backtrace
puts "server error: #{frame}"
end
end
exit!
}
sleep(1)
end