[PATCH v2 10/13] test: add first sample tests

Rouven Czerwinski r.czerwinski at pengutronix.de
Wed Jun 2 04:33:11 PDT 2021


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.

> +
> +
> + 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.

> +                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





More information about the barebox mailing list