[PATCH v2 10/13] test: add first sample tests
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 --- 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 ..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 ..e69de29bb2d1 diff --git a/test/conftest.py b/test/conftest.py new file mode 100644 index ..5acc1a99e18e --- /dev/null +++ b/test/conftest.py @@ -0,0 +1,34 @@ +import pytest +import os +from .py import helper + + +@pytest.fixture(scope='function') +def barebox(strategy, target): +strategy.transition('barebox') +return target.get_driver('BareboxDriver') + + +@pytest.fixture(scope='function') +def shell(strategy, target): +strategy.transition('shell') +return target.get_driver('ShellDriver') + + +@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 ..e69de29bb2d1 diff --git a/test/py/helper.py b/test/py/helper.py new file mode 100644 index ..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: +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 ..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 == [] -- 2.29.2 ___
Re: [PATCH v2 10/13] test: add first sample tests
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 > --- > 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 ..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 ..e69de29bb2d1 > diff --git a/test/conftest.py b/test/conftest.py > new file mode 100644 > index ..5acc1a99e18e > --- /dev/null > +++ b/test/conftest.py > @@ -0,0 +1,34 @@ > +import pytest > +import os > +from .py import helper > + > + > +@pytest.fixture(scope='function') > +def barebox(strategy, target): > +strategy.transition('barebox') > +return target.get_driver('BareboxDriver') > + > + > +@pytest.fixture(scope='function') > +def shell(strategy, target): > +strategy.transition('shell') > +return target.get_driver('ShellDriver') This fixture is not used anywhere, remove it. > + > + > +@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 ..e69de29bb2d1 > diff --git a/test/py/helper.py b/test/py/helper.py > new file mode 100644 > index ..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 ..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.ru
Re: [PATCH v2 10/13] test: add first sample tests
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 >> --- >> 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 ..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 ..e69de29bb2d1 >> diff --git a/test/conftest.py b/test/conftest.py >> new file mode 100644 >> index ..5acc1a99e18e >> --- /dev/null >> +++ b/test/conftest.py >> @@ -0,0 +1,34 @@ >> +import pytest >> +import os >> +from .py import helper >> + >> + >> +@pytest.fixture(scope='function') >> +def barebox(strategy, target): >> +strategy.transition('barebox') >> +return target.get_driver('BareboxDriver') >> + >> + >> +@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. >> + >> + >> +@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 ..e69de29bb2d1 >> diff --git a/test/py/helper.py b/test/py/helper.py >> new file mode 100644 >> index ..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 ..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_FAL
Re: [PATCH v2 10/13] test: add first sample tests
On Wed, 2021-06-02 at 13:35 +0200, Ahmad Fatoum wrote: > > > +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. No. The filter is only for the environment templating. We don't touch the os.environ dictionary. Regards, Jan -- 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- | ___ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH v2 10/13] test: add first sample tests
Hello Jan, On 03.06.21 17:14, Jan Lübbe wrote: > On Wed, 2021-06-02 at 13:35 +0200, Ahmad Fatoum wrote: +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. > > No. The filter is only for the environment templating. We don't touch the > os.environ dictionary. I am using LG_BUILDDIR out of the YAML config as well. > > Regards, > Jan > -- 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- | ___ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox