]> git.sur5r.net Git - u-boot/blob - test/py/tests/test_log.py
am335x, shc: kconfig: Fix misspelled choice default
[u-boot] / test / py / tests / test_log.py
1 # Copyright (c) 2016, Google Inc.
2 #
3 # SPDX-License-Identifier:      GPL-2.0+
4 #
5 # U-Boot Verified Boot Test
6
7 """
8 This tests U-Boot logging. It uses the 'log test' command with various options
9 and checks that the output is correct.
10 """
11
12 import pytest
13
14 LOGL_FIRST, LOGL_WARNING, LOGL_INFO = (0, 4, 6)
15
16 @pytest.mark.buildconfigspec('log')
17 def 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:
31                 assert 'log_run() log %d' % i == lines.next()
32             if mask & 3:
33                 assert 'func() _log %d' % i == lines.next()
34
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         with cons.log.section('basic'):
44            output = u_boot_console.run_command('log test %d' % testnum)
45         split = output.replace('\r', '').splitlines()
46         lines = iter(split)
47         assert 'test %d' % testnum == lines.next()
48         return lines
49
50     def test0():
51         lines = run_test(0)
52         check_log_entries(lines, 3)
53
54     def test1():
55         lines = run_test(1)
56         check_log_entries(lines, 3)
57
58     def test2():
59         lines = run_test(2)
60
61     def test3():
62         lines = run_test(3)
63         check_log_entries(lines, 2)
64
65     def test4():
66         lines = run_test(4)
67         assert next(lines, None) == None
68
69     def test5():
70         lines = run_test(5)
71         check_log_entries(lines, 2)
72
73     def test6():
74         lines = run_test(6)
75         check_log_entries(lines, 3)
76
77     def test7():
78         lines = run_test(7)
79         check_log_entries(lines, 3, LOGL_WARNING)
80
81     def test8():
82         lines = run_test(8)
83         check_log_entries(lines, 3)
84
85     def test9():
86         lines = run_test(9)
87         check_log_entries(lines, 3)
88
89     # TODO(sjg@chromium.org): Consider structuring this as separate tests
90     cons = u_boot_console
91     test0()
92     test1()
93     test2()
94     test3()
95     test4()
96     test5()
97     test6()
98     test7()
99     test8()
100     test9()
101
102 @pytest.mark.buildconfigspec('log')
103 def test_log_format(u_boot_console):
104     """Test the 'log format' and 'log rec' commands"""
105     def run_with_format(fmt, expected_output):
106         """Set up the log format and then write a log record
107
108         Args:
109             fmt: Format to use for 'log format'
110             expected_output: Expected output from the 'log rec' command
111         """
112         output = cons.run_command('log format %s' % fmt)
113         assert output == ''
114         output = cons.run_command('log rec arch notice file.c 123 func msg')
115         assert output == expected_output
116
117     cons = u_boot_console
118     with cons.log.section('format'):
119         run_with_format('all', 'NOTICE.arch,file.c:123-func() msg')
120         output = cons.run_command('log format')
121         assert output == 'Log format: clFLfm'
122
123         run_with_format('fm', 'func() msg')
124         run_with_format('clfm', 'NOTICE.arch,func() msg')
125         run_with_format('FLfm', 'file.c:123-func() msg')
126         run_with_format('lm', 'NOTICE. msg')
127         run_with_format('m', 'msg')