def test_socket_manager_not_ready(get_by_name, engage):
    ("SocketManager().ready() should return None when the socket is not available")

    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with a fake socket and an *EMPTY* cache
    manager = SocketManager(zmq, context)
    manager.sockets = {
        "foobar": "SOME_TYPE"
    }
    manager.cache = {}

    # And that get_by_name will return "socket_sentinel"
    get_by_name.return_value = 'socket_sentinel'

    # When I call ready
    socket = manager.ready('foobar', 'some-polling-mechanism', timeout=1000)

    # Then the result should be None
    socket.should.be.none

    # And engage should have been called
    engage.assert_called_once_with(1000)
def test_socket_manager_get_or_create(create, get_by_name, register_socket):
    ("SocketManager().get_or_create() should create a socket and register it")

    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with no sockets
    manager = SocketManager(zmq, context)
    manager.sockets = {
        "foobar": "SOME_TYPE"
    }

    # When I call get_or_create
    result = manager.get_or_create("foobar", "SOME_TYPE", "fake-polling-mechanism")

    # Then it should have returned a socket
    result.should.equal(get_by_name.return_value)

    # And .create should not have been called
    create.called.should.be.false

    # And should have been retrieved by name
    get_by_name.assert_called_once_with("foobar")

    # And should have been registered
    register_socket.assert_called_once_with(
        result,
        "fake-polling-mechanism",
    )
def test_socket_manager_ready(get_by_name, engage):
    ("SocketManager().ready() should return the socket "
     "if it's ready and engaged with the given polling mechanism")

    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with a fake socket and a fake cache
    manager = SocketManager(zmq, context)
    manager.sockets = {
        "foobar": "SOME_TYPE"
    }
    manager.cache = {
        'socket_sentinel': "some-polling-mechanism"
    }
    # And that get_by_name will return "socket_sentinel"
    get_by_name.return_value = 'socket_sentinel'

    # When I call ready
    socket = manager.ready('foobar', 'some-polling-mechanism', timeout=1000)

    # Then the result should be the "socket_sentinel"
    socket.should.equal("socket_sentinel")

    # And engage should have been called
    engage.assert_called_once_with(1000)
def test_socket_manager_get_or_create_preexisting(create, get_by_name, register_socket):
    ("SocketManager().get_or_create() should just return "
     "and register a pre-existing socket with the same name")

    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with no sockets
    manager = SocketManager(zmq, context)
    manager.sockets = {}

    # When I call get_or_create
    result = manager.get_or_create("foobar", "SOME_TYPE", "fake-polling-mechanism")

    # Then it should have returned a socket
    result.should.equal(get_by_name.return_value)

    # And the socket should have been created
    create.assert_called_once_with("foobar", "SOME_TYPE")

    # And should have been retrieved by name
    get_by_name.assert_called_once_with("foobar")

    # And should have been registered
    register_socket.assert_called_once_with(
        result,
        "fake-polling-mechanism"
    )
def test_socket_manager_not_ready(get_by_name, engage):
    ("SocketManager().ready() should return None when the socket is not available"
     )

    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with a fake socket and an *EMPTY* cache
    manager = SocketManager(zmq, context)
    manager.sockets = {"foobar": "SOME_TYPE"}
    manager.cache = {}

    # And that get_by_name will return "socket_sentinel"
    get_by_name.return_value = 'socket_sentinel'

    # When I call ready
    socket = manager.ready('foobar', 'some-polling-mechanism', timeout=1000)

    # Then the result should be None
    socket.should.be.none

    # And engage should have been called
    engage.assert_called_once_with(1000)
def test_socket_manager_ready(get_by_name, engage):
    ("SocketManager().ready() should return the socket "
     "if it's ready and engaged with the given polling mechanism")

    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with a fake socket and a fake cache
    manager = SocketManager(zmq, context)
    manager.sockets = {"foobar": "SOME_TYPE"}
    manager.cache = {'socket_sentinel': "some-polling-mechanism"}
    # And that get_by_name will return "socket_sentinel"
    get_by_name.return_value = 'socket_sentinel'

    # When I call ready
    socket = manager.ready('foobar', 'some-polling-mechanism', timeout=1000)

    # Then the result should be the "socket_sentinel"
    socket.should.equal("socket_sentinel")

    # And engage should have been called
    engage.assert_called_once_with(1000)
def test_socket_manager_get_or_create_preexisting(create, get_by_name,
                                                  register_socket):
    ("SocketManager().get_or_create() should just return "
     "and register a pre-existing socket with the same name")

    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with no sockets
    manager = SocketManager(zmq, context)
    manager.sockets = {}

    # When I call get_or_create
    result = manager.get_or_create("foobar", "SOME_TYPE",
                                   "fake-polling-mechanism")

    # Then it should have returned a socket
    result.should.equal(get_by_name.return_value)

    # And the socket should have been created
    create.assert_called_once_with("foobar", "SOME_TYPE")

    # And should have been retrieved by name
    get_by_name.assert_called_once_with("foobar")

    # And should have been registered
    register_socket.assert_called_once_with(result, "fake-polling-mechanism")
def test_socket_manager_get_or_create(create, get_by_name, register_socket):
    ("SocketManager().get_or_create() should create a socket and register it")

    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with no sockets
    manager = SocketManager(zmq, context)
    manager.sockets = {"foobar": "SOME_TYPE"}

    # When I call get_or_create
    result = manager.get_or_create("foobar", "SOME_TYPE",
                                   "fake-polling-mechanism")

    # Then it should have returned a socket
    result.should.equal(get_by_name.return_value)

    # And .create should not have been called
    create.called.should.be.false

    # And should have been retrieved by name
    get_by_name.assert_called_once_with("foobar")

    # And should have been registered
    register_socket.assert_called_once_with(
        result,
        "fake-polling-mechanism",
    )
def test_socket_manager_repr():
    ("repr(SocketManager()) should be informative")
    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with some fake sockets
    manager = SocketManager(zmq, context)
    manager.sockets = OrderedDict([("foobar", "WHATEVS"), ("awesome", "WHATEVS")])

    # When I get the string representation of the instance
    string = repr(manager)

    # Then it should
    string.should.equal("SocketManager(sockets=['foobar', 'awesome'])")
def test_socket_manager_repr():
    ("repr(SocketManager()) should be informative")
    # Given a zmq mock
    zmq = Mock()

    # And a context
    context = Mock()

    # And a socket manager with some fake sockets
    manager = SocketManager(zmq, context)
    manager.sockets = OrderedDict([("foobar", "WHATEVS"),
                                   ("awesome", "WHATEVS")])

    # When I get the string representation of the instance
    string = repr(manager)

    # Then it should
    string.should.equal("SocketManager(sockets=['foobar', 'awesome'])")