update downloader tests

This commit is contained in:
Mike Fährmann
2022-11-16 22:59:18 +01:00
parent f87cfa5f66
commit 6e08ad26f7

View File

@@ -158,6 +158,7 @@ class TestDownloaderBase(unittest.TestCase):
self.assertEqual( self.assertEqual(
pathfmt.extension, pathfmt.extension,
expected_extension, expected_extension,
content[0:16],
) )
self.assertEqual( self.assertEqual(
os.path.splitext(pathfmt.realpath)[1][1:], os.path.splitext(pathfmt.realpath)[1][1:],
@@ -180,7 +181,7 @@ class TestHTTPDownloader(TestDownloaderBase):
def _run_test(self, ext, input, output, def _run_test(self, ext, input, output,
extension, expected_extension=None): extension, expected_extension=None):
TestDownloaderBase._run_test( TestDownloaderBase._run_test(
self, self.address + "/image." + ext, input, output, self, self.address + "/" + ext, input, output,
extension, expected_extension) extension, expected_extension)
def tearDown(self): def tearDown(self):
@@ -207,7 +208,7 @@ class TestHTTPDownloader(TestDownloaderBase):
self._run_test("gif", None, DATA["gif"], "jpg", "gif") self._run_test("gif", None, DATA["gif"], "jpg", "gif")
def test_http_filesize_min(self): def test_http_filesize_min(self):
url = self.address + "/image.gif" url = self.address + "/gif"
pathfmt = self._prepare_destination(None, extension=None) pathfmt = self._prepare_destination(None, extension=None)
self.downloader.minsize = 100 self.downloader.minsize = 100
with self.assertLogs(self.downloader.log, "WARNING"): with self.assertLogs(self.downloader.log, "WARNING"):
@@ -215,7 +216,7 @@ class TestHTTPDownloader(TestDownloaderBase):
self.assertFalse(success) self.assertFalse(success)
def test_http_filesize_max(self): def test_http_filesize_max(self):
url = self.address + "/image.jpg" url = self.address + "/jpg"
pathfmt = self._prepare_destination(None, extension=None) pathfmt = self._prepare_destination(None, extension=None)
self.downloader.maxsize = 100 self.downloader.maxsize = 100
with self.assertLogs(self.downloader.log, "WARNING"): with self.assertLogs(self.downloader.log, "WARNING"):
@@ -243,19 +244,14 @@ class TestTextDownloader(TestDownloaderBase):
class HttpRequestHandler(http.server.BaseHTTPRequestHandler): class HttpRequestHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self): def do_GET(self):
if self.path.startswith("/image."): try:
ext = self.path.rpartition(".")[2] output = DATA[self.path[1:]]
content_type = MIME_TYPES.get(ext) except KeyError:
output = DATA[ext]
else:
self.send_response(404) self.send_response(404)
self.wfile.write(self.path.encode()) self.wfile.write(self.path.encode())
return return
headers = { headers = {"Content-Length": len(output)}
"Content-Type": content_type,
"Content-Length": len(output),
}
if "Range" in self.headers: if "Range" in self.headers:
status = 206 status = 206
@@ -276,38 +272,60 @@ class HttpRequestHandler(http.server.BaseHTTPRequestHandler):
self.wfile.write(output) self.wfile.write(output)
DATA = { SAMPLES = {
"jpg" : binascii.a2b_base64( ("jpg" , binascii.a2b_base64(
"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB" "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB"
"AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEB" "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEB"
"AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB" "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB"
"AQEBAQEBAQEBAQEBAQH/wAARCAABAAEDAREAAhEBAxEB/8QAFAABAAAAAAAAAAAA" "AQEBAQEBAQEBAQEBAQH/wAARCAABAAEDAREAAhEBAxEB/8QAFAABAAAAAAAAAAAA"
"AAAAAAAACv/EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAUAQEAAAAAAAAAAAAAAAAA" "AAAAAAAACv/EABQQAQAAAAAAAAAAAAAAAAAAAAD/xAAUAQEAAAAAAAAAAAAAAAAA"
"AAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AfwD/2Q=="), "AAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8AfwD/2Q==")),
"png" : binascii.a2b_base64( ("png" , binascii.a2b_base64(
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVQIHWP4DwAB" "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVQIHWP4DwAB"
"AQEANl9ngAAAAABJRU5ErkJggg=="), "AQEANl9ngAAAAABJRU5ErkJggg==")),
"gif" : binascii.a2b_base64( ("gif" , binascii.a2b_base64(
"R0lGODdhAQABAIAAAP///////ywAAAAAAQABAAACAkQBADs="), "R0lGODdhAQABAIAAAP///////ywAAAAAAQABAAACAkQBADs=")),
"bmp" : b"BM", ("bmp" , b"BM"),
"webp": b"RIFF????WEBP", ("webp", b"RIFF????WEBP"),
"avif": b"????ftypavif", ("avif", b"????ftypavif"),
"svg" : b"<?xml", ("avif", b"????ftypavis"),
"ico" : b"\x00\x00\x01\x00", ("svg" , b"<?xml"),
"cur" : b"\x00\x00\x02\x00", ("ico" , b"\x00\x00\x01\x00"),
"psd" : b"8BPS", ("cur" , b"\x00\x00\x02\x00"),
"webm": b"\x1A\x45\xDF\xA3", ("psd" , b"8BPS"),
"ogg" : b"OggS", ("mp4" , b"????ftypmp4"),
"wav" : b"RIFF????WAVE", ("mp4" , b"????ftypavc1"),
"mp3" : b"ID3", ("mp4" , b"????ftypiso3"),
"zip" : b"PK\x03\x04", ("mp4" , b"????ftypM4V"),
"rar" : b"\x52\x61\x72\x21\x1A\x07", ("webm", b"\x1A\x45\xDF\xA3"),
"7z" : b"\x37\x7A\xBC\xAF\x27\x1C", ("ogg" , b"OggS"),
"pdf" : b"%PDF-", ("wav" , b"RIFF????WAVE"),
"swf" : b"CWS", ("mp3" , b"ID3"),
("mp3" , b"\xFF\xFB"),
("mp3" , b"\xFF\xF3"),
("mp3" , b"\xFF\xF2"),
("zip" , b"PK\x03\x04"),
("zip" , b"PK\x05\x06"),
("zip" , b"PK\x07\x08"),
("rar" , b"Rar!\x1A\x07"),
("rar" , b"\x52\x61\x72\x21\x1A\x07"),
("7z" , b"\x37\x7A\xBC\xAF\x27\x1C"),
("pdf" , b"%PDF-"),
("swf" , b"FWS"),
("swf" , b"CWS"),
} }
DATA = {}
for ext, content in SAMPLES:
if ext not in DATA:
DATA[ext] = content
for idx, (_, content) in enumerate(SAMPLES):
DATA["S{:>02}".format(idx)] = content
# reverse mime types mapping # reverse mime types mapping
MIME_TYPES = { MIME_TYPES = {
ext: mtype ext: mtype
@@ -316,14 +334,14 @@ MIME_TYPES = {
def generate_tests(): def generate_tests():
def _generate_test(ext): def generate_test(idx, ext, content):
def test(self): def test(self):
self._run_test(ext, None, DATA[ext], "bin", ext) self._run_test("S{:>02}".format(idx), None, content, "bin", ext)
test.__name__ = "test_http_ext_" + ext test.__name__ = "test_http_ext_{:>02}_{}".format(idx, ext)
return test return test
for ext in DATA: for idx, (ext, content) in enumerate(SAMPLES):
test = _generate_test(ext) test = generate_test(idx, ext, content)
setattr(TestHTTPDownloader, test.__name__, test) setattr(TestHTTPDownloader, test.__name__, test)