xref: /rk3399_rockchip-uboot/test/py/tests/test_hush_if_test.py (revision e8debf394fbba594fcfc267c61f8c6bbca395b06)
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
11cc156f3fSStephen Warren# The list of "if test" conditions to test.
12cc156f3fSStephen Warrensubtests = (
13cc156f3fSStephen Warren    # Base if functionality.
14cc156f3fSStephen Warren
15cc156f3fSStephen Warren    ('true', True),
16cc156f3fSStephen Warren    ('false', False),
17cc156f3fSStephen Warren
18cc156f3fSStephen Warren    # Basic operators.
19cc156f3fSStephen Warren
20cc156f3fSStephen Warren    ('test aaa = aaa', True),
21cc156f3fSStephen Warren    ('test aaa = bbb', False),
22cc156f3fSStephen Warren
23cc156f3fSStephen Warren    ('test aaa != bbb', True),
24cc156f3fSStephen Warren    ('test aaa != aaa', False),
25cc156f3fSStephen Warren
26cc156f3fSStephen Warren    ('test aaa < bbb', True),
27cc156f3fSStephen Warren    ('test bbb < aaa', False),
28cc156f3fSStephen Warren
29cc156f3fSStephen Warren    ('test bbb > aaa', True),
30cc156f3fSStephen Warren    ('test aaa > bbb', False),
31cc156f3fSStephen Warren
32cc156f3fSStephen Warren    ('test 123 -eq 123', True),
33cc156f3fSStephen Warren    ('test 123 -eq 456', False),
34cc156f3fSStephen Warren
35cc156f3fSStephen Warren    ('test 123 -ne 456', True),
36cc156f3fSStephen Warren    ('test 123 -ne 123', False),
37cc156f3fSStephen Warren
38cc156f3fSStephen Warren    ('test 123 -lt 456', True),
39cc156f3fSStephen Warren    ('test 123 -lt 123', False),
40cc156f3fSStephen Warren    ('test 456 -lt 123', False),
41cc156f3fSStephen Warren
42cc156f3fSStephen Warren    ('test 123 -le 456', True),
43cc156f3fSStephen Warren    ('test 123 -le 123', True),
44cc156f3fSStephen Warren    ('test 456 -le 123', False),
45cc156f3fSStephen Warren
46cc156f3fSStephen Warren    ('test 456 -gt 123', True),
47cc156f3fSStephen Warren    ('test 123 -gt 123', False),
48cc156f3fSStephen Warren    ('test 123 -gt 456', False),
49cc156f3fSStephen Warren
50cc156f3fSStephen Warren    ('test 456 -ge 123', True),
51cc156f3fSStephen Warren    ('test 123 -ge 123', True),
52cc156f3fSStephen Warren    ('test 123 -ge 456', False),
53cc156f3fSStephen Warren
54cc156f3fSStephen Warren    ('test -z ""', True),
55cc156f3fSStephen Warren    ('test -z "aaa"', False),
56cc156f3fSStephen Warren
57cc156f3fSStephen Warren    ('test -n "aaa"', True),
58cc156f3fSStephen Warren    ('test -n ""', False),
59cc156f3fSStephen Warren
60cc156f3fSStephen Warren    # Inversion of simple tests.
61cc156f3fSStephen Warren
62cc156f3fSStephen Warren    ('test ! aaa = aaa', False),
63cc156f3fSStephen Warren    ('test ! aaa = bbb', True),
64cc156f3fSStephen Warren    ('test ! ! aaa = aaa', True),
65cc156f3fSStephen Warren    ('test ! ! aaa = bbb', False),
66cc156f3fSStephen Warren
67cc156f3fSStephen Warren    # Binary operators.
68cc156f3fSStephen Warren
69cc156f3fSStephen Warren    ('test aaa != aaa -o bbb != bbb', False),
70cc156f3fSStephen Warren    ('test aaa != aaa -o bbb = bbb', True),
71cc156f3fSStephen Warren    ('test aaa = aaa -o bbb != bbb', True),
72cc156f3fSStephen Warren    ('test aaa = aaa -o bbb = bbb', True),
73cc156f3fSStephen Warren
74cc156f3fSStephen Warren    ('test aaa != aaa -a bbb != bbb', False),
75cc156f3fSStephen Warren    ('test aaa != aaa -a bbb = bbb', False),
76cc156f3fSStephen Warren    ('test aaa = aaa -a bbb != bbb', False),
77cc156f3fSStephen Warren    ('test aaa = aaa -a bbb = bbb', True),
78cc156f3fSStephen Warren
79cc156f3fSStephen Warren    # Inversion within binary operators.
80cc156f3fSStephen Warren
81cc156f3fSStephen Warren    ('test ! aaa != aaa -o ! bbb != bbb', True),
82cc156f3fSStephen Warren    ('test ! aaa != aaa -o ! bbb = bbb', True),
83cc156f3fSStephen Warren    ('test ! aaa = aaa -o ! bbb != bbb', True),
84cc156f3fSStephen Warren    ('test ! aaa = aaa -o ! bbb = bbb', False),
85cc156f3fSStephen Warren
86cc156f3fSStephen Warren    ('test ! ! aaa != aaa -o ! ! bbb != bbb', False),
87cc156f3fSStephen Warren    ('test ! ! aaa != aaa -o ! ! bbb = bbb', True),
88cc156f3fSStephen Warren    ('test ! ! aaa = aaa -o ! ! bbb != bbb', True),
89cc156f3fSStephen Warren    ('test ! ! aaa = aaa -o ! ! bbb = bbb', True),
90cc156f3fSStephen Warren
91cc156f3fSStephen Warren    # -z operator.
92cc156f3fSStephen Warren
93cc156f3fSStephen Warren    ('test -z "$ut_var_nonexistent"', True),
94cc156f3fSStephen Warren    ('test -z "$ut_var_exists"', False),
95cc156f3fSStephen Warren)
96cc156f3fSStephen Warren
97cc156f3fSStephen Warrendef exec_hush_if(u_boot_console, expr, result):
98*e8debf39SStephen Warren    """Execute a shell "if" command, and validate its result."""
99cc156f3fSStephen Warren
100cc156f3fSStephen Warren    cmd = 'if ' + expr + '; then echo true; else echo false; fi'
101cc156f3fSStephen Warren    response = u_boot_console.run_command(cmd)
102cc156f3fSStephen Warren    assert response.strip() == str(result).lower()
103cc156f3fSStephen Warren
104cc156f3fSStephen Warren@pytest.mark.buildconfigspec('sys_hush_parser')
105cc156f3fSStephen Warrendef test_hush_if_test_setup(u_boot_console):
106*e8debf39SStephen Warren    """Set up environment variables used during the "if" tests."""
107cc156f3fSStephen Warren
108cc156f3fSStephen Warren    u_boot_console.run_command('setenv ut_var_nonexistent')
109cc156f3fSStephen Warren    u_boot_console.run_command('setenv ut_var_exists 1')
110cc156f3fSStephen Warren
111cc156f3fSStephen Warren@pytest.mark.buildconfigspec('sys_hush_parser')
112cc156f3fSStephen Warren@pytest.mark.parametrize('expr,result', subtests)
113cc156f3fSStephen Warrendef test_hush_if_test(u_boot_console, expr, result):
114*e8debf39SStephen Warren    """Test a single "if test" condition."""
115cc156f3fSStephen Warren
116cc156f3fSStephen Warren    exec_hush_if(u_boot_console, expr, result)
117cc156f3fSStephen Warren
118cc156f3fSStephen Warren@pytest.mark.buildconfigspec('sys_hush_parser')
119cc156f3fSStephen Warrendef test_hush_if_test_teardown(u_boot_console):
120*e8debf39SStephen Warren    """Clean up environment variables used during the "if" tests."""
121cc156f3fSStephen Warren
122cc156f3fSStephen Warren    u_boot_console.run_command('setenv ut_var_exists')
123cc156f3fSStephen Warren
124cc156f3fSStephen Warren@pytest.mark.buildconfigspec('sys_hush_parser')
125cc156f3fSStephen Warren# We might test this on real filesystems via UMS, DFU, 'save', etc.
126cc156f3fSStephen Warren# Of those, only UMS currently allows file removal though.
127cc156f3fSStephen Warren@pytest.mark.boardspec('sandbox')
128cc156f3fSStephen Warrendef test_hush_if_test_host_file_exists(u_boot_console):
129*e8debf39SStephen Warren    """Test the "if test -e" shell command."""
130cc156f3fSStephen Warren
131cc156f3fSStephen Warren    test_file = u_boot_console.config.result_dir + \
132cc156f3fSStephen Warren        '/creating_this_file_breaks_u_boot_tests'
133cc156f3fSStephen Warren
134cc156f3fSStephen Warren    try:
135cc156f3fSStephen Warren        os.unlink(test_file)
136cc156f3fSStephen Warren    except:
137cc156f3fSStephen Warren        pass
138cc156f3fSStephen Warren    assert not os.path.exists(test_file)
139cc156f3fSStephen Warren
140cc156f3fSStephen Warren    expr = 'test -e hostfs - ' + test_file
141cc156f3fSStephen Warren    exec_hush_if(u_boot_console, expr, False)
142cc156f3fSStephen Warren
143cc156f3fSStephen Warren    try:
144cc156f3fSStephen Warren        with file(test_file, 'wb'):
145cc156f3fSStephen Warren            pass
146cc156f3fSStephen Warren        assert os.path.exists(test_file)
147cc156f3fSStephen Warren
148cc156f3fSStephen Warren        expr = 'test -e hostfs - ' + test_file
149cc156f3fSStephen Warren        exec_hush_if(u_boot_console, expr, True)
150cc156f3fSStephen Warren    finally:
151cc156f3fSStephen Warren        os.unlink(test_file)
152cc156f3fSStephen Warren
153cc156f3fSStephen Warren    expr = 'test -e hostfs - ' + test_file
154cc156f3fSStephen Warren    exec_hush_if(u_boot_console, expr, False)
155