xref: /rk3399_rockchip-uboot/test/py/tests/test_hush_if_test.py (revision 5bdb31706509c0dbf44228fc69538e90cc7d510e)
1cc156f3fSStephen Warren# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
2cc156f3fSStephen Warren#
3cc156f3fSStephen Warren# SPDX-License-Identifier: GPL-2.0
4cc156f3fSStephen Warren
5cc156f3fSStephen Warren# Test operation of the "if" shell command.
6cc156f3fSStephen Warren
7cc156f3fSStephen Warrenimport os
8cc156f3fSStephen Warrenimport os.path
9cc156f3fSStephen Warrenimport pytest
10cc156f3fSStephen Warren
11a5b54813SMichal Simekpytestmark = pytest.mark.buildconfigspec('hush_parser')
12a5b54813SMichal Simek
13cc156f3fSStephen Warren# The list of "if test" conditions to test.
14cc156f3fSStephen Warrensubtests = (
15cc156f3fSStephen Warren    # Base if functionality.
16cc156f3fSStephen Warren
17cc156f3fSStephen Warren    ('true', True),
18cc156f3fSStephen Warren    ('false', False),
19cc156f3fSStephen Warren
20cc156f3fSStephen Warren    # Basic operators.
21cc156f3fSStephen Warren
22cc156f3fSStephen Warren    ('test aaa = aaa', True),
23cc156f3fSStephen Warren    ('test aaa = bbb', False),
24cc156f3fSStephen Warren
25cc156f3fSStephen Warren    ('test aaa != bbb', True),
26cc156f3fSStephen Warren    ('test aaa != aaa', False),
27cc156f3fSStephen Warren
28cc156f3fSStephen Warren    ('test aaa < bbb', True),
29cc156f3fSStephen Warren    ('test bbb < aaa', False),
30cc156f3fSStephen Warren
31cc156f3fSStephen Warren    ('test bbb > aaa', True),
32cc156f3fSStephen Warren    ('test aaa > bbb', False),
33cc156f3fSStephen Warren
34cc156f3fSStephen Warren    ('test 123 -eq 123', True),
35cc156f3fSStephen Warren    ('test 123 -eq 456', False),
36cc156f3fSStephen Warren
37cc156f3fSStephen Warren    ('test 123 -ne 456', True),
38cc156f3fSStephen Warren    ('test 123 -ne 123', False),
39cc156f3fSStephen Warren
40cc156f3fSStephen Warren    ('test 123 -lt 456', True),
41cc156f3fSStephen Warren    ('test 123 -lt 123', False),
42cc156f3fSStephen Warren    ('test 456 -lt 123', False),
43cc156f3fSStephen Warren
44cc156f3fSStephen Warren    ('test 123 -le 456', True),
45cc156f3fSStephen Warren    ('test 123 -le 123', True),
46cc156f3fSStephen Warren    ('test 456 -le 123', False),
47cc156f3fSStephen Warren
48cc156f3fSStephen Warren    ('test 456 -gt 123', True),
49cc156f3fSStephen Warren    ('test 123 -gt 123', False),
50cc156f3fSStephen Warren    ('test 123 -gt 456', False),
51cc156f3fSStephen Warren
52cc156f3fSStephen Warren    ('test 456 -ge 123', True),
53cc156f3fSStephen Warren    ('test 123 -ge 123', True),
54cc156f3fSStephen Warren    ('test 123 -ge 456', False),
55cc156f3fSStephen Warren
56cc156f3fSStephen Warren    ('test -z ""', True),
57cc156f3fSStephen Warren    ('test -z "aaa"', False),
58cc156f3fSStephen Warren
59cc156f3fSStephen Warren    ('test -n "aaa"', True),
60cc156f3fSStephen Warren    ('test -n ""', False),
61cc156f3fSStephen Warren
62cc156f3fSStephen Warren    # Inversion of simple tests.
63cc156f3fSStephen Warren
64cc156f3fSStephen Warren    ('test ! aaa = aaa', False),
65cc156f3fSStephen Warren    ('test ! aaa = bbb', True),
66cc156f3fSStephen Warren    ('test ! ! aaa = aaa', True),
67cc156f3fSStephen Warren    ('test ! ! aaa = bbb', False),
68cc156f3fSStephen Warren
69cc156f3fSStephen Warren    # Binary operators.
70cc156f3fSStephen Warren
71cc156f3fSStephen Warren    ('test aaa != aaa -o bbb != bbb', False),
72cc156f3fSStephen Warren    ('test aaa != aaa -o bbb = bbb', True),
73cc156f3fSStephen Warren    ('test aaa = aaa -o bbb != bbb', True),
74cc156f3fSStephen Warren    ('test aaa = aaa -o bbb = bbb', True),
75cc156f3fSStephen Warren
76cc156f3fSStephen Warren    ('test aaa != aaa -a bbb != bbb', False),
77cc156f3fSStephen Warren    ('test aaa != aaa -a bbb = bbb', False),
78cc156f3fSStephen Warren    ('test aaa = aaa -a bbb != bbb', False),
79cc156f3fSStephen Warren    ('test aaa = aaa -a bbb = bbb', True),
80cc156f3fSStephen Warren
81cc156f3fSStephen Warren    # Inversion within binary operators.
82cc156f3fSStephen Warren
83cc156f3fSStephen Warren    ('test ! aaa != aaa -o ! bbb != bbb', True),
84cc156f3fSStephen Warren    ('test ! aaa != aaa -o ! bbb = bbb', True),
85cc156f3fSStephen Warren    ('test ! aaa = aaa -o ! bbb != bbb', True),
86cc156f3fSStephen Warren    ('test ! aaa = aaa -o ! bbb = bbb', False),
87cc156f3fSStephen Warren
88cc156f3fSStephen Warren    ('test ! ! aaa != aaa -o ! ! bbb != bbb', False),
89cc156f3fSStephen Warren    ('test ! ! aaa != aaa -o ! ! bbb = bbb', True),
90cc156f3fSStephen Warren    ('test ! ! aaa = aaa -o ! ! bbb != bbb', True),
91cc156f3fSStephen Warren    ('test ! ! aaa = aaa -o ! ! bbb = bbb', True),
92cc156f3fSStephen Warren
93cc156f3fSStephen Warren    # -z operator.
94cc156f3fSStephen Warren
95cc156f3fSStephen Warren    ('test -z "$ut_var_nonexistent"', True),
96cc156f3fSStephen Warren    ('test -z "$ut_var_exists"', False),
97cc156f3fSStephen Warren)
98cc156f3fSStephen Warren
99cc156f3fSStephen Warrendef exec_hush_if(u_boot_console, expr, result):
100e8debf39SStephen Warren    """Execute a shell "if" command, and validate its result."""
101cc156f3fSStephen Warren
10224862c64SStephen Warren    config = u_boot_console.config.buildconfig
10324862c64SStephen Warren    maxargs = int(config.get('config_sys_maxargs', '0'))
10424862c64SStephen Warren    args = len(expr.split(' ')) - 1
10524862c64SStephen Warren    if args > maxargs:
10624862c64SStephen Warren        u_boot_console.log.warning('CONFIG_SYS_MAXARGS too low; need ' +
10724862c64SStephen Warren            str(args))
10824862c64SStephen Warren        pytest.skip()
10924862c64SStephen Warren
110cc156f3fSStephen Warren    cmd = 'if ' + expr + '; then echo true; else echo false; fi'
111cc156f3fSStephen Warren    response = u_boot_console.run_command(cmd)
112cc156f3fSStephen Warren    assert response.strip() == str(result).lower()
113cc156f3fSStephen Warren
114cc156f3fSStephen Warrendef test_hush_if_test_setup(u_boot_console):
115e8debf39SStephen Warren    """Set up environment variables used during the "if" tests."""
116cc156f3fSStephen Warren
117cc156f3fSStephen Warren    u_boot_console.run_command('setenv ut_var_nonexistent')
118cc156f3fSStephen Warren    u_boot_console.run_command('setenv ut_var_exists 1')
119cc156f3fSStephen Warren
120*5bdb3170SMichal Simek@pytest.mark.buildconfigspec('cmd_echo')
121cc156f3fSStephen Warren@pytest.mark.parametrize('expr,result', subtests)
122cc156f3fSStephen Warrendef test_hush_if_test(u_boot_console, expr, result):
123e8debf39SStephen Warren    """Test a single "if test" condition."""
124cc156f3fSStephen Warren
125cc156f3fSStephen Warren    exec_hush_if(u_boot_console, expr, result)
126cc156f3fSStephen Warren
127cc156f3fSStephen Warrendef test_hush_if_test_teardown(u_boot_console):
128e8debf39SStephen Warren    """Clean up environment variables used during the "if" tests."""
129cc156f3fSStephen Warren
130cc156f3fSStephen Warren    u_boot_console.run_command('setenv ut_var_exists')
131cc156f3fSStephen Warren
132cc156f3fSStephen Warren# We might test this on real filesystems via UMS, DFU, 'save', etc.
133cc156f3fSStephen Warren# Of those, only UMS currently allows file removal though.
134*5bdb3170SMichal Simek@pytest.mark.buildconfigspec('cmd_echo')
135cc156f3fSStephen Warren@pytest.mark.boardspec('sandbox')
136cc156f3fSStephen Warrendef test_hush_if_test_host_file_exists(u_boot_console):
137e8debf39SStephen Warren    """Test the "if test -e" shell command."""
138cc156f3fSStephen Warren
139cc156f3fSStephen Warren    test_file = u_boot_console.config.result_dir + \
140cc156f3fSStephen Warren        '/creating_this_file_breaks_u_boot_tests'
141cc156f3fSStephen Warren
142cc156f3fSStephen Warren    try:
143cc156f3fSStephen Warren        os.unlink(test_file)
144cc156f3fSStephen Warren    except:
145cc156f3fSStephen Warren        pass
146cc156f3fSStephen Warren    assert not os.path.exists(test_file)
147cc156f3fSStephen Warren
148cc156f3fSStephen Warren    expr = 'test -e hostfs - ' + test_file
149cc156f3fSStephen Warren    exec_hush_if(u_boot_console, expr, False)
150cc156f3fSStephen Warren
151cc156f3fSStephen Warren    try:
152cc156f3fSStephen Warren        with file(test_file, 'wb'):
153cc156f3fSStephen Warren            pass
154cc156f3fSStephen Warren        assert os.path.exists(test_file)
155cc156f3fSStephen Warren
156cc156f3fSStephen Warren        expr = 'test -e hostfs - ' + test_file
157cc156f3fSStephen Warren        exec_hush_if(u_boot_console, expr, True)
158cc156f3fSStephen Warren    finally:
159cc156f3fSStephen Warren        os.unlink(test_file)
160cc156f3fSStephen Warren
161cc156f3fSStephen Warren    expr = 'test -e hostfs - ' + test_file
162cc156f3fSStephen Warren    exec_hush_if(u_boot_console, expr, False)
163