示例#1
0
def test_handle_client_disconnect_no_packet(mocker):
    session = FakeSession(mocker)

    session.handle(run=True)

    session.log.warning.assert_called_once_with('client disconnect')
    assert session.request.recv.call_count == 0
示例#2
0
def test_handle_zero_length_packet(mocker):
    session = FakeSession(mocker)
    session.read_headers.append((FakeOpCode.OP1, 0))
    session.write_headers.append('header({op})data({data})01')
    session.write_headers.append('header({op})data({data})02')
    session.request.recv.side_effect = Exception('should not be called')

    def _fake_handler(pkt, session_):
        assert session == session_

        return [
            (FakeOpCode.OP2, b'resp1'),
            (FakeOpCode.OP2, b'resp2'),
        ]

    session.server.packet_formats = {FakeOpCode.OP1: ZeroLengthPacket}
    session.server.handlers = {FakeOpCode.OP1: _fake_handler}

    session.handle(run=True)

    session.request.sendall.assert_has_calls([
        mocker.call(b'header(2)data(resp1)01resp1'),
        mocker.call(b'header(2)data(resp2)02resp2'),
    ])
    session.log.warning.assert_has_calls([
        mocker.call('client disconnect'),
    ])
示例#3
0
def test_handle_single_response(mocker):
    session = FakeSession(mocker)
    session.read_headers.append((FakeOpCode.OP1, 1))
    session.write_headers.append('header({op})data({data})01')
    session.write_headers.append('header({op})data({data})02')
    session.request.recv.return_value = b'\xFF'

    def _fake_handler(pkt, session_):
        assert pkt.num == 255
        assert session == session_

        return [
            (FakeOpCode.OP2, b'resp1'),
            (FakeOpCode.OP2, b'resp2'),
        ]

    session.server.packet_formats = {FakeOpCode.OP1: FakePacket}
    session.server.handlers = {FakeOpCode.OP1: _fake_handler}

    session.handle(run=True)

    session.request.sendall.assert_has_calls([
        mocker.call(b'header(2)data(resp1)01resp1'),
        mocker.call(b'header(2)data(resp2)02resp2'),
    ])
    session.log.warning.assert_has_calls([
        mocker.call('client disconnect'),
    ])
示例#4
0
def test_handle_client_disconnect_when_reading_packet(mocker):
    session = FakeSession(mocker)
    session.read_headers.append((FakeOpCode.OP1, 100))
    session.request.recv.return_value = b''

    session.handle(run=True)

    session.log.warning.assert_called_once_with('client disconnect')
    session.request.recv.assert_called_once_with(100)
示例#5
0
def test_handle_short_read(mocker):
    session = FakeSession(mocker)
    session.read_headers.append((FakeOpCode.OP1, 4))
    session.request.recv.return_value = b'123'

    session.handle(run=True)

    session.log.warning.assert_has_calls([
        mocker.call(AnyStringWith('short read')),
        mocker.call('client disconnect'),
    ])
示例#6
0
def test_handle_unknown_packet_format(mocker):
    session = FakeSession(mocker)
    session.read_headers.append((FakeOpCode.OP1, 4))
    session.request.recv.return_value = b'1234'

    session.server.packet_formats = {}
    session.server.handlers = {}

    session.handle(run=True)

    session.log.warning.assert_has_calls([
        mocker.call(AnyStringWith('unknown packet format')),
        mocker.call('client disconnect'),
    ])