2018-05-06 21:58:06 +00:00
|
|
|
# SPDX-License-Identifier: GPL-2.0+
|
2017-12-04 20:48:30 +00:00
|
|
|
# Copyright (c) 2016, Google Inc.
|
|
|
|
#
|
|
|
|
# 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)
|
|
|
|
|
2018-05-25 12:28:45 +00:00
|
|
|
@pytest.mark.buildconfigspec('cmd_log')
|
2017-12-04 20:48:30 +00:00
|
|
|
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:
|
2017-12-28 20:14:18 +00:00
|
|
|
assert 'log_run() log %d' % i == lines.next()
|
2017-12-04 20:48:30 +00:00
|
|
|
if mask & 3:
|
2017-12-28 20:14:18 +00:00
|
|
|
assert 'func() _log %d' % i == lines.next()
|
2017-12-04 20:48:30 +00:00
|
|
|
|
|
|
|
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)
|
|
|
|
|
2018-10-01 17:55:06 +00:00
|
|
|
def test10():
|
|
|
|
lines = run_test(10)
|
|
|
|
for i in range(7):
|
|
|
|
assert 'log_test() level %d' % i == lines.next()
|
|
|
|
|
2017-12-04 20:48:30 +00:00
|
|
|
# TODO(sjg@chromium.org): Consider structuring this as separate tests
|
|
|
|
cons = u_boot_console
|
|
|
|
test0()
|
|
|
|
test1()
|
|
|
|
test2()
|
|
|
|
test3()
|
|
|
|
test4()
|
|
|
|
test5()
|
|
|
|
test6()
|
|
|
|
test7()
|
|
|
|
test8()
|
|
|
|
test9()
|
2018-10-01 17:55:06 +00:00
|
|
|
test10()
|
2017-12-28 20:14:21 +00:00
|
|
|
|
2018-05-25 12:28:45 +00:00
|
|
|
@pytest.mark.buildconfigspec('cmd_log')
|
2017-12-28 20:14:21 +00:00
|
|
|
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')
|