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:
Nick Thomas
2011-11-13 12:00:15 +00:00
parent 1688e55459
commit 6dc5c832f8
3 changed files with 19 additions and 20 deletions

View File

@@ -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