import binascii import os import pytest import requests from requests.models import Response from semantic_version import Version from aqt import helper def test_helper_altlink(monkeypatch): class Message: headers = {"content-type": "text/plain", "length": 300} text = """ MirrorBrain/2.17.0 http://download.example.io/boo.7z.meta4 2020-03-04T01:11:48Z Example Project https://download.example.io 651 d49eba3937fb063caa48769e8f28377c 25d3a33d00c1e5880679a17fd4b8b831134cfa6f 37e50248cf061109e2cb92105cd2c36a6e271701d6d4a72c4e73c6d82aad790a bec628a149ed24a3a9b83747776ecca5a1fad11c 98b1dee3f741de51167a9428b0560cd2d1f4d945 8717a0cb3d14c1958de5981635c9b90b146da165 78cd2ae3ae37ca7c080a56a2b34eb33ec44a9ef1 http://mirrors.geekpie.club/boo.7z http://ftp.jaist.ac.jp/pub/boo.7z http://ftp.yz.yamagata-u.ac.jp/pub/boo.7z """ def mock_return(url): return Message() monkeypatch.setattr(helper, "_get_meta", mock_return) url = "http://foo.baz/qtproject/boo.7z" alt = "http://mirrors.geekpie.club/boo.7z" newurl = helper.altlink(url, alt) assert newurl.startswith("http://ftp.jaist.ac.jp/") def test_settings(tmp_path): helper.Settings.load_settings( os.path.join(os.path.dirname(__file__), "data", "settings.ini") ) assert helper.Settings.concurrency == 3 assert "http://mirror.example.com" in helper.Settings.blacklist def mocked_iter_content(chunk_size): with open( os.path.join(os.path.dirname(__file__), "data", "windows-5150-update.xml"), "rb" ) as f: data = f.read(chunk_size) while len(data) > 0: yield data data = f.read(chunk_size) return b"" def mocked_requests_get(*args, **kwargs): response = Response() response.status_code = 200 response.iter_content = mocked_iter_content return response def test_helper_downloadBinary_md5(tmp_path, monkeypatch): monkeypatch.setattr(requests.Session, "get", mocked_requests_get) expected = binascii.unhexlify("1d41a93e4a585bb01e4518d4af431933") out = tmp_path.joinpath("text.xml") helper.downloadBinaryFile("http://example.com/test.xml", out, "md5", expected, 60) def test_helper_downloadBinary_sha256(tmp_path, monkeypatch): monkeypatch.setattr(requests.Session, "get", mocked_requests_get) expected = binascii.unhexlify( "07b3ef4606b712923a14816b1cfe9649687e617d030fc50f948920d784c0b1cd" ) out = tmp_path.joinpath("text.xml") helper.downloadBinaryFile( "http://example.com/test.xml", out, "sha256", expected, 60 ) @pytest.mark.parametrize( "version, expect", [ ('1.33.1', Version('1.33.1')), ('1.33.1-202102101246', Version('1.33.1-202102101246')), ('1.33-202102101246', Version('1.33.0-202102101246')), ('2020-05-19-1', Version('2020.0.0-05-19-1')), ], ) def test_helper_to_version_permissive(version, expect): assert helper.to_version_permissive(version) == expect