Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2017, Heinrich Schuchardt <xypron.glpk@gmx.de> """ Test UEFI API implementation """ import pytest @pytest.mark.buildconfigspec('cmd_bootefi_selftest') @pytest.mark.slow @pytest.mark.restart def test_efi_selftest_base(ubman): """Run UEFI unit tests ubman -- U-Boot console This function executes all selftests that are not marked as on request. """ ubman.run_command(cmd='setenv efi_selftest') ubman.run_command(cmd='bootefi selftest', wait_for_prompt=False) if ubman.expect(['Summary: 0 failures', 'Press any key']): raise Exception('Failures occurred during the EFI selftest') ubman.restart_uboot() @pytest.mark.buildconfigspec('cmd_bootefi_selftest') @pytest.mark.buildconfigspec('hush_parser') @pytest.mark.buildconfigspec('of_control') @pytest.mark.notbuildconfigspec('generate_acpi_table') @pytest.mark.restart def test_efi_selftest_device_tree(ubman): """Test the device tree support in the UEFI sub-system ubman -- U-Boot console This test executes the UEFI unit test by calling 'bootefi selftest'. """ ubman.run_command(cmd='setenv efi_selftest list') output = ubman.run_command('bootefi selftest') assert '\'device tree\'' in output ubman.run_command(cmd='setenv efi_selftest device tree') # Set serial# if it is not already set. ubman.run_command(cmd='setenv efi_test "${serial#}x"') ubman.run_command(cmd='test "${efi_test}" = x && setenv serial# 0') ubman.run_command(cmd='bootefi selftest ${fdtcontroladdr}', wait_for_prompt=False) if ubman.expect(['serial-number:', 'U-Boot']): raise Exception('serial-number missing in device tree') ubman.restart_uboot() @pytest.mark.buildconfigspec('cmd_bootefi_selftest') @pytest.mark.restart def test_efi_selftest_watchdog_reboot(ubman): """Test the watchdog timer ubman -- U-Boot console This function executes the 'watchdog reboot' unit test. """ ubman.run_command(cmd='setenv efi_selftest list') output = ubman.run_command('bootefi selftest') assert '\'watchdog reboot\'' in output ubman.run_command(cmd='setenv efi_selftest watchdog reboot') ubman.run_command(cmd='bootefi selftest', wait_for_prompt=False) if ubman.expect(['resetting', 'U-Boot']): raise Exception('Reset failed in \'watchdog reboot\' test') ubman.run_command(cmd='', send_nl=False, wait_for_reboot=True) @pytest.mark.buildconfigspec('cmd_bootefi_selftest') @pytest.mark.slow @pytest.mark.restart def test_efi_selftest_text_input(ubman): """Test the EFI_SIMPLE_TEXT_INPUT_PROTOCOL ubman -- U-Boot console This function calls the text input EFI selftest. """ ubman.run_command(cmd='setenv efi_selftest text input') ubman.run_command(cmd='bootefi selftest', wait_for_prompt=False) if ubman.expect([r'To terminate type \'x\'']): raise Exception('No prompt for \'text input\' test') ubman.drain_console() # EOT ubman.run_command(cmd=chr(4), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 4 \(unknown\), scan code 0 \(Null\)']): raise Exception('EOT failed in \'text input\' test') ubman.drain_console() # BS ubman.run_command(cmd=chr(8), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 8 \(BS\), scan code 0 \(Null\)']): raise Exception('BS failed in \'text input\' test') ubman.drain_console() # TAB ubman.run_command(cmd=chr(9), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 9 \(TAB\), scan code 0 \(Null\)']): raise Exception('BS failed in \'text input\' test') ubman.drain_console() # a ubman.run_command(cmd='a', wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 97 \(\'a\'\), scan code 0 \(Null\)']): raise Exception('\'a\' failed in \'text input\' test') ubman.drain_console() # UP escape sequence ubman.run_command(cmd=chr(27) + '[A', wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 0 \(Null\), scan code 1 \(Up\)']): raise Exception('UP failed in \'text input\' test') ubman.drain_console() # Euro sign ubman.run_command(cmd=b'\xe2\x82\xac'.decode(), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 8364 \(\'']): raise Exception('Euro sign failed in \'text input\' test') ubman.drain_console() ubman.run_command(cmd='x', wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect(['Summary: 0 failures', 'Press any key']): raise Exception('Failures occurred during the EFI selftest') ubman.restart_uboot() @pytest.mark.buildconfigspec('cmd_bootefi_selftest') @pytest.mark.slow @pytest.mark.restart def test_efi_selftest_text_input_ex(ubman): """Test the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL ubman -- U-Boot console This function calls the extended text input EFI selftest. """ ubman.run_command(cmd='setenv efi_selftest extended text input') ubman.run_command(cmd='bootefi selftest', wait_for_prompt=False) if ubman.expect([r'To terminate type \'CTRL\+x\'']): raise Exception('No prompt for \'text input\' test') ubman.drain_console() # EOT ubman.run_command(cmd=chr(4), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 100 \(\'d\'\), scan code 0 \(CTRL\+Null\)']): raise Exception('EOT failed in \'text input\' test') ubman.drain_console() # BS ubman.run_command(cmd=chr(8), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 8 \(BS\), scan code 0 \(\+Null\)']): raise Exception('BS failed in \'text input\' test') ubman.drain_console() # TAB ubman.run_command(cmd=chr(9), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 9 \(TAB\), scan code 0 \(\+Null\)']): raise Exception('TAB failed in \'text input\' test') ubman.drain_console() # a ubman.run_command(cmd='a', wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 97 \(\'a\'\), scan code 0 \(Null\)']): raise Exception('\'a\' failed in \'text input\' test') ubman.drain_console() # UP escape sequence ubman.run_command(cmd=chr(27) + '[A', wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 0 \(Null\), scan code 1 \(\+Up\)']): raise Exception('UP failed in \'text input\' test') ubman.drain_console() # Euro sign ubman.run_command(cmd=b'\xe2\x82\xac'.decode(), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 8364 \(\'']): raise Exception('Euro sign failed in \'text input\' test') ubman.drain_console() # SHIFT+ALT+FN 5 ubman.run_command(cmd=b'\x1b\x5b\x31\x35\x3b\x34\x7e'.decode(), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect([r'Unicode char 0 \(Null\), scan code 15 \(SHIFT\+ALT\+FN 5\)']): raise Exception('SHIFT+ALT+FN 5 failed in \'text input\' test') ubman.drain_console() ubman.run_command(cmd=chr(24), wait_for_echo=False, send_nl=False, wait_for_prompt=False) if ubman.expect(['Summary: 0 failures', 'Press any key']): raise Exception('Failures occurred during the EFI selftest') ubman.restart_uboot() @pytest.mark.buildconfigspec('cmd_bootefi_selftest') @pytest.mark.buildconfigspec('efi_tcg2_protocol') @pytest.mark.notbuildconfigspec('sandbox') @pytest.mark.restart def test_efi_selftest_tcg2(ubman): """Test the EFI_TCG2 PROTOCOL ubman -- U-Boot console This function executes the 'tcg2' unit test. """ ubman.restart_uboot() ubman.run_command(cmd='setenv efi_selftest list') output = ubman.run_command('bootefi selftest') assert '\'tcg2\'' in output ubman.run_command(cmd='setenv efi_selftest tcg2') ubman.run_command(cmd='bootefi selftest', wait_for_prompt=False) if ubman.expect(['Summary: 0 failures', 'Press any key']): raise Exception('Failures occurred during the EFI selftest') ubman.restart_uboot() |