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