[PATCH v2 10/13] test: add first sample tests
Ahmad Fatoum
a.fatoum at pengutronix.de
Wed Jun 2 04:35:19 PDT 2021
Hi,
On 02.06.21 13:33, Rouven Czerwinski wrote:
> Hi Ahmad,
>
> On Mon, 2021-05-31 at 08:55 +0200, Ahmad Fatoum wrote:
>> The test can be run manually with e.g.
>>
>> labgrid-pytest --lg-env test/arm/qemu_virt64_defconfig.yaml test/py
>>
>> Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
>> ---
>> test/.gitignore | 1 +
>> test/__init__.py | 0
>> test/conftest.py | 34 ++++++++++++++++++++++++++++++++++
>> test/py/__init__.py | 0
>> test/py/helper.py | 38 ++++++++++++++++++++++++++++++++++++++
>> test/py/test_shell.py | 37 +++++++++++++++++++++++++++++++++++++
>> 6 files changed, 110 insertions(+)
>> create mode 100644 test/.gitignore
>> create mode 100644 test/__init__.py
>> create mode 100644 test/conftest.py
>> create mode 100644 test/py/__init__.py
>> create mode 100644 test/py/helper.py
>> create mode 100644 test/py/test_shell.py
>>
>> diff --git a/test/.gitignore b/test/.gitignore
>> new file mode 100644
>> index 000000000000..bee8a64b79a9
>> --- /dev/null
>> +++ b/test/.gitignore
>> @@ -0,0 +1 @@
>> +__pycache__
>> diff --git a/test/__init__.py b/test/__init__.py
>> new file mode 100644
>> index 000000000000..e69de29bb2d1
>> diff --git a/test/conftest.py b/test/conftest.py
>> new file mode 100644
>> index 000000000000..5acc1a99e18e
>> --- /dev/null
>> +++ b/test/conftest.py
>> @@ -0,0 +1,34 @@
>> +import pytest
>> +import os
>> +from .py import helper
>> +
>> +
>> + at pytest.fixture(scope='function')
>> +def barebox(strategy, target):
>> + strategy.transition('barebox')
>> + return target.get_driver('BareboxDriver')
>> +
>> +
>> + at pytest.fixture(scope='function')
>> +def shell(strategy, target):
>> + strategy.transition('shell')
>> + return target.get_driver('ShellDriver')
>
> This fixture is not used anywhere, remove it.
See previous mail.
>> +
>> +
>> + at pytest.fixture(scope="session")
>> +def barebox_config(strategy, target):
>> + strategy.transition('barebox')
>> + command = target.get_driver("BareboxDriver")
>> + return helper.get_config(command)
>> +
>> +def pytest_configure(config):
>> + if 'LG_BUILDDIR' not in os.environ:
>> + if 'KBUILD_OUTPUT' in os.environ:
>> + os.environ['LG_BUILDDIR'] = os.environ['KBUILD_OUTPUT']
>> + elif os.path.isdir('build'):
>> + os.environ['LG_BUILDDIR'] = os.path.realpath('build')
>> + else:
>> + os.environ['LG_BUILDDIR'] = os.getcwd()
>> +
>> + if os.environ['LG_BUILDDIR'] is not None:
>> + os.environ['LG_BUILDDIR'] = os.path.realpath(os.environ['LG_BUILDDIR'])
>> diff --git a/test/py/__init__.py b/test/py/__init__.py
>> new file mode 100644
>> index 000000000000..e69de29bb2d1
>> diff --git a/test/py/helper.py b/test/py/helper.py
>> new file mode 100644
>> index 000000000000..4a68e83669ba
>> --- /dev/null
>> +++ b/test/py/helper.py
>> @@ -0,0 +1,38 @@
>> +from labgrid.driver import BareboxDriver
>> +import pytest
>> +import os
>> +from itertools import filterfalse
>> +
>> +
>> +def get_config(command):
>> + """Returns the enabled config options of barebox, either from
>> + a running instance if supported or by looking into .config
>> + in the build directory.
>> + Args:
>> + command (BareboxDriver): An instance of the BareboxDriver
>> + Returns:
>> + list: list of the enabled config options
>> + """
>> + assert isinstance(command, BareboxDriver)
>> +
>> + out, err, returncode = command.run("cat /env/data/config")
>> + if returncode != 0:
>> + try:
>> + with open(os.environ['LG_BUILDDIR'] + "/.config") as f:
>
> Please don't use the LG_ namespace currently used by labgrid, this
> variable is introduced by your wrapper script, something like
> BB_LG_BUILDDIR indicates that this is only used in the barebox test
> scripts.
Labgrid filters out anything that doesn't start with LG_ AFAIK.
>
>> + out = f.read().splitlines()
>> + except OSError:
>> + return set()
>> +
>> + options = set()
>> + for line in out:
>> + if line and line.startswith("CONFIG_"):
>> + options.add(line.split('=')[0])
>> + return options
>> +
>> +
>> +def skip_disabled(config, *options):
>> + if bool(config):
>> + undefined = list(filterfalse(config.__contains__, options))
>> +
>> + if bool(undefined):
>> + pytest.skip("skipping test due to disabled " + (",".join(undefined)) + " dependency")
>> diff --git a/test/py/test_shell.py b/test/py/test_shell.py
>> new file mode 100644
>> index 000000000000..0d2dfe38c5dd
>> --- /dev/null
>> +++ b/test/py/test_shell.py
>> @@ -0,0 +1,37 @@
>> +import pytest
>> +from .helper import *
>> +
>> +
>> +def test_barebox_true(barebox, barebox_config):
>> + skip_disabled(barebox_config, "CONFIG_CMD_TRUE")
>> +
>> + _, _, returncode = barebox.run('true')
>> + assert returncode == 0
>> +
>> +
>> +def test_barebox_false(barebox, barebox_config):
>> + skip_disabled(barebox_config, "CONFIG_CMD_FALSE")
>> +
>> + _, _, returncode = barebox.run('false')
>> + assert returncode == 1
>> +
>> +def test_barebox_md5sum(barebox, barebox_config):
>> + skip_disabled(barebox_config, "CONFIG_CMD_MD5SUM", "CONFIG_CMD_ECHO")
>> +
>> + barebox.run_check("echo -o md5 test")
>> + out = barebox.run_check("md5sum md5")
>> + assert out == ["d8e8fca2dc0f896fd7cb4cb0031ba249 md5"]
>> +
>> +def test_barebox_version(barebox, barebox_config):
>> + skip_disabled(barebox_config, "CONFIG_CMD_VERSION")
>> +
>> + stdout, _, returncode = barebox.run('version')
>> + assert 'barebox' in stdout[1]
>> + assert returncode == 0
>> +
>> +def test_barebox_no_err(barebox, barebox_config):
>> + skip_disabled(barebox_config, "CONFIG_CMD_DMESG")
>> +
>> + # TODO extend by err once all qemu platforms conform
>> + stdout, _, _ = barebox.run('dmesg -l crit,alert,emerg')
>> + assert stdout == []
>
> - rcz
>
>
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list