示例#1
0
def test_backend_alive_cycle(mock_datetime_mod):
    now = datetime.datetime.now()
    mock_datetime_mod.datetime.now = mock.MagicMock(side_effect=lambda: now)

    assert TIMEOUT_BACKEND_ALIVE > datetime.timedelta(0)

    mock_clientsocket1 = mock.MagicMock()
    mock_clientsocket2 = mock.MagicMock()
    backend = Backend()
    backend.sockets = [mock.sentinel.SERVER_SOCKET, mock_clientsocket1, mock_clientsocket2]
    backend.connection[mock_clientsocket1] = FrontendConnection(backend, mock_clientsocket1)
    backend.connection[mock_clientsocket2] = FrontendConnection(backend, mock_clientsocket2)

    # cycle must send alive for all newly connected frontends:
    backend._cyclic()
    assert b'BackendAlive' in mock_clientsocket1.send.call_args[0][0]
    assert b'BackendAlive' in mock_clientsocket2.send.call_args[0][0]

    # no new alive message before timeout has expired:
    now += TIMEOUT_BACKEND_ALIVE * 0.9
    mock_clientsocket1.send.reset_mock()
    mock_clientsocket2.send.reset_mock()
    backend._cyclic()
    assert not mock_clientsocket1.called
    assert not mock_clientsocket2.called

    # but right after:
    now += TIMEOUT_BACKEND_ALIVE * 0.15
    mock_clientsocket1.send.reset_mock()
    mock_clientsocket2.send.reset_mock()
    backend._cyclic()
    assert b'BackendAlive' in mock_clientsocket1.send.call_args[0][0]
    assert b'BackendAlive' in mock_clientsocket2.send.call_args[0][0]
示例#2
0
def test_frontend_timeout(mock_datetime_mod):
    now = datetime.datetime.now()
    mock_datetime_mod.datetime.now = mock.MagicMock(side_effect=lambda: now)
    mock_clientsocket1 = mock.MagicMock()
    mock_clientsocket2 = mock.MagicMock()
    backend = Backend()
    backend.sockets = [
        mock.sentinel.SERVER_SOCKET, mock_clientsocket1, mock_clientsocket2
    ]
    backend.connection[mock_clientsocket1] = FrontendConnection(
        backend, mock_clientsocket1)
    backend.connection[mock_clientsocket2] = FrontendConnection(
        backend, mock_clientsocket2)

    assert TIMEOUT_LAST_MESSAGE > datetime.timedelta(0)

    # prevent alive message is mixed into communication:
    backend.ts_alive_sent = now

    backend._cyclic()
    assert not mock_clientsocket1.close.called
    assert not mock_clientsocket2.close.called

    now += 0.9 * TIMEOUT_LAST_MESSAGE
    backend.ts_alive_sent = now
    backend._cyclic()
    assert not mock_clientsocket1.close.called
    assert not mock_clientsocket2.close.called

    # now receive a message from one frontend:
    mock_clientsocket1.recv = mock.MagicMock(side_effect=[
        MessageSerializer().serialize(CompletionRequest('t', 'g', 10)),
        BlockingIOError
    ])
    backend._receive(mock_clientsocket1)

    now += 0.2 * TIMEOUT_LAST_MESSAGE
    backend.ts_alive_sent = now
    backend._cyclic()
    assert not mock_clientsocket1.close.called
    assert mock_clientsocket2.close.called

    now += TIMEOUT_LAST_MESSAGE
    backend.ts_alive_sent = now
    backend._cyclic()
    assert mock_clientsocket1.close.called
示例#3
0
def test_frontend_timeout(mock_datetime_mod):
    now = datetime.datetime.now()
    mock_datetime_mod.datetime.now = mock.MagicMock(side_effect=lambda: now)
    mock_clientsocket1 = mock.MagicMock()
    mock_clientsocket2 = mock.MagicMock()
    backend = Backend()
    backend.sockets = [mock.sentinel.SERVER_SOCKET, mock_clientsocket1, mock_clientsocket2]
    backend.connection[mock_clientsocket1] = FrontendConnection(backend, mock_clientsocket1)
    backend.connection[mock_clientsocket2] = FrontendConnection(backend, mock_clientsocket2)

    assert TIMEOUT_LAST_MESSAGE > datetime.timedelta(0)

    # prevent alive message is mixed into communication:
    backend.ts_alive_sent = now

    backend._cyclic()
    assert not mock_clientsocket1.close.called
    assert not mock_clientsocket2.close.called

    now += 0.9 * TIMEOUT_LAST_MESSAGE
    backend.ts_alive_sent = now
    backend._cyclic()
    assert not mock_clientsocket1.close.called
    assert not mock_clientsocket2.close.called

    # now receive a message from one frontend:
    mock_clientsocket1.recv = mock.MagicMock(side_effect=[MessageSerializer().serialize(CompletionRequest('t', 'g', 10)), BlockingIOError])
    backend._receive(mock_clientsocket1)

    now += 0.2 * TIMEOUT_LAST_MESSAGE
    backend.ts_alive_sent = now
    backend._cyclic()
    assert not mock_clientsocket1.close.called
    assert mock_clientsocket2.close.called

    now += TIMEOUT_LAST_MESSAGE
    backend.ts_alive_sent = now
    backend._cyclic()
    assert mock_clientsocket1.close.called
示例#4
0
def test_backend_alive_cycle(mock_datetime_mod):
    now = datetime.datetime.now()
    mock_datetime_mod.datetime.now = mock.MagicMock(side_effect=lambda: now)

    assert TIMEOUT_BACKEND_ALIVE > datetime.timedelta(0)

    mock_clientsocket1 = mock.MagicMock()
    mock_clientsocket2 = mock.MagicMock()
    backend = Backend()
    backend.sockets = [
        mock.sentinel.SERVER_SOCKET, mock_clientsocket1, mock_clientsocket2
    ]
    backend.connection[mock_clientsocket1] = FrontendConnection(
        backend, mock_clientsocket1)
    backend.connection[mock_clientsocket2] = FrontendConnection(
        backend, mock_clientsocket2)

    # cycle must send alive for all newly connected frontends:
    backend._cyclic()
    assert b'BackendAlive' in mock_clientsocket1.send.call_args[0][0]
    assert b'BackendAlive' in mock_clientsocket2.send.call_args[0][0]

    # no new alive message before timeout has expired:
    now += TIMEOUT_BACKEND_ALIVE * 0.9
    mock_clientsocket1.send.reset_mock()
    mock_clientsocket2.send.reset_mock()
    backend._cyclic()
    assert not mock_clientsocket1.called
    assert not mock_clientsocket2.called

    # but right after:
    now += TIMEOUT_BACKEND_ALIVE * 0.15
    mock_clientsocket1.send.reset_mock()
    mock_clientsocket2.send.reset_mock()
    backend._cyclic()
    assert b'BackendAlive' in mock_clientsocket1.send.call_args[0][0]
    assert b'BackendAlive' in mock_clientsocket2.send.call_args[0][0]