| # 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() |