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