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