mirror of
https://github.com/cmclark00/retro-imager.git
synced 2025-05-17 23:45:21 +01:00
Tests if repository json files conform to the json schema. If all resources (images/icons/website URLs) they mention actually exists. And can also test writing images and the FAT modification code.
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
import pytest
|
|
import re
|
|
import subprocess
|
|
import os
|
|
import time
|
|
from shlex import quote
|
|
|
|
|
|
def shell(cmd, url):
|
|
msg = ''
|
|
try:
|
|
subprocess.run(cmd, shell=True, check=True, capture_output=True)
|
|
except subprocess.CalledProcessError as err:
|
|
msg = "{} Error running '{}' exit code {} stderr: '{}'".format(url, err.cmd, err.returncode, err.output)
|
|
|
|
if msg != '':
|
|
pytest.fail(msg, False)
|
|
|
|
|
|
def test_write_image_and_modify_fat(imageitem, device):
|
|
if not device:
|
|
pytest.skip("--device=<device> not specified. Skipping write tests")
|
|
return
|
|
|
|
assert "extract_sha256" in imageitem, "{}: missing extract_sha256. Cannot perform write test.".format(imageitem["url"])
|
|
assert "image_download_size" in imageitem, "{}: missing image_download_size. Cannot perform write test.".format(imageitem["url"])
|
|
assert re.search("^[a-z0-9]{64}$", imageitem["extract_sha256"]) != None
|
|
|
|
cacheFile = "cache/"+imageitem["extract_sha256"]
|
|
if os.path.exists(cacheFile) and os.path.getsize(cacheFile) != imageitem["image_download_size"]:
|
|
os.remove(cacheFile)
|
|
|
|
shell("rpi-imager --cli --quiet --enable-writing-system-drives --sha256 {} --cache-file {} --first-run-script test_firstrun.txt {} {}".format(
|
|
quote(imageitem["extract_sha256"]), quote(cacheFile), quote(imageitem["url"]), quote(device) ), imageitem["url"])
|
|
time.sleep(0.5)
|
|
shell("fsck.vfat -n "+quote(device+"p1"), imageitem["url"])
|
|
|
|
@pytest.fixture
|
|
def device(request):
|
|
return request.config.getoption("--device")
|