forked from andrewvc/em-zeromq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
router_dealer_spec.rb
80 lines (68 loc) · 2.47 KB
/
router_dealer_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
require File.join(File.dirname(__FILE__), %w[spec_helper])
describe EventMachine::ZeroMQ do
class EMTestRouterHandler
attr_reader :received
def initialize
@received = []
end
def on_writable(socket)
end
def on_readable(socket, messages)
@received += messages
end
end
class EMTestDealerHandler
attr_reader :received
def initialize(&block)
@received = []
@on_writable_callback = block
end
def on_writable(socket)
@on_writable_callback.call(socket) if @on_writable_callback
end
def on_readable(socket, messages)
ident, delim, message = messages.map(&:copy_out_string)
ident.should == "dealer1"
@received += [ident, delim, message].map {|s| ZMQ::Message.new(s)}
socket.send_msg(ident, delim, "re:#{message}")
end
end
it "Should instantiate a connection given valid opts for Router/Dealer" do
router_conn = nil
run_reactor(1) do
router_conn = SPEC_CTX.bind(ZMQ::ROUTER, rand_addr, EMTestRouterHandler.new)
end
router_conn.should be_a(EventMachine::ZeroMQ::Connection)
end
describe "sending/receiving a single message via Router/Dealer" do
before(:all) do
results = {}
@test_message = test_message = "M#{rand(999)}"
run_reactor(0.5) do
results[:dealer_hndlr] = dealer_hndlr = EMTestDealerHandler.new
results[:router_hndlr] = router_hndlr = EMTestRouterHandler.new
addr = rand_addr
dealer_conn = SPEC_CTX.bind(ZMQ::DEALER, addr, dealer_hndlr, :identity => "dealer1")
router_conn = SPEC_CTX.connect(ZMQ::ROUTER, addr, router_hndlr, :identity => "router1")
router_conn.send_msg('x', test_message)
EM::Timer.new(0.1) do
results[:specs_ran] = true
end
end
@results = results
end
it "should run completely" do
@results[:specs_ran].should be_true
end
it "should receive the message intact on the dealer" do
@results[:dealer_hndlr].received.should_not be_empty
@results[:dealer_hndlr].received.last.should be_a(ZMQ::Message)
@results[:dealer_hndlr].received.last.copy_out_string.should == @test_message
end
it "the router should be echoed its original message" do
@results[:router_hndlr].received.should_not be_empty
@results[:router_hndlr].received.last.should be_a(ZMQ::Message)
@results[:router_hndlr].received.last.copy_out_string.should == "re:#{@test_message}"
end
end
end