Public Access
DEVX-159: fix: add GitHub mirror fallback for actionlint and vale downloads
This commit is contained in:
@@ -201,6 +201,50 @@ class TestDownloadAndExtractTarball:
|
||||
with pytest.raises(ClickException, match="not found in archive"):
|
||||
install_tools._download_and_extract_tarball("https://example.com/actionlint.tar.gz", "actionlint")
|
||||
|
||||
def test_fallback_url_succeeds(self, tmp_path: Path) -> None:
|
||||
import io
|
||||
import tarfile
|
||||
|
||||
tarball_path = tmp_path / "archive.tar.gz"
|
||||
binary_content = b"fake binary"
|
||||
with tarfile.open(tarball_path, "w:gz") as tar:
|
||||
info = tarfile.TarInfo(name="actionlint")
|
||||
info.size = len(binary_content)
|
||||
tar.addfile(info, io.BytesIO(binary_content))
|
||||
|
||||
target_dir = tmp_path / "bin"
|
||||
target_dir.mkdir()
|
||||
tarball_bytes = tarball_path.read_bytes()
|
||||
|
||||
def fake_download(url: str, dest: Path) -> None:
|
||||
if "primary" in url:
|
||||
raise OSError("connection refused")
|
||||
Path(dest).write_bytes(tarball_bytes)
|
||||
|
||||
with patch.object(install_tools, "TARGET_DIR", target_dir):
|
||||
with patch.object(install_tools, "_download", side_effect=fake_download):
|
||||
result = install_tools._download_and_extract_tarball(
|
||||
"https://primary.com/actionlint.tar.gz",
|
||||
"actionlint",
|
||||
fallback_urls=["https://fallback.com/actionlint.tar.gz"],
|
||||
)
|
||||
|
||||
assert result == target_dir / "actionlint"
|
||||
assert result.read_bytes() == binary_content
|
||||
|
||||
def test_all_urls_fail(self, tmp_path: Path) -> None:
|
||||
target_dir = tmp_path / "bin"
|
||||
target_dir.mkdir()
|
||||
|
||||
with patch.object(install_tools, "TARGET_DIR", target_dir):
|
||||
with patch.object(install_tools, "_download", side_effect=OSError("connection refused")):
|
||||
with pytest.raises(ClickException, match="Failed to download"):
|
||||
install_tools._download_and_extract_tarball(
|
||||
"https://primary.com/actionlint.tar.gz",
|
||||
"actionlint",
|
||||
fallback_urls=["https://fallback.com/actionlint.tar.gz"],
|
||||
)
|
||||
|
||||
|
||||
class TestInstallActionlint:
|
||||
def test_already_installed(self) -> None:
|
||||
|
||||
Reference in New Issue
Block a user