1# tdir that only exes the files. 2args="../.." 3if test "$1" = "-a"; then 4 args=$2 5 shift 6 shift 7fi 8 9# This will keep the temporary directory around and return 1 when the test failed. 10DEBUG=0 11test -n "$DEBUG_TDIR" && DEBUG=1 12 13quiet=0 14if test "$1" = "-q"; then 15 quiet=1 16 shift 17fi 18 19if test "$1" = "clean"; then 20 if test $quiet = 0; then 21 echo "rm -f result.* .done* .skip* .tdir.var.master .tdir.var.test" 22 fi 23 rm -f result.* .done* .skip* .tdir.var.master .tdir.var.test 24 exit 0 25fi 26if test "$1" = "fake"; then 27 if test $quiet = 0; then 28 echo "minitdir fake $2" 29 fi 30 echo "fake" > .done-`basename $2 .tdir` 31 exit 0 32fi 33if test "$1" = "-f" && test "$2" = "report"; then 34 echo "Minitdir Long Report" 35 pass=0 36 fail=0 37 skip=0 38 echo " STATUS ELAPSED TESTNAME TESTDESCRIPTION" 39 for result in *.tdir; do 40 name=`basename $result .tdir` 41 timelen=" " 42 desc="" 43 if test -f "result.$name"; then 44 timestart=`grep ^DateRunStart: "result.$name" | sed -e 's/DateRunStart: //'` 45 timeend=`grep ^DateRunEnd: "result.$name" | sed -e 's/DateRunEnd: //'` 46 timesec=`expr $timeend - $timestart` 47 timelen=`printf %4ds $timesec` 48 if test $? -ne 0; then 49 timelen="$timesec""s" 50 fi 51 desc=`grep ^Description: "result.$name" | sed -e 's/Description: //'` 52 fi 53 if test -f ".done-$name"; then 54 if test $quiet = 0; then 55 echo "** PASSED ** $timelen $name: $desc" 56 pass=`expr $pass + 1` 57 fi 58 elif test -f ".skip-$name"; then 59 echo ".. SKIPPED.. $timelen $name: $desc" 60 skip=`expr $skip + 1` 61 else 62 if test -f "result.$name"; then 63 echo "!! FAILED !! $timelen $name: $desc" 64 fail=`expr $fail + 1` 65 else 66 echo ".. SKIPPED.. $timelen $name: $desc" 67 skip=`expr $skip + 1` 68 fi 69 fi 70 done 71 echo "" 72 if test "$skip" = "0"; then 73 echo "$pass pass, $fail fail" 74 else 75 echo "$pass pass, $fail fail, $skip skip" 76 fi 77 echo "" 78 exit 0 79fi 80if test "$1" = "report" || test "$2" = "report"; then 81 echo "Minitdir Report" 82 for result in *.tdir; do 83 name=`basename $result .tdir` 84 if test -f ".done-$name"; then 85 if test $quiet = 0; then 86 echo "** PASSED ** : $name" 87 fi 88 elif test -f ".skip-$name"; then 89 if test $quiet = 0; then 90 echo ".. SKIPPED.. : $name" 91 fi 92 else 93 if test -f "result.$name"; then 94 echo "!! FAILED !! : $name" 95 else 96 if test $quiet = 0; then 97 echo ".. SKIPPED.. : $name" 98 fi 99 fi 100 fi 101 done 102 exit 0 103fi 104 105if test "$1" != 'exe'; then 106 # usage 107 echo "mini tdir. Reduced functionality for old shells." 108 echo " tdir [-q] exe <file>" 109 echo " tdir [-q] fake <file>" 110 echo " tdir [-q] clean" 111 echo " tdir [-q|-f] report" 112 exit 1 113fi 114shift 115 116# do not execute if the disk is too full 117#DISKLIMIT=100000 118# This check is not portable (to Solaris 10). 119#avail=`df . | tail -1 | awk '{print $4}'` 120#if test "$avail" -lt "$DISKLIMIT"; then 121 #echo "minitdir: The disk is too full! Only $avail." 122 #exit 1 123#fi 124 125name=`basename $1 .tdir` 126dir=$name.$$ 127result=result.$name 128done=.done-$name 129skip=.skip-$name 130asan_text="SUMMARY: AddressSanitizer" 131success="no" 132if test -x "`which bash`"; then 133 shell="bash" 134else 135 shell="sh" 136fi 137 138# check already done 139if test -f $done; then 140 echo "minitdir $done exists. skip test." 141 exit 0 142fi 143 144# Copy 145if test $quiet = 0; then 146 echo "minitdir copy $1 to $dir" 147fi 148mkdir $dir 149if cp --help 2>&1 | grep -- "-a" >/dev/null; then 150cp -a $name.tdir/* $dir/ 151else 152cp -R $name.tdir/* $dir/ 153fi 154cd $dir 155 156# EXE 157echo "minitdir exe $name" > $result 158grep "Description:" $name.dsc >> $result 2>&1 159echo "DateRunStart: "`date "+%s" 2>/dev/null` >> $result 160if test -f $name.pre; then 161 if test $quiet = 0; then 162 echo "minitdir exe $name.pre" 163 fi 164 echo "minitdir exe $name.pre" >> $result 165 $shell $name.pre $args >> $result 166 exit_value=$? 167 if test $exit_value -eq 3; then 168 echo "$name: SKIPPED" >> $result 169 echo "$name: SKIPPED" > ../$skip 170 echo "$name: SKIPPED" 171 elif test $exit_value -ne 0; then 172 echo "Warning: $name.pre did not exit successfully" 173 fi 174fi 175if test -f $name.test -a ! -f ../$skip; then 176 if test $quiet = 0; then 177 echo "minitdir exe $name.test" 178 fi 179 echo "minitdir exe $name.test" >> $result 180 $shell $name.test $args >>$result 2>&1 181 if test $? -ne 0; then 182 echo "$name: FAILED" >> $result 183 echo "$name: FAILED" 184 success="no" 185 else 186 echo "$name: PASSED" >> $result 187 echo "$name: PASSED" > ../$done 188 if test $quiet = 0; then 189 echo "$name: PASSED" 190 fi 191 success="yes" 192 fi 193fi 194if test -f $name.post -a ! -f ../$skip; then 195 if test $quiet = 0; then 196 echo "minitdir exe $name.post" 197 fi 198 echo "minitdir exe $name.post" >> $result 199 $shell $name.post $args >> $result 200 if test $? -ne 0; then 201 echo "Warning: $name.post did not exit successfully" 202 fi 203fi 204# Check if there were any AddressSanitizer errors 205# if compiled with -fsanitize=address 206if grep "$asan_text" $result >/dev/null 2>&1; then 207 if test -f ../$done; then 208 rm ../$done 209 fi 210 echo "$name: FAILED (AddressSanitizer)" >> $result 211 echo "$name: FAILED (AddressSanitizer)" 212 success="no" 213fi 214echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result 215 216mv $result .. 217cd .. 218if test $DEBUG -eq 0; then 219 rm -rf $dir 220 # compat for windows where deletion may not succeed initially (files locked 221 # by processes that still have to exit). 222 if test $? -eq 1; then 223 echo "minitdir waiting for processes to terminate" 224 sleep 2 # some time to exit, and try again 225 rm -rf $dir 226 fi 227else 228 if test $success = "no"; then 229 exit 1 230 fi 231 exit 0 232fi 233