lots of updates, and all specs PASS!! ^_^

This commit is contained in:
2011-02-01 09:44:27 +00:00
parent c6100fee33
commit 5d3aa69fa0
13 changed files with 397 additions and 107 deletions

View File

@@ -1,36 +1,78 @@
# encoding: utf-8
module ServerHelper
include AMQP::Server
require 'rubygems'
require 'mq'
require 'amqp'
require 'amqp/server'
require 'json'
class ServerHelper
class << self
def log
@@log ||= []
end
attr_writer :log
attr_accessor :stdin
attr_accessor :stdout
attr_accessor :stderr
attr_accessor :pid
def initialize(port = nil, timeout = nil)
@port = port
@timout = timeout
File.open(log_file, 'w') {}
@pid = start(port, timeout)
end
# log & silence STDOUT output
def log(*args)
@@log << args
def self.clear_logs
Dir.glob(File.expand_path('server_helper*.log', File.dirname(__FILE__))).each do |file|
File.delete(file)
end
end
def start(port = nil, timeout = nil)
port ||= 15672
timeout ||= 2
EM.fork_reactor {
$PORT = port
EM.start_server('localhost', port, AmqpServer)
EM.add_timer(timeout) { EM.stop }
}
end
def stop
Process.kill('TERM', @pid)
end
def kill
Process.kill('KILL', @pid)
end
def log
File.open(log_file).to_a.map{ |l| JSON.parse(l) }
end
def log_file
File.expand_path("server_helper-port#{@port}.log", File.dirname(__FILE__))
end
end
module AmqpServer
include AMQP::Server
# customize log output
def log(*args)
# puts "\n>>>>>> Process.pid / $PORT: " + Process.pid.inspect + " / #{$PORT}\n"
args = {:method => args[0], :class => args[1].payload.class, :pid => Process.pid}
filename = File.expand_path("server_helper-port#{$PORT}.log", File.dirname(__FILE__))
File.open(filename, 'a') do |f|
f.write("#{args.to_json}\n")
end
end
end
#
# Helper methods
#
def start_server(port = 15762, timeout = 2)
bef_fork = EM.forks.clone
EM.fork {
EM.start_server('localhost', port, ServerHelper)
EM.add_timer(timeout) { EM.stop }
}
(EM.forks - bef_fork).first
def start_server(port = nil, timeout = nil)
ServerHelper.new(port, timeout)
end
def stop_server(pid)
Process.kill('TERM', pid)
end