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