summaryrefslogtreecommitdiffstats
path: root/test/conftest.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/conftest.py')
-rw-r--r--test/conftest.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/test/conftest.py b/test/conftest.py
index 794574799f..2bca3c37e5 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -33,3 +33,73 @@ def pytest_addoption(parser):
parser.addoption('--dry-run', action='store_const', const='qemu_dry_run',
dest='lg_initial_state',
help=('(for debugging) skip tests and just print Qemu command line'))
+ parser.addoption('--rng', action='count', dest='qemu_rng',
+ help=('instantiate Virt I/O random number generator'))
+ parser.addoption('--console', action='count', dest='qemu_console', default=0,
+ help=('Pass an extra console (Virt I/O or ns16550_pci) to emulated barebox'))
+ parser.addoption('--blk', action='append', dest='qemu_block',
+ default=[], metavar="FILE",
+ help=('Pass block device to emulated barebox. Can be specified more than once'))
+ parser.addoption('--qemu', action='append', dest='qemu_arg',
+ default=[], metavar="option",
+ help=('Pass option to QEMU as is'))
+
+@pytest.fixture(scope="session")
+def strategy(request, target, pytestconfig):
+ try:
+ strategy = target.get_driver("Strategy")
+ except NoDriverFoundError as e:
+ pytest.exit(e)
+
+ try:
+ features = target.env.config.data["targets"]["main"]["features"]
+ except KeyError:
+ features = []
+
+ virtio = None
+
+ if "virtio-mmio" in features:
+ virtio = "device"
+ if "virtio-pci" in features:
+ virtio = "pci,disable-legacy=on,disable-modern=off"
+ features.append("pci")
+
+ if virtio and pytestconfig.option.qemu_rng:
+ for i in range(pytestconfig.option.qemu_rng):
+ strategy.append_qemu_args("-device", f"virtio-rng-{virtio}")
+
+ for i in range(pytestconfig.option.qemu_console):
+ if virtio and i == 0:
+ strategy.append_qemu_args(
+ "-device", f"virtio-serial-{virtio}",
+ "-chardev", f"pty,id=virtcon{i}",
+ "-device", f"virtconsole,chardev=virtcon{i},name=console.virtcon{i}"
+ )
+ continue
+
+ # ns16550 serial driver only works with x86 so far
+ if 'pci' in features:
+ strategy.append_qemu_args(
+ "-chardev", f"pty,id=pcicon{i}",
+ "-device", f"pci-serial,chardev=pcicon{i}"
+ )
+ else:
+ pytest.exit("barebox currently supports only a single extra virtio console\n", 1)
+
+ for i, blk in enumerate(pytestconfig.option.qemu_block):
+ if virtio:
+ strategy.append_qemu_args(
+ "-drive", f"if=none,file={blk},format=raw,id=hd{i}",
+ "-device", f"virtio-blk-{virtio},drive=hd{i}"
+ )
+ else:
+ pytest.exit("--blk unsupported for target\n", 1)
+
+ for arg in pytestconfig.option.qemu_arg:
+ strategy.append_qemu_args(arg)
+
+ state = request.config.option.lg_initial_state
+ if state is not None:
+ strategy.force(state)
+
+ return strategy