[U-Boot] [PATCH v3 13/14] log: test: Add a pytest for logging

Lukasz Majewski lukma at denx.de
Tue Nov 21 10:03:46 UTC 2017


On Mon, 20 Nov 2017 15:33:34 -0700
Simon Glass <sjg at chromium.org> wrote:

> Add a test which tries out various filters and options to make sure
> that logging works as expected.
> 

Reviewed-by: Lukasz Majewski <lukma at denx.de>

> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> 
> Changes in v3: None
> Changes in v2:
> - Change log levels to match new header
> - Only execute log tests if CONFIG_LOG is enabled
> - Rename LOGL_WARN to LOGL_WARNING
> 
>  MAINTAINERS               |   1 +
>  test/py/tests/test_log.py | 101
> ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102
> insertions(+) create mode 100644 test/py/tests/test_log.py
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 47f68651a7c..09ff9e76df9 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -298,6 +298,7 @@ T:	git git://git.denx.de/u-boot.git
>  F:	common/log.c
>  F:	cmd/log.c
>  F:	test/log/log_test.c
> +F:	test/py/tests/test_log.py
>  
>  MICROBLAZE
>  M:	Michal Simek <monstr at monstr.eu>
> diff --git a/test/py/tests/test_log.py b/test/py/tests/test_log.py
> new file mode 100644
> index 00000000000..fa9a25e8dc0
> --- /dev/null
> +++ b/test/py/tests/test_log.py
> @@ -0,0 +1,101 @@
> +# Copyright (c) 2016, Google Inc.
> +#
> +# SPDX-License-Identifier:      GPL-2.0+
> +#
> +# U-Boot Verified Boot Test
> +
> +"""
> +This tests U-Boot logging. It uses the 'log test' command with
> various options +and checks that the output is correct.
> +"""
> +
> +import pytest
> +
> +LOGL_FIRST, LOGL_WARNING, LOGL_INFO = (0, 4, 6)
> +
> + at pytest.mark.buildconfigspec('log')
> +def test_log(u_boot_console):
> +    """Test that U-Boot logging works correctly."""
> +    def check_log_entries(lines, mask, max_level=LOGL_INFO):
> +        """Check that the expected log records appear in the output
> +
> +        Args:
> +            lines: iterator containing lines to check
> +            mask: bit mask to select which lines to check for:
> +                bit 0: standard log line
> +                bit 1: _log line
> +            max_level: maximum log level to expect in the output
> +        """
> +        for i in range(max_level):
> +            if mask & 1:
> +                assert 'log %d' % i == lines.next()
> +            if mask & 3:
> +                assert '_log %d' % i == lines.next()
> +
> +    def run_test(testnum):
> +        """Run a particular test number (the 'log test' command)
> +
> +        Args:
> +            testnum: Test number to run
> +        Returns:
> +            iterator containing the lines output from the command
> +        """
> +
> +        with cons.log.section('basic'):
> +           output = u_boot_console.run_command('log test %d' %
> testnum)
> +        split = output.replace('\r', '').splitlines()
> +        lines = iter(split)
> +        assert 'test %d' % testnum == lines.next()
> +        return lines
> +
> +    def test0():
> +        lines = run_test(0)
> +        check_log_entries(lines, 3)
> +
> +    def test1():
> +        lines = run_test(1)
> +        check_log_entries(lines, 3)
> +
> +    def test2():
> +        lines = run_test(2)
> +
> +    def test3():
> +        lines = run_test(3)
> +        check_log_entries(lines, 2)
> +
> +    def test4():
> +        lines = run_test(4)
> +        assert next(lines, None) == None
> +
> +    def test5():
> +        lines = run_test(5)
> +        check_log_entries(lines, 2)
> +
> +    def test6():
> +        lines = run_test(6)
> +        check_log_entries(lines, 3)
> +
> +    def test7():
> +        lines = run_test(7)
> +        check_log_entries(lines, 3, LOGL_WARNING)
> +
> +    def test8():
> +        lines = run_test(8)
> +        check_log_entries(lines, 3)
> +
> +    def test9():
> +        lines = run_test(9)
> +        check_log_entries(lines, 3)
> +
> +    # TODO(sjg at chromium.org): Consider structuring this as separate
> tests
> +    cons = u_boot_console
> +    test0()
> +    test1()
> +    test2()
> +    test3()
> +    test4()
> +    test5()
> +    test6()
> +    test7()
> +    test8()
> +    test9()



Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171121/d772216b/attachment.sig>


More information about the U-Boot mailing list