aboutsummaryrefslogtreecommitdiff
path: root/cli/tests/test_range_request.py
blob: 796bd6c3b1627e170322049038110d0043051828 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import pytest
import subprocess

from tempfile import NamedTemporaryFile
from werkzeug.exceptions import RequestedRangeNotSatisfiable

from onionshare_cli.web.share_mode import parse_range_header


VALID_RANGES = [
    (None, 500, [(0, 499)]),
    ('bytes=0', 500, [(0, 499)]),
    ('bytes=100', 500, [(100, 499)]),
    ('bytes=100-', 500, [(100, 499)]),  # not in the RFC, but how curl sends
    ('bytes=0-99', 500, [(0, 99)]),
    ('bytes=0-599', 500, [(0, 499)]),
    ('bytes=0-0', 500, [(0, 0)]),
    ('bytes=-100', 500, [(400, 499)]),
    ('bytes=0-99,100-199', 500, [(0, 199)]),
    ('bytes=0-100,100-199', 500, [(0, 199)]),
    ('bytes=0-99,101-199', 500, [(0, 99), (101, 199)]),
    ('bytes=0-199,100-299', 500, [(0, 299)]),
    ('bytes=0-99,200-299', 500, [(0, 99), (200, 299)]),
]


INVALID_RANGES = [
    'bytes=200-100',
    'bytes=0-100,300-200',
]


def test_parse_ranges():
    for case in VALID_RANGES:
        (header, target_size, expected) = case
        parsed = parse_range_header(header, target_size)
        assert parsed == expected, case

    for invalid in INVALID_RANGES:
        with pytest.raises(RequestedRangeNotSatisfiable):
            parse_range_header(invalid, 500)