[mocha-developer] Testing event driven Socket classes
hemant
gethemant at gmail.com
Fri Dec 15 18:17:15 EST 2006
Ok, here is the class, I want to Unit Test, its part of a large app
and is based on EventMachine library.
I want to mock the class TickServer ( i.e not stub it) . Since in
actual scenario, you can't do this on this class:
@server = TickServer.new # will toss an exception at your face
you must initialize the server like this:
EventMachine.run {
EventMachine.start_server("192.168.2.252",6200,TickServer) do |conn|
conn.hello_world
end
}
Where conn holds the instance of the class TickServer. So, I want to
mock this class, so that i don't have to create an actual socket
connection.
Please look in the code, carefully. most of the methods in class are
actually callbacks, which respond to certain events.
Is it possible to unit test this with Mocha?
require "eventmachine"
class TickServer < EventMachine::Connection
attr_accessor :chunked_data,:client_status
def valid_protocol? data
return false unless data =~ /(\d{3})([^<>]*)<([^><]*)>##(.*?)##/
return true
end
# method is a callback, gets called whenever data is there in socket to read
def receive_data data
data.chomp!
while data && data.length > 0
data_array = data.split(/\r?\n/m,2)
@chunked_data << data_array[0]
data = data_array[1]
# two level of protocol handling
if @chunked_data =~ /(\d{3})(.*)<(.*)?>(##(.*)##)/
if valid_protocol?(@chunked_data)
dispatch_request
else
send_error_without_callback "Invalid Protocol code"
end
@chunked_data = ""
end
end # end of while loop
end
def send_error_without_callback msg
send_data msg +"\n"
end
def dispatch_request
send_data "#{Time.now.to_s} #{@chunked_data} \n"
end
# this method gets automatically called, when a client connects
# so this place for initializing stuff
def post_init
@chunked_data = ""
@client_status = true
end
# method gets called when a client disconnects
def unbind
@client_status = false
end
def hello_world
p "Hello World"
end
end
--
gnufied
-----------
There was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.
More information about the mocha-developer
mailing list