Skip to content
Snippets Groups Projects
test_log.py 2.49 KiB
Newer Older
  • Learn to ignore specific revisions
  • # 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)
    
    @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@chromium.org): Consider structuring this as separate tests
        cons = u_boot_console
        test0()
        test1()
        test2()
        test3()
        test4()
        test5()
        test6()
        test7()
        test8()
        test9()