aboutsummaryrefslogtreecommitdiff
path: root/cli/tests/test_range_request.py
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tests/test_range_request.py')
-rw-r--r--cli/tests/test_range_request.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/cli/tests/test_range_request.py b/cli/tests/test_range_request.py
new file mode 100644
index 00000000..796bd6c3
--- /dev/null
+++ b/cli/tests/test_range_request.py
@@ -0,0 +1,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) \ No newline at end of file