mirror of
https://github.com/D-Ogi/WatermarkRemover-AI.git
synced 2026-10-21 06:10:19 -05:00
98 lines
3.7 KiB
Python
98 lines
3.7 KiB
Python
"""Execute Linux setup with controlled command stubs; never install or download."""
|
|
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
pytestmark = pytest.mark.skipif(
|
|
sys.platform != "linux", reason="Linux installer branches"
|
|
)
|
|
REPO = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
def run_setup(tmp_path, *, gpu, mirror, fail_install=False):
|
|
"""Record selected indexes and stage ordering from the actual shell script."""
|
|
project = tmp_path / "project with spaces"
|
|
project.mkdir()
|
|
shutil.copyfile(REPO / "setup.sh", project / "setup.sh")
|
|
bindir = tmp_path / "bin"
|
|
bindir.mkdir()
|
|
program = tmp_path / "fake_python.py"
|
|
program.write_text(
|
|
r"""import json, os, sys
|
|
from pathlib import Path
|
|
args = sys.argv[1:]
|
|
with open(os.environ['WMR_TEST_LOG'], 'a') as log:
|
|
log.write(json.dumps(args) + '\n')
|
|
if args[:1] == ['-c'] and 'sys.version_info' in args[1]:
|
|
print('3.12')
|
|
elif args[:2] == ['-m', 'venv']:
|
|
activate = Path(args[2]) / 'bin' / 'activate'
|
|
activate.parent.mkdir(parents=True)
|
|
activate.write_text('# controlled environment\n')
|
|
elif 'requirements.txt' in args and os.environ.get('WMR_TEST_FAIL') == '1':
|
|
sys.exit(17)
|
|
""",
|
|
encoding="utf-8",
|
|
)
|
|
wrapper = '#!/bin/sh\nexec "$WMR_TEST_PYTHON" "$WMR_TEST_PROGRAM" "$@"\n'
|
|
for name in ("python3.12", "python", "pip"):
|
|
executable = bindir / name
|
|
executable.write_text(wrapper, encoding="utf-8")
|
|
executable.chmod(0o755)
|
|
if gpu:
|
|
executable = bindir / "nvidia-smi"
|
|
executable.write_text("#!/bin/sh\nexit 0\n", encoding="utf-8")
|
|
executable.chmod(0o755)
|
|
log = tmp_path / "commands.jsonl"
|
|
env = os.environ.copy()
|
|
env.update(
|
|
PATH=f"{bindir}:/usr/bin:/bin",
|
|
WMR_TEST_PYTHON=sys.executable,
|
|
WMR_TEST_PROGRAM=str(program),
|
|
WMR_TEST_LOG=str(log),
|
|
WMR_TEST_FAIL="1" if fail_install else "0",
|
|
PIP_EXTRA_INDEX_URL="https://packages.invalid/simple",
|
|
)
|
|
result = subprocess.run(
|
|
["/bin/bash", str(project / "setup.sh")],
|
|
input=("y" if mirror else "n") + "n",
|
|
env=env,
|
|
text=True,
|
|
capture_output=True,
|
|
timeout=30,
|
|
)
|
|
commands = [json.loads(line) for line in log.read_text().splitlines()]
|
|
return result, commands
|
|
|
|
|
|
@pytest.mark.parametrize("gpu", [False, True])
|
|
@pytest.mark.parametrize("mirror", [False, True])
|
|
def test_torch_backend_index_is_unambiguous(tmp_path, gpu, mirror):
|
|
"""Verify CPU/CUDA index selection independently of the general package mirror."""
|
|
result, commands = run_setup(tmp_path, gpu=gpu, mirror=mirror)
|
|
assert result.returncode == 0, result.stdout + result.stderr
|
|
torch_install = next(args for args in commands if "torch>=2.14.0" in args)
|
|
expected = "https://download.pytorch.org/whl/" + ("cu126" if gpu else "cpu")
|
|
assert torch_install[torch_install.index("--index-url") + 1] == expected
|
|
assert "--isolated" in torch_install
|
|
assert "--extra-index-url" not in torch_install
|
|
assert "-i" not in torch_install
|
|
app_install = next(args for args in commands if "requirements.txt" in args)
|
|
assert ("-i" in app_install) == mirror
|
|
assert ["-m", "pip", "check"] in commands
|
|
assert ["-m", "lama_inpaint", "download", "--verbose"] in commands
|
|
|
|
|
|
def test_install_failure_stops_before_model_preparation(tmp_path):
|
|
"""A failed dependency install must stop before download or success reporting."""
|
|
result, commands = run_setup(tmp_path, gpu=False, mirror=False, fail_install=True)
|
|
assert result.returncode == 17
|
|
assert ["-m", "lama_inpaint", "download", "--verbose"] not in commands
|
|
assert "Setup complete!" not in result.stdout
|