aboutsummaryrefslogtreecommitdiff
path: root/test/py/tests/test_bootmenu.py
blob: fb03fa417b7b5ac8e589f8076eb5d77edadd88cb (plain)
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
# SPDX-License-Identifier: GPL-2.0+

"""Test bootmenu"""

import pytest

@pytest.mark.buildconfigspec('cmd_bootmenu')
def test_bootmenu(u_boot_console):
    """Test bootmenu

    u_boot_console -- U-Boot console
    """

    u_boot_console.p.timeout = 500
    u_boot_console.run_command('setenv bootmenu_default 1')
    u_boot_console.run_command('setenv bootmenu_0 test 1=echo ok 1')
    u_boot_console.run_command('setenv bootmenu_1 test 2=echo ok 2')
    u_boot_console.run_command('setenv bootmenu_2 test 3=echo ok 3')
    u_boot_console.run_command('bootmenu 2', wait_for_prompt=False)
    for i in ('U-Boot Boot Menu', 'test 1', 'test 2', 'test 3', 'autoboot'):
        u_boot_console.p.expect([i])
    # Press enter key to execute default entry
    response = u_boot_console.run_command(cmd='\x0d', wait_for_echo=False, send_nl=False)
    assert 'ok 2' in response
    u_boot_console.run_command('bootmenu 2', wait_for_prompt=False)
    u_boot_console.p.expect(['autoboot'])
    # Press up key to select prior entry followed by the enter key
    response = u_boot_console.run_command(cmd='\x1b\x5b\x41\x0d', wait_for_echo=False,
                                          send_nl=False)
    assert 'ok 1' in response
    u_boot_console.run_command('bootmenu 2', wait_for_prompt=False)
    u_boot_console.p.expect(['autoboot'])
    # Press down key to select next entry followed by the enter key
    response = u_boot_console.run_command(cmd='\x1b\x5b\x42\x0d', wait_for_echo=False,
                                          send_nl=False)
    assert 'ok 3' in response
    u_boot_console.run_command('bootmenu 2; echo rc:$?', wait_for_prompt=False)
    u_boot_console.p.expect(['autoboot'])
    # Press the escape key
    response = u_boot_console.run_command(cmd='\x1b', wait_for_echo=False, send_nl=False)
    assert 'ok' not in response
    assert 'rc:0' in response
    u_boot_console.run_command('setenv bootmenu_default')
    u_boot_console.run_command('setenv bootmenu_0')
    # Without bootmenu_0 no menu should be shown.
    u_boot_console.run_command('bootmenu 2')
    u_boot_console.run_command('setenv bootmenu_1')
    u_boot_console.run_command('setenv bootmenu_2')