aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorakbash <akbash@herdr.dev>2026-09-03 20:43:42 +0300
committerGitHub <noreply@github.com>2026-09-03 20:43:42 +0300
commitb07ba9ced8b57099f038bc633ed1c9a5f5b3a1ed (patch)
treec4fa37c84be7c0eeb7e28ff9f2c8dd95cb5b0c42 /scripts
parentec745235a95df0004e14069b79689814104c199c (diff)
fix: reject Android in Unix installer (#3577)
refs #3571 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/test_unix_installer.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/scripts/test_unix_installer.py b/scripts/test_unix_installer.py
index ca7d3b19..4e82f5bd 100644
--- a/scripts/test_unix_installer.py
+++ b/scripts/test_unix_installer.py
@@ -38,6 +38,10 @@ class UnixInstallerTests(unittest.TestCase):
case "$1" in
-s) echo Linux ;;
-m) echo x86_64 ;;
+ -o)
+ [ "${FAKE_UNAME_OS_UNAVAILABLE:-}" != "1" ] || exit 1
+ echo "${FAKE_UNAME_OS:-GNU/Linux}"
+ ;;
*) exit 1 ;;
esac
""",
@@ -45,6 +49,7 @@ esac
self._write_executable(
"curl",
"""#!/bin/sh
+: > "$FAKE_CURL_MARKER"
out=""
previous=""
for argument in "$@"; do
@@ -114,7 +119,12 @@ exec {sha256sum} "$@"
path.write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")
return path
- def _run_installer(self, checksum: str | None, tool: str = "sha256sum") -> subprocess.CompletedProcess[str]:
+ def _run_installer(
+ self,
+ checksum: str | None,
+ tool: str = "sha256sum",
+ extra_env: dict[str, str] | None = None,
+ ) -> subprocess.CompletedProcess[str]:
self._select_checksum_tool(tool)
manifest = self._write_manifest(checksum)
env = {
@@ -122,7 +132,9 @@ exec {sha256sum} "$@"
"PATH": str(self.bin_dir),
"FAKE_MANIFEST": str(manifest),
"FAKE_PAYLOAD": str(self.payload),
+ "FAKE_CURL_MARKER": str(self.root / "curl-called"),
"HERDR_INSTALL_DIR": str(self.install_dir),
+ **(extra_env or {}),
}
return subprocess.run(
["/bin/sh", str(INSTALLER)],
@@ -144,6 +156,30 @@ exec {sha256sum} "$@"
self.assertEqual(result.returncode, 0, result.stderr)
self.assertEqual((self.install_dir / "herdr").read_bytes(), self.payload.read_bytes())
+ def test_android_is_rejected_before_replacing_existing_binary(self) -> None:
+ self.install_dir.mkdir()
+ installed = self.install_dir / "herdr"
+ installed.write_bytes(b"existing-herdr\n")
+
+ result = self._run_installer(
+ self.expected_sha256,
+ extra_env={"FAKE_UNAME_OS": "Android"},
+ )
+
+ self.assertNotEqual(result.returncode, 0)
+ self.assertIn("Android/Termux is not currently supported", result.stderr)
+ self.assertFalse((self.root / "curl-called").exists())
+ self.assertEqual(installed.read_bytes(), b"existing-herdr\n")
+
+ def test_missing_uname_operating_system_flag_keeps_linux_supported(self) -> None:
+ result = self._run_installer(
+ self.expected_sha256,
+ extra_env={"FAKE_UNAME_OS_UNAVAILABLE": "1"},
+ )
+
+ self.assertEqual(result.returncode, 0, result.stderr)
+ self.assertEqual((self.install_dir / "herdr").read_bytes(), self.payload.read_bytes())
+
def test_checksum_mismatch_does_not_replace_existing_binary(self) -> None:
self.install_dir.mkdir()
installed = self.install_dir / "herdr"