mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-13 20:08:05 +08:00
56 lines
2.9 KiB
Python
56 lines
2.9 KiB
Python
"""Exercise the real script with task-owned paths and mocked package installs."""
|
|
import os
|
|
from pathlib import Path
|
|
import subprocess
|
|
import tempfile
|
|
import unittest
|
|
|
|
|
|
class AutoSetupTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.temp = tempfile.TemporaryDirectory()
|
|
self.addCleanup(self.temp.cleanup)
|
|
self.root = Path(self.temp.name)
|
|
self.logs = self.root / "log"
|
|
self.logs.mkdir()
|
|
(self.root / "bin").mkdir()
|
|
(self.root / "metadata").mkdir()
|
|
self.installed = self.root / "installed"
|
|
self.configured = self.root / "configured"
|
|
helper = self.root / "functions.sh"
|
|
helper.write_text('config_load() { return 0; }\nconfig_get() { eval "$1=\\\"$FIXTURE_MAIN\\\""; }\n')
|
|
installer = self.root / "bin/is-opkg"
|
|
installer.write_text('#!/bin/sh\nprintf "%s\\n" "$@" >> "$FIXTURE_INSTALLED"\n')
|
|
installer.chmod(0o700)
|
|
source = (Path(__file__).resolve().parents[1] / "root/usr/libexec/quickstart/auto_setup.sh").read_text()
|
|
source = source.replace("/var/log", str(self.logs)).replace("/lib/functions.sh", str(helper)).replace("/usr/libexec/istorea", str(self.root / "metadata"))
|
|
self.script = self.root / "auto_setup.sh"
|
|
self.script.write_text(source)
|
|
self.env = dict(os.environ, PATH=str(self.root / "bin") + ":" + os.environ["PATH"], FIXTURE_MAIN=str(self.root / "data"), FIXTURE_INSTALLED=str(self.installed), FIXTURE_CONFIGURED=str(self.configured))
|
|
|
|
def run_script(self, *args):
|
|
return subprocess.run(["sh", str(self.script), *args], env=self.env, capture_output=True, text=True, timeout=5)
|
|
|
|
def test_rejects_all_invalid_arguments_before_side_effects(self):
|
|
for name in ("../other", "--help", "two packages", "pkg'", "", "a" * 129):
|
|
result = self.run_script("aria2", name)
|
|
self.assertNotEqual(result.returncode, 0)
|
|
self.assertFalse(self.installed.exists())
|
|
self.assertEqual(list(self.logs.iterdir()), [])
|
|
|
|
def test_normal_packages_install_configure_and_report(self):
|
|
packages = ("aria2", "foo+bar_1.2-3")
|
|
for name in packages:
|
|
(self.root / "metadata" / (name + ".sh")).write_text('printf "%s\\n" "' + name + '" >> "$FIXTURE_CONFIGURED"\n')
|
|
result = self.run_script(*packages)
|
|
self.assertEqual(result.returncode, 0, result.stderr)
|
|
self.assertEqual(self.installed.read_text().splitlines(), ["install", "app-meta-aria2", "install", "app-meta-foo+bar_1.2-3"])
|
|
self.assertEqual(self.configured.read_text().splitlines(), list(packages))
|
|
self.assertEqual((self.logs / "auto_setup.success").read_text().splitlines(), list(packages))
|
|
self.assertEqual((self.logs / "auto_setup.input").read_text().splitlines(), list(packages))
|
|
self.assertEqual((self.logs / "auto_setup.failed").read_text(), "")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|