123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- # 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_run() log %d' % i == lines.next()
- if mask & 3:
- assert 'func() _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()
- @pytest.mark.buildconfigspec('log')
- def test_log_format(u_boot_console):
- """Test the 'log format' and 'log rec' commands"""
- def run_with_format(fmt, expected_output):
- """Set up the log format and then write a log record
- Args:
- fmt: Format to use for 'log format'
- expected_output: Expected output from the 'log rec' command
- """
- output = cons.run_command('log format %s' % fmt)
- assert output == ''
- output = cons.run_command('log rec arch notice file.c 123 func msg')
- assert output == expected_output
- cons = u_boot_console
- with cons.log.section('format'):
- run_with_format('all', 'NOTICE.arch,file.c:123-func() msg')
- output = cons.run_command('log format')
- assert output == 'Log format: clFLfm'
- run_with_format('fm', 'func() msg')
- run_with_format('clfm', 'NOTICE.arch,func() msg')
- run_with_format('FLfm', 'file.c:123-func() msg')
- run_with_format('lm', 'NOTICE. msg')
- run_with_format('m', 'msg')
|