1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-15 00:03:28 +01:00
pywb/tests/test_range.py
Ilya Kreymer 0c9e658c73
Record unbound Range requests only, don't convert bounded range requests to unbounded (#845)
* record fix: don't convert 0-N range requests to unbounded for recording, only record 0- (unbounded range requests)
* tests: attempt to fix tests, disable youtube-dl related tests
* bump to 2.7.4
2023-05-19 08:08:36 -07:00

84 lines
3.2 KiB
Python

from .base_config_test import BaseConfigTest, fmod
from pywb.warcserver.warcserver import BaseWarcServer
from mock import patch
orig_call = BaseWarcServer.__call__
# ============================================================================
def mock_call(self, environ, start_response):
TestReplayRange.recorder_skip = environ.get('HTTP_RECORDER_SKIP')
return orig_call(self, environ, start_response)
# ============================================================================
@patch('pywb.warcserver.basewarcserver.BaseWarcServer.__call__', mock_call)
class TestReplayRange(BaseConfigTest):
recorder_skip = None
recorder_range = None
@classmethod
def setup_class(cls):
super(TestReplayRange, cls).setup_class('config_test.yaml')
def test_replay_range_start_end(self, fmod):
headers = [('Range', 'bytes=0-200')]
resp = self.get('/pywb/20140127171250{0}/http://example.com/', fmod, headers=headers)
assert resp.status_int == 206
assert resp.headers['Accept-Ranges'] == 'bytes'
assert resp.headers['Content-Range'] == 'bytes 0-200/1270', resp.headers['Content-Range']
assert resp.content_length == 201, resp.content_length
assert self.recorder_skip == '1'
assert 'wombat.js' not in resp.text
def test_replay_range_start_end_2(self, fmod):
headers = [('Range', 'bytes=10-200')]
resp = self.get('/pywb/20140127171250{0}/http://example.com/', fmod, headers=headers)
assert resp.status_int == 206
assert resp.headers['Accept-Ranges'] == 'bytes'
assert resp.headers['Content-Range'] == 'bytes 10-200/1270', resp.headers['Content-Range']
assert resp.content_length == 191, resp.content_length
assert self.recorder_skip == '1'
assert 'wombat.js' not in resp.text
def test_replay_range_start_only(self, fmod):
headers = [('Range', 'bytes=0-')]
resp = self.get('/pywb/20140127171250{0}/http://example.com/', fmod, headers=headers)
assert resp.status_int == 206
assert resp.headers['Accept-Ranges'] == 'bytes'
assert resp.headers['Content-Range'] == 'bytes 0-1269/1270', resp.headers['Content-Range']
assert resp.content_length == 1270, resp.content_length
assert self.recorder_skip == None
assert 'wombat.js' not in resp.text
def test_replay_range_on_redirect(self, fmod):
headers = [('Range', 'bytes=0-')]
resp = self.get('/pywb/2014{0}/http://www.iana.org/domains/example', fmod, headers=headers)
assert resp.headers['Location'].startswith('/pywb/2014{0}/'.format(fmod))
assert resp.status_code == 302
def test_error_range_out_of_bounds_1(self, fmod):
headers = [('Range', 'bytes=10-2000')]
resp = self.get('/pywb/20140127171251{0}/http://example.com/', fmod, headers=headers, status=416)
assert resp.status_int == 416
assert self.recorder_skip == '1'
def test_error_range_out_of_bounds_2(self, fmod):
headers = [('Range', 'bytes=2000-10')]
resp = self.get('/pywb/20140127171251{0}/http://example.com/', fmod, headers=headers, status=416)
assert resp.status_int == 416
assert self.recorder_skip == '1'