Beispiel #1
0
def test_parse_unexpected_end_of_data():
    body = (b'--boundary\n'
            b'Content-Disposition: form-data; name=foobar\n'
            b'\n'
            b'foobar\n')
    with pytest.raises(ValueError) as exc_info:
        multipart.parse(body, 'boundary')
    assert str(exc_info.value) == ('invalid form data: unexpected end of data')
Beispiel #2
0
def test_parse_content_disposition_missing_data():
    body = (b'--boundary\n'
            b'Content-Disposition: form-data\n'
            b'\n'
            b'foobar\n'
            b'--boundary--\n')
    with pytest.raises(ValueError) as exc_info:
        multipart.parse(body, 'boundary')
    assert str(exc_info.value) == (
        'invalid form data: expected name in Content-Disposition')
Beispiel #3
0
def test_parse_invalid_content_disposition():
    body = (b'--boundary\n'
            b'Content-Disposition: foo; bar; baz\n'
            b'\n'
            b'foobar\n'
            b'--boundary--\n')
    with pytest.raises(ValueError) as exc_info:
        multipart.parse(body, 'boundary')
    assert str(exc_info.value) == (
        'invalid form data: invalid Content-Disposition: 8: got \';\', '
        'expected \'=\'')
Beispiel #4
0
def test_parse_file_without_content_type():
    body = (
        b'--boundary\n'
        b'Content-Disposition: form-data; name=foobar; filename=foobar.txt\n'
        b'\n'
        b'foobar\n'
        b'--boundary--\n')
    with pytest.raises(ValueError) as exc_info:
        multipart.parse(body, 'boundary')
    assert str(
        exc_info.value) == ('invalid form data: expected header Content-Type')
Beispiel #5
0
async def test_parse():
    body = (b'--boundary\n'
            b'Content-Disposition: form-data; name=foo\n'
            b'\n'
            b'123\n'
            b'--boundary\n'
            b'Content-Disposition: form-data; name=bar\n'
            b'\n'
            b'456\n'
            b'--boundary\n'
            b'Content-Disposition: form-data; name=baz; filename=baz.txt\n'
            b'Content-Type: text/plain; charset=UTF-8\n'
            b'\n'
            b'789\n'
            b'--boundary--\n')
    data = multipart.parse(body, 'boundary')
    assert set(data) == {'foo', 'bar', 'baz'}
    assert data['foo'] == '123'
    assert data['bar'] == '456'
    assert isinstance(data['baz'], multipart.File)
    assert data['baz'].name == 'baz.txt'
    assert data['baz'].content_type == 'text/plain'
    assert data['baz'].charset == 'UTF-8'
    with pytest.raises(ValueError):
        data['baz'].boundary
    assert data['baz'].content == b'789'
Beispiel #6
0
async def test_parse_nested():
    body = (b'--outer-boundary\n'
            b'Content-Disposition: form-data; name=inner; filename=inner\n'
            b'Content-Type: multipart/form-data; boundary=inner-boundary\n'
            b'\n'
            b'--inner-boundary\n'
            b'Content-Disposition: form-data; name=foo\n'
            b'\n'
            b'bar\n'
            b'--inner-boundary--\n'
            b'--outer-boundary--\n')

    data = multipart.parse(body, 'outer-boundary')
    assert set(data) == {'inner'}
    assert isinstance(data['inner'], multipart.File)
    assert data['inner'].name == 'inner'
    assert data['inner'].content_type == 'multipart/form-data'
    assert data['inner'].boundary == 'inner-boundary'

    data = multipart.parse(data['inner'].content, 'inner-boundary')
    assert set(data) == {'foo'}
    assert data['foo'] == 'bar'
Beispiel #7
0
def test_parse_no_content_disposition():
    body = (b'--boundary\n' b'\n' b'foobar\n' b'--boundary--\n')
    with pytest.raises(ValueError) as exc_info:
        multipart.parse(body, 'boundary')
    assert str(exc_info.value) == (
        'invalid form data: expected header Content-Disposition')
Beispiel #8
0
def test_parse_invalid_header():
    body = (b'--boundary\n' b'foobar\n' b'\n' b'--boundary--\n')
    with pytest.raises(ValueError) as exc_info:
        multipart.parse(body, 'boundary')
    assert str(exc_info.value) == 'invalid form data: expected header'
Beispiel #9
0
def test_parse_unexpected_end_in_headers():
    with pytest.raises(ValueError) as exc_info:
        multipart.parse(b'--boundary', 'boundary')
    assert str(exc_info.value) == 'invalid form data: unexpected end of data'
Beispiel #10
0
def test_parse_no_data():
    data = multipart.parse(b'--boundary--', 'boundary')
    assert data == {}
Beispiel #11
0
def test_parse_no_start():
    with pytest.raises(ValueError) as exc_info:
        multipart.parse(b'blaat', 'boundary')
    assert str(exc_info.value) == 'invalid form data: missing boundary'