1 #!/bin/bash 2 # 3 # This script is the heart of the bisection test. It assumes the good-objects 4 # and bad-objects directories have been created and populated. It runs three 5 # bisection tests: 6 # Test 1. use --file_args, and no pruning, which passes the object file list 7 # in a file, and stops as soon as it finds the first bad file. 8 # Test 2. do not use --file_args, and no pruning. The object files are passed 9 # directly on the command line; stop as soon as it finds the first 10 # bad file. 11 # Test 3. use --file_args and --prune. Pass the object file list in a file 12 # and run until it finds ALL the bad files (there are two of them). 13 # 14 15 SAVE_DIR=`pwd` 16 17 DIR=full_bisect_test 18 19 # Make sure you are running this script from the parent directory. 20 if [[ ! -f "${DIR}/setup.sh" ]] ; then 21 echo "Cannot find ${DIR}/setup.sh. You are running this from the wrong directory." 22 echo "You need to run this from toolchain-utils/binary_search_tool ." 23 exit 1 24 fi 25 26 # Run Test 1. 27 ${DIR}/setup.sh 28 29 ./binary_search_state.py --get_initial_items="${DIR}/get_initial_items.sh" \ 30 --switch_to_good="${DIR}/switch_to_good.sh" \ 31 --switch_to_bad="${DIR}/switch_to_bad.sh" \ 32 --test_setup_script="${DIR}/test_setup.sh" \ 33 --test_script="${DIR}/interactive_test.sh" \ 34 --file_args &> /tmp/full_bisect_test.log 35 36 ${DIR}/cleanup.sh 37 38 grep "Search complete. First bad version: " /tmp/full_bisect_test.log &> /dev/null 39 test_status=$? 40 41 if [[ ${test_status} -ne 0 ]] ; then 42 echo "Test 1 FAILED. See /tmp/full_bisect_test.log for details." 43 exit 1 44 else 45 echo "Test 1 passed." 46 fi 47 48 cd ${SAVE_DIR} 49 50 # Run Test 2. 51 ${DIR}/setup.sh 52 53 ./binary_search_state.py --get_initial_items="${DIR}/get_initial_items.sh" \ 54 --switch_to_good="${DIR}/switch_to_good.sh" \ 55 --switch_to_bad="${DIR}/switch_to_bad.sh" \ 56 --test_setup_script="${DIR}/test_setup.sh" \ 57 --test_script="${DIR}/interactive_test.sh" \ 58 &> /tmp/full_bisect_test.log 59 60 ${DIR}/cleanup.sh 61 62 grep "Search complete. First bad version: " /tmp/full_bisect_test.log &> /dev/null 63 test_status=$? 64 65 if [[ ${test_status} -ne 0 ]] ; then 66 echo "Test 2 FAILED. See /tmp/full_bisect_test.log for details." 67 exit 1 68 else 69 echo "Test 2 passed." 70 fi 71 72 cd ${SAVE_DIR} 73 74 # Run Test 3. 75 ${DIR}/setup.sh 76 77 ./binary_search_state.py --get_initial_items="${DIR}/get_initial_items.sh" \ 78 --switch_to_good="${DIR}/switch_to_good.sh" \ 79 --switch_to_bad="${DIR}/switch_to_bad.sh" \ 80 --test_setup_script="${DIR}/test_setup.sh" \ 81 --test_script="${DIR}/interactive_test.sh" \ 82 --file_args --prune &> /tmp/full_bisect_test.log 83 84 ${DIR}/cleanup.sh 85 86 grep "Bad items are: " /tmp/full_bisect_test.log | grep inorder_norecurse.o &> /dev/null 87 test_status_1=$? 88 89 grep "Bad items are: " /tmp/full_bisect_test.log | grep preorder_norecurse.o &> /dev/null 90 test_status_2=$? 91 92 if [[ ${test_status_1} -ne 0 ]] ; then 93 echo "Test 3 FAILED. See /tmp/full_bisect_test.log for details." 94 exit 1 95 elif [[ ${test_status_2} -ne 0 ]] ; then 96 echo "Test 3 FAILED. See /tmp/full_bisect_test.log for details." 97 exit 1 98 else 99 echo "Test 3 passed." 100 fi 101 102 # All tests passed! 103 exit 0 104 105