def test_socket_disconnect(get_by_name, register_socket, engage): ( "SocketManager().disconnect() should get by name, unregister then " "disconnect to the given address." ) socket = get_by_name.return_value # Given a zmq mock zmq = Mock() poller = zmq.Poller.return_value # And a poller that raises an exception upon unregister poller.unregister.side_effect = RuntimeError("boom") # And a context context = Mock() # And a socket manager manager = SocketManager(zmq, context) manager.addresses = {"foobar": "baz", "another": "socket"} # When I call disconnect manager.disconnect("foobar").should.be.true # Then it should have removed the socket address from the table manager.addresses.should.equal({"another": "socket"}) socket.disconnect.assert_has_calls([call("baz")]) socket.disconnect.call_count.should.equal(1)
def test_socket_manager_can_poll_asynchronously(): ( "SocketManager should leverage a non-blocking socket " "collection can be used seamlessly in a blocking fashion [TCP SOCKET]" ) # Given a socket manager for a server server = SocketManager(zmq, context) # And a reply socket listening on a tcp port server.ensure_and_bind( "reply-server", zmq.REP, "tcp://0.0.0.0:3458", zmq.POLLIN | zmq.POLLOUT ) # And a socket manager for a client client = SocketManager(zmq, context) # And a request client connected to the server client.ensure_and_connect( "request-client", zmq.REQ, "tcp://0.0.0.0:3458", zmq.POLLIN | zmq.POLLOUT, ) # And send a request from the client requester = client.wait_until_ready( "request-client", zmq.POLLOUT, timeout=2 ) requester.send_json({"client": 42}) # Then I should receive a request from the client replier = server.wait_until_ready("reply-server", zmq.POLLIN, timeout=2) replier.should_not.be.none request = replier.recv_json() # And the request should be the one that the client just sent request.should.equal({"client": 42}) # And disconnecting should work client.disconnect("request-client") server.disconnect("reply-server")
def test_socket_disconnect_not_available(get_by_name, register_socket, engage): ( "SocketManager().disconnect() should return False if no sockets are available with that name" ) # Background: get_by_name returns None get_by_name.return_value = None # Given a zmq mock zmq = Mock() # And a context context = Mock() manager = SocketManager(zmq, context) # When I call disconnect result = manager.disconnect("foobar") # Then it should return false result.should.be.false
def test_socket_disconnect_not_registered(get_by_name, register_socket, engage): ( "SocketManager().disconnect() should return False if no sockets are registered with that name" ) # Background: get_by_name returns None socket = get_by_name.return_value # Given a zmq mock zmq = Mock() # And a context context = Mock() # And a socket manager without registered sockets manager = SocketManager(zmq, context) manager.addresses = {} # When I call disconnect result = manager.disconnect("foobar") # Then it should return true result.should.be.true # But socket.disconnect socket.disconnect.call_count.should.equal(0)