test: conftest: require_programs() automatically (MR 2483)

Pmbootstrap finds all its host dependencies during init, ensure we do
that for pytest too.

Adapt require_programs() to use subprocess directly rather than have to
solve the weird dependency chain of pmb.helpers.run which depends on the
global context being initialised before it's usable.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
This commit is contained in:
Caleb Connolly 2024-11-11 22:39:35 +01:00 committed by Oliver Smith
parent cefe98fb69
commit bb12609753
No known key found for this signature in database
GPG key ID: 5AE7F5513E0885CB
3 changed files with 17 additions and 4 deletions

View file

@ -32,6 +32,7 @@ import pmb.chroot.zap
import pmb.parse.deviceinfo
from pmb.parse.deviceinfo import Deviceinfo
import pmb.parse._apkbuild
import subprocess
def require_programs() -> None:
@ -50,11 +51,16 @@ def require_programs() -> None:
if "losetup" not in missing:
# Check if losetup supports the --json argument. Use the absolute path
# here, so it works in Debian too without using sudo.
# FIXME: we use subprocess directly here since pmb.helpers.run.user() requires
# global context to be initialized but we want this to run early in pytest.
try:
pmb.helpers.run.user(
[pmb.config.required_programs["losetup"], "--json"], check=True, output="null"
subprocess.run(
[pmb.config.required_programs["losetup"], "--json"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
check=True,
)
except RuntimeError:
except subprocess.CalledProcessError:
losetup_missing_json = True
error_message = ""