#!/bin/bash

function check_okay {
	if [ $? -ne 0 ]
	then
		exit 1
	fi
}

function do_onex {
	cd $1
	echo
	pwd
#	./mk
  rm out.txt
  rm err.txt
  echo start >> out.txt
	./rn >> out.txt 2> err.txt
	more err.txt >> out.txt
  echo end >> out.txt
	exit
	cd ..
}


function check_restart {
  if [ "$4" != skip ]
  then
    rm -f "$3"
    ./re "$4" >> out.txt 2> err.txt
  	more err.txt >> out.txt
  	cat err.txt
  	rm err.txt
    ./ck >& final_check_diff.txt
    if [ $? -ne 0 ]
    then
    	echo "******************** $1 restart $4 failed for diff "$3" final_check.mod after ./re $4 ********************"
    	echo "******************** $1 restart $4 failed for diff "$3" final_check.mod after ./re $4 ********************" >> out.txt
    elif [ -s final_check_diff.txt ]
    then
    	echo "******************** $1 restart $4 failed for diff "$3" final_check.mod after ./re $4 ********************"
    	echo "******************** $1 restart $4 failed for diff "$3" final_check.mod after ./re $4 ********************" >> out.txt
    else
    	echo "$1 matches final_check.mod after ./re $4"
    	echo "$1 matches final_check.mod after ./re $4" >> out.txt

    	#check_profile
    	diff -b final_profile.data final_profile_check.data >& final_profile_check_diff.txt
      if [ $? -ne 0 ]
      then
      	echo "******************** $1 restart failed for diff final_profile.data after ./re $4 ********************"
      	echo "******************** $1 restart failed for diff final_profile.data after ./re $4 ********************" >> out.txt
      elif [ -s final_check_diff.txt ]
      then
      	echo "******************** $1 restart failed for diff final_profile.data after ./re $4 ********************"
      	echo "******************** $1 restart failed for diff final_profile.data after ./re $4 ********************" >> out.txt
      else
        echo "$1 matches final_profile.data after ./re $4"
        echo "$1 matches final_profile.data after ./re $4" >> out.txt
    	fi
    fi
  fi
}


function do_one {
	cd $1
	echo "build_and_run" $1
  ./clean
  check_okay
  ./mk > mk.txt
  check_okay
  rm mk.txt
  if [ ! -z $3 ]
  then
    rm -f $3
  fi
	date "+   start %H:%M:%S"
  ./rn >> out.txt 2> err.txt
	more err.txt >> out.txt
	cat err.txt
	rm err.txt
	date "+  finish %H:%M:%S"
  grep -i "$2" out.txt
  if [ $? -ne 0 ]
  then
    echo $2
    echo "******************** $1 failed to match test string ********************"
    echo "******************** $1 failed to match test string ********************" >> out.txt
    echo ""
  else
    grep -i runtime out.txt
    if [ -z $3 ]
    then
      pwd
      echo missing name of final mod test file -- fix do1_test_source for $1
      echo
    elif [ "$3" != skip ]
    then
      ./ck >& final_check_diff.txt
      if [ $? -ne 0 ]
      then
      	echo "******************** $1 failed for diff "$3" final_check.mod after ./rn ********************"
      	echo "******************** $1 failed for diff "$3" final_check.mod after ./rn ********************" >> out.txt
      elif [ -s final_check_diff.txt ]
      then
      	echo "******************** $1 failed for diff "$3" final_check.mod after ./rn ********************"
      	echo "******************** $1 failed for diff "$3" final_check.mod after ./rn ********************" >> out.txt
      elif [ -r "$3" ]
      then
      	echo "$1 matches final_check.mod after ./rn"
      	echo "$1 matches final_check.mod after ./rn" >> out.txt
      	
      	#check_profile
      	diff -b final_profile.data final_profile_check.data >& final_profile_check_diff.txt
        if [ $? -ne 0 ]
        then
        	echo "******************** $1 failed for diff final_profile.data after ./rn ********************"
        	echo "******************** $1 failed for diff final_profile.data after ./rn ********************" >> out.txt
        elif [ -s final_check_diff.txt ]
        then
        	echo "******************** $1 failed for diff final_profile.data after ./rn ********************"
        	echo "******************** $1 failed for diff final_profile.data after ./rn ********************" >> out.txt
        elif [ -r "$3" ]
        then
          echo "$1 matches final_profile.data after ./rn"
          echo "$1 matches final_profile.data after ./rn" >> out.txt
        	if [ -z $4 ]
        	then
            pwd
            echo missing arg for ./re
            echo
        	else
        	  check_restart "$1" "$2" "$3" "$4"
        	fi
      	fi
      fi
    fi      
  fi
	echo ""
	cd ..
}


date
#echo ""
#./clean_each_test

echo ""

source do1_test_source

date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S"
echo ""
date
