1# 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: 31 assert 'log %d' % i == lines.next() 32 if mask & 3: 33 assert '_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 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() 102