test: Add userspace tests
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# SPDX-License-Identifier: ISC
|
||||
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
NOISE_RE = re.compile(r"\x1b\[[0-9;]*m|\r|^\[[ \d.]+\] (?:syslog\(\w+\): )?")
|
||||
PLAN_RE = re.compile(r"^1\.\.\d+")
|
||||
TAP_RE = re.compile(r"^(?:ok|not ok|#|1\.\.\d+|Bail out!)")
|
||||
|
||||
sep = sys.argv.index("--")
|
||||
with tempfile.TemporaryDirectory(prefix="zinnia-esp-") as esp:
|
||||
for spec in sys.argv[1:sep]:
|
||||
src, dest = spec.split("=", 1)
|
||||
path = os.path.join(esp, dest)
|
||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||
shutil.copyfile(src, path)
|
||||
|
||||
proc = subprocess.Popen(
|
||||
sys.argv[sep + 1 :] + ["-drive", f"format=raw,file=fat:{esp},if=virtio,readonly=on"],
|
||||
stdin=subprocess.DEVNULL,
|
||||
stdout=subprocess.PIPE,
|
||||
text=True,
|
||||
errors="replace",
|
||||
)
|
||||
for line in proc.stdout:
|
||||
line = NOISE_RE.sub("", line).rstrip()
|
||||
print(line if TAP_RE.match(line) else f"# {line}", flush=True)
|
||||
if PLAN_RE.match(line):
|
||||
proc.kill()
|
||||
proc.wait()
|
||||
sys.exit(0)
|
||||
proc.wait()
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user