Commit c87319ed authored by Dimitris Lampridis's avatar Dimitris Lampridis

tests: implement firmware locator

This provides an option to pytest to look at a particular folder (e.g.
`/lib/firmware`) for all required test firmware.
parent 76882c6f
......@@ -23,6 +23,7 @@ test_on_hw:
_BASE_DEST: $CI_PROJECT_DIR/$EDL_CI_EOS_OUTPUT_DIR
_BITSTREAM_DEST: $_BASE_DEST/bitstreams
_SW_DEST: $_BASE_DEST/software
_FW_DEST: $_BASE_DEST/firmware
rules:
- if: $CARD == "spec"
variables:
......@@ -46,10 +47,11 @@ test_on_hw:
- mkdir -p $TMP_DIR/usr/lib/modules
- cp -r /usr/local/lib/modules/$(uname -r) $TMP_DIR/usr/lib/modules
- find $TMP_DIR/usr/lib/modules -name mockturtle*.ko -delete
- tar xvf $_SW_DEST/mockturtle-software-L867.tar.xz -C $TMP_DIR/
- tar xvf $_SW_DEST/mockturtle-software-L867${CI_COMMIT_TAG:+-$CI_COMMIT_TAG}.tar.xz -C $TMP_DIR/
- tar xvf $_FW_DEST/mockturtle-firmware${CI_COMMIT_TAG:+-$CI_COMMIT_TAG}.tar.xz -C $TMP_DIR/
- export MODPROBE_ROOT=$TMP_DIR/usr
- depmod -b $MODPROBE_ROOT
- export FIRMWARE_PATH=$TMP_DIR/bitstreams
- export FIRMWARE_PATH=$TMP_DIR/lib/firmware
- mkdir -p $FIRMWARE_PATH
- tar xf $_BITSTREAM_DEST/${CARD}_mt_demo${CI_COMMIT_TAG:+-$CI_COMMIT_TAG}.tar.xz -C $FIRMWARE_PATH
- ln -sf $FIRMWARE_PATH/${CARD}_mt_demo.bin $FIRMWARE_PATH/$_BITSTREAM_NAME
......@@ -80,7 +82,7 @@ test_on_hw:
- tail -n +1 /sys/kernel/debug/$DEVID/$FPGAID/build_info
- $TMP_DIR/usr/local/bin/lsmockturtle
- cd tests
- pytest --id $MT_NODE --junitxml=./pytest.xml
- pytest --id $MT_NODE --fw-path $FIRMWARE_PATH --junitxml=./pytest.xml
artifacts:
when: always
paths:
......
......@@ -8,11 +8,23 @@ import PyMockTurtle
import pytest
import time
class FirmwareLocator:
@staticmethod
def get_path(fw):
_dir_name, _file_name = os.path.split(fw)
_module_path = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
if pytest.fw_path:
return os.path.join(pytest.fw_path, _file_name)
return os.path.join(_module_path, _dir_name, _file_name)
@pytest.fixture(scope="module")
def fw_locator():
return FirmwareLocator
@pytest.fixture(scope="module")
def devid():
return pytest.dev_id
def build_default_cfg():
config = PyMockTurtle.TrtlConfig()
config.signature = PyMockTurtle.TrtlConfig.TRTL_CONFIG_ROM_SIGNATURE
......@@ -64,10 +76,6 @@ def trtl_shm(devid):
dev = PyMockTurtle.TrtlDevice(devid)
return dev.shm
@pytest.fixture(scope="module")
def trtl_firmware_dir():
return os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
@pytest.fixture(scope="module", params=[2**x for x in range(5)])
def trtl_msg(request):
"""This provides a list of test messages. Each test message contains
......@@ -95,7 +103,9 @@ def trtl_version_exp():
def pytest_addoption(parser):
parser.addoption("--id", type=lambda x: int(x, 0),
required=True, help="Mockturtle identifier")
parser.addoption("--fw-path", default=None,
help="Path to test firmware. Defaults to source locations.")
def pytest_configure(config):
pytest.dev_id = config.getoption("--id")
pytest.fw_path = config.getoption("--fw-path")
......@@ -9,8 +9,8 @@ import PyMockTurtle
import time
@pytest.fixture
def firmware_file_config(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir, "firmware/config_rom/fw-config-rom.bin")
def firmware_file_config(fw_locator):
return fw_locator.get_path("firmware/config_rom/fw-config-rom.bin")
class TestConfig(object):
......
......@@ -12,18 +12,16 @@ import time
import PyMockTurtle
@pytest.fixture
def firmware_file_loop(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir, "firmware/cpu-loop/fw-loop.bin")
def firmware_file_loop(fw_locator):
return fw_locator.get_path("firmware/cpu-loop/fw-loop.bin")
@pytest.fixture
def firmware_binary_byte_addressing(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir,
"firmware/cpu-byte-addressing/fw-byte-addressing.bin")
def firmware_binary_byte_addressing(fw_locator):
return fw_locator.get_path("firmware/cpu-byte-addressing/fw-byte-addressing.bin")
@pytest.fixture
def firmware_binary_notification(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir,
"firmware/cpu-notify/fw-notify.bin")
def firmware_binary_notification(fw_locator):
return fw_locator.get_path("firmware/cpu-notify/fw-notify.bin")
class TestCPU(object):
confirm = 'OK\r\n'
......
......@@ -12,24 +12,20 @@ import multiprocessing
import errno
@pytest.fixture
def trtl_binary_hmq_purge(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir,
"firmware/hmq-purge/fw-hmq-purge.bin")
def trtl_binary_hmq_purge(fw_locator):
return fw_locator.get_path("firmware/hmq-purge/fw-hmq-purge.bin")
@pytest.fixture
def trtl_binary_hmq_async_send(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir,
"firmware/hmq-async-send/fw-hmq-async-send.bin")
def trtl_binary_hmq_async_send(fw_locator):
return fw_locator.get_path("firmware/hmq-async-send/fw-hmq-async-send.bin")
@pytest.fixture
def trtl_binary_hmq_async_recv(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir,
"firmware/hmq-async-recv/fw-hmq-async-recv.bin")
def trtl_binary_hmq_async_recv(fw_locator):
return fw_locator.get_path("firmware/hmq-async-recv/fw-hmq-async-recv.bin")
@pytest.fixture
def trtl_binary_hmq_sync(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir,
"firmware/hmq-sync/fw-hmq-sync.bin")
def trtl_binary_hmq_sync(fw_locator):
return fw_locator.get_path("firmware/hmq-sync/fw-hmq-sync.bin")
def do_sync_mult(q, hmq, msg):
......
......@@ -10,9 +10,8 @@ import random
import time
@pytest.fixture
def trtl_binary_frm(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir,
"firmware/rt-frm/fw-rt-frm.bin")
def trtl_binary_frm(fw_locator):
return fw_locator.get_path("firmware/rt-frm/fw-rt-frm.bin")
class TestFirmwareFramework(object):
......
......@@ -10,8 +10,8 @@ import stat
import time
@pytest.fixture
def firmware_file_serial(trtl_firmware_dir):
return os.path.join(trtl_firmware_dir, "firmware/serial/fw-serial.bin")
def firmware_file_serial(fw_locator):
return fw_locator.get_path("firmware/serial/fw-serial.bin")
def firmware_output():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment