Alter the interface presented by Connectors::Socket
We now provide a queue-like reader as well as a queue-lke writer. Additional read queues can still be registered.
This commit is contained in:
@@ -9,8 +9,6 @@ module TestQMPClient
|
||||
@deserialiser = mock("(deserialiser)")
|
||||
|
||||
@connector = QMPClient::Connectors::Socket.new(@serialiser, @deserialiser)
|
||||
@msg_received_q = Queue.new
|
||||
@connector.register_receive_queue(@msg_received_q)
|
||||
|
||||
@read_r, @read_w = IO.pipe
|
||||
@write_r, @write_w = IO.pipe
|
||||
@@ -23,8 +21,8 @@ module TestQMPClient
|
||||
|
||||
def with_connector(reason="Run block", t=1, &blk)
|
||||
assert_doesnt_time_out(t, reason) do
|
||||
@connector.run(@read_r, @write_w) do |writer|
|
||||
|
||||
@connector.run(@read_r, @write_w) do |reader, writer|
|
||||
@read_interface = reader
|
||||
@write_interface = writer
|
||||
yield @connector, writer
|
||||
end
|
||||
@@ -50,8 +48,8 @@ module TestQMPClient
|
||||
|
||||
def assert_client_saw(symbol, discard = 0)
|
||||
assert_doesnt_time_out(1, "checking message #{symbol.inspect} was received from server") do
|
||||
discard.times { @msg_received_q.pop }
|
||||
assert_equal(symbol, @msg_received_q.pop)
|
||||
discard.times { @read_interface.pop }
|
||||
assert_equal(symbol, @read_interface.pop)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -73,7 +71,7 @@ module TestQMPClient
|
||||
end
|
||||
|
||||
def test_writes_are_threadsafe
|
||||
with_connector do |connector, writer|
|
||||
with_connector do |reader, writer|
|
||||
(1..5).each {|n| Thread.new { message_from_client(:"Message #{n}")}}
|
||||
|
||||
data = (1..5).collect {|n| @write_r.gets }
|
||||
@@ -85,17 +83,17 @@ module TestQMPClient
|
||||
end
|
||||
|
||||
def test_register_unregister_receive_queue
|
||||
with_connector do |connector, writer|
|
||||
with_connector do |reader, writer|
|
||||
rq1 = Queue.new # We expect both of these to get both messages
|
||||
rq2 = Queue.new
|
||||
urq = Queue.new # We're going to unregister this one after one msg
|
||||
connector.register_receive_queue(rq1)
|
||||
connector.register_receive_queue(rq2)
|
||||
connector.register_receive_queue(urq)
|
||||
@connector.register_receive_queue(rq1)
|
||||
@connector.register_receive_queue(rq2)
|
||||
@connector.register_receive_queue(urq)
|
||||
|
||||
message_from_server(:test_1)
|
||||
assert_client_saw(:test_1)
|
||||
connector.unregister_receive_queue(urq)
|
||||
@connector.unregister_receive_queue(urq)
|
||||
message_from_server(:test_2)
|
||||
assert_client_saw(:test_2)
|
||||
|
||||
@@ -115,7 +113,7 @@ module TestQMPClient
|
||||
end
|
||||
|
||||
def test_run_block_finishes_cleanly_if_socket_reports_error
|
||||
with_connector do |connector, writer|
|
||||
with_connector do |reader, writer|
|
||||
Kernel.expects(:select).once.returns([[], [], [@read_r]])
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user