blob: 517f41514384f643613cbc2ce74e6820df7a9295 [file] [log] [blame]
Simon Glass5f0e0c82017-12-04 13:48:30 -07001# Copyright (c) 2016, Google Inc.
2#
3# SPDX-License-Identifier: GPL-2.0+
4#
5# U-Boot Verified Boot Test
6
7"""
8This tests U-Boot logging. It uses the 'log test' command with various options
9and checks that the output is correct.
10"""
11
12import pytest
13
14LOGL_FIRST, LOGL_WARNING, LOGL_INFO = (0, 4, 6)
15
16@pytest.mark.buildconfigspec('log')
17def test_log(u_boot_console):
18 """Test that U-Boot logging works correctly."""
19 def check_log_entries(lines, mask, max_level=LOGL_INFO):
20 """Check that the expected log records appear in the output
21
22 Args:
23 lines: iterator containing lines to check
24 mask: bit mask to select which lines to check for:
25 bit 0: standard log line
26 bit 1: _log line
27 max_level: maximum log level to expect in the output
28 """
29 for i in range(max_level):
30 if mask & 1:
Simon Glass44e57632017-12-28 13:14:18 -070031 assert 'log_run() log %d' % i == lines.next()
Simon Glass5f0e0c82017-12-04 13:48:30 -070032 if mask & 3:
Simon Glass44e57632017-12-28 13:14:18 -070033 assert 'func() _log %d' % i == lines.next()
Simon Glass5f0e0c82017-12-04 13:48:30 -070034
35 def run_test(testnum):
36 """Run a particular test number (the 'log test' command)
37
38 Args:
39 testnum: Test number to run
40 Returns:
41 iterator containing the lines output from the command
42 """
43
44 with cons.log.section('basic'):
45 output = u_boot_console.run_command('log test %d' % testnum)
46 split = output.replace('\r', '').splitlines()
47 lines = iter(split)
48 assert 'test %d' % testnum == lines.next()
49 return lines
50
51 def test0():
52 lines = run_test(0)
53 check_log_entries(lines, 3)
54
55 def test1():
56 lines = run_test(1)
57 check_log_entries(lines, 3)
58
59 def test2():
60 lines = run_test(2)
61
62 def test3():
63 lines = run_test(3)
64 check_log_entries(lines, 2)
65
66 def test4():
67 lines = run_test(4)
68 assert next(lines, None) == None
69
70 def test5():
71 lines = run_test(5)
72 check_log_entries(lines, 2)
73
74 def test6():
75 lines = run_test(6)
76 check_log_entries(lines, 3)
77
78 def test7():
79 lines = run_test(7)
80 check_log_entries(lines, 3, LOGL_WARNING)
81
82 def test8():
83 lines = run_test(8)
84 check_log_entries(lines, 3)
85
86 def test9():
87 lines = run_test(9)
88 check_log_entries(lines, 3)
89
90 # TODO(sjg@chromium.org): Consider structuring this as separate tests
91 cons = u_boot_console
92 test0()
93 test1()
94 test2()
95 test3()
96 test4()
97 test5()
98 test6()
99 test7()
100 test8()
101 test9()