log: test: Add a pytest for logging
Add a test which tries out various filters and options to make sure that logging works as expected. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e189a0bda8
commit
20faa27c2b
@ -317,6 +317,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@monstr.eu>
|
||||
|
101
test/py/tests/test_log.py
Normal file
101
test/py/tests/test_log.py
Normal file
@ -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)
|
||||
|
||||
@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()
|
Loading…
Reference in New Issue
Block a user