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