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