Пример #1
0
def test_status_raises_not_enough_data(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.stub(),
        header_parser=mocker.stub(),
        body_parser=mocker.stub()
    )

    with pytest.raises(NotEnoughDataError):
        p.status()
Пример #2
0
def test_body_transitions_to_done_on_empty_body(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.stub(),
        header_parser=mocker.stub(),
        body_parser=mocker.Mock(return_value=b'body value'),
        start=States.Body
    )
    p.body()

    assert p.state == States.Done
Пример #3
0
def test_header_raises_on_bad_format(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.stub(),
        header_parser=mocker.stub(),
        body_parser=mocker.stub(),
        start=States.Header
    )
    p.buffer = b'\n'

    with pytest.raises(ParseError):
        p.header()
Пример #4
0
def test_empty_header_transitions_to_body(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.stub(),
        header_parser=mocker.stub(),
        body_parser=mocker.stub(),
        start=States.Header
    )
    p.buffer = b''
    p.header()

    assert p.state == States.Body
Пример #5
0
def test_status_transitions_to_header_state(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.Mock(return_value={'status': 'status success'}),
        header_parser=mocker.stub(),
        body_parser=mocker.stub()
    )
    p.buffer = b'left\r\nright'
    p.status()

    assert p.result['status'] == 'status success'
    assert p.state == States.Header
Пример #6
0
def test_header_writes_value(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.stub(),
        header_parser=mocker.Mock(return_value=('header key', 'header value')),
        body_parser=mocker.stub(),
        start=States.Header
    )
    p.buffer = b'header key: header value\r\n\r\nright'
    p.header()

    assert p.result['headers']['header key'] == 'header value'
    assert p.state == States.Header
Пример #7
0
def test_parse(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.Mock(return_value={'status': 'status value'}),
        header_parser=mocker.Mock(return_value=('header key', 'header value')),
        body_parser=mocker.Mock(return_value=b'body value'),
    )
    result = p.parse(b'status line\r\nheader lines\r\nContent-length: 10\r\n\r\nbody value')

    assert result['status'] == 'status value'
    assert result['headers']['header key'] == 'header value'
    assert result['body'] == b'body value'
    assert p.state == States.Done
Пример #8
0
def test_body_too_much_data_and_transitions_to_done(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.stub(),
        header_parser=mocker.stub(),
        body_parser=mocker.Mock(side_effect=TooMuchDataError),
        start=States.Body
    )
    p.buffer = b'body value'
    p.result['headers']['Content-length'] = ContentLengthValue(length=1)

    with pytest.raises(TooMuchDataError):
        p.body()
    assert p.state == States.Done
Пример #9
0
def test_body_saves_value_and_transitions_to_done(delimiter, mocker):
    p = Parser(
        delimiter=delimiter,
        status_parser=mocker.stub(),
        header_parser=mocker.stub(),
        body_parser=mocker.Mock(return_value=b'body value'),
        start=States.Body
    )
    p.buffer = b'body value'
    p.result['headers']['Content-length'] = ContentLengthValue(length=len(p.buffer))
    p.body()

    assert p.result['body'] == b'body value'
    assert p.state == States.Done
Пример #10
0
def test_default_state(delimiter, mocker):
    p = Parser(delimiter=delimiter, status_parser=mocker.stub(), header_parser=mocker.stub(), body_parser=mocker.stub())

    assert p.state == States.Status
Пример #11
0
def test_default_result(delimiter, mocker):
    p = Parser(delimiter=delimiter, status_parser=mocker.stub(), header_parser=mocker.stub(), body_parser=mocker.stub())

    assert p.result == {'headers': {}, 'body': b''}