mirror of
https://github.com/miurahr/aqtinstall.git
synced 2025-12-18 05:04:38 +03:00
Use sha256 hashes only from trusted mirrors
To keep this commit small, `hashurl` was removed from QtPackage, and `get_hash` constructs the hash url based on the url of the 7z archive to download. I think that in the future, QtArchive and QtPackage could be refactored to construct this url more appropriately. However, this would be a complicated change that doesn't belong in this commit.
This commit is contained in:
@@ -9,8 +9,8 @@ import requests
|
||||
from requests.models import Response
|
||||
|
||||
from aqt import helper
|
||||
from aqt.exceptions import ArchiveChecksumError, ArchiveConnectionError, ArchiveDownloadError
|
||||
from aqt.helper import getUrl, retry_on_errors
|
||||
from aqt.exceptions import ArchiveChecksumError, ArchiveConnectionError, ArchiveDownloadError, ChecksumDownloadFailure
|
||||
from aqt.helper import Settings, get_hash, getUrl, retry_on_errors
|
||||
from aqt.metadata import Version
|
||||
|
||||
|
||||
@@ -183,6 +183,41 @@ def test_helper_retry_on_error(num_attempts_before_success, num_retries_allowed)
|
||||
assert retry_on_errors(action, (RuntimeError,), num_retries_allowed, "do something")
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"num_tries_required, num_retries_allowed",
|
||||
(
|
||||
(2, 5),
|
||||
(5, 5),
|
||||
(6, 5),
|
||||
),
|
||||
)
|
||||
def test_helper_get_hash_retries(monkeypatch, num_tries_required, num_retries_allowed):
|
||||
num_tries = 0
|
||||
|
||||
def mock_getUrl(url, *args, **kwargs):
|
||||
nonlocal num_tries
|
||||
num_tries += 1
|
||||
if num_tries < num_tries_required:
|
||||
raise ArchiveConnectionError(f"Must retry {num_tries_required - num_tries} more times before success")
|
||||
parsed = urlparse(url)
|
||||
base = f"{parsed.scheme}://{parsed.netloc}"
|
||||
assert base in Settings.trusted_mirrors
|
||||
|
||||
hash_filename = str(parsed.path.split("/")[-1])
|
||||
assert hash_filename == "archive.7z.sha256"
|
||||
return "MOCK_HASH archive.7z"
|
||||
|
||||
monkeypatch.setattr("aqt.helper.getUrl", mock_getUrl)
|
||||
|
||||
if num_tries_required > num_retries_allowed:
|
||||
with pytest.raises(ChecksumDownloadFailure) as e:
|
||||
result = get_hash("http://insecure.mirror.com/some/path/to/archive.7z", "sha256", (5, 5))
|
||||
assert e.type == ChecksumDownloadFailure
|
||||
else:
|
||||
result = get_hash("http://insecure.mirror.com/some/path/to/archive.7z", "sha256", (5, 5))
|
||||
assert result == "MOCK_HASH"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"version, expect",
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user