#!/bin/bash
#------------------------------------------------------------------------------
# This wrapper to test_cbd.sh defines recommended flags for use with Vagrant
# VM testing, and in general handles the vagaries of operatring in a
# Vagrant VM environment.
set -u

function bail () { echo -e "\nError: ${1:-Unknown Error}\n"; exit ${2:-1}; }

export CBD_HOME=/p4/common/bin/cbd

declare SharedCBD=/shared/cbd
declare RunUser=perforce
declare RunGroup=perforce
declare RunHost=helix-01
declare SudoUser=vagrant
declare TestSuiteCmd=
declare CopyOfThisScript

if [[ `id -u` = 0 || "`id -u -n`" == $SudoUser ]]; then
   CopyOfThisScript=/tmp/${0##*/}
   sudo cp -p $0 $CopyOfThisScript
   sudo chmod 740 $CopyOfThisScript
   sudo chown $RunUser:$RunGroup $CopyOfThisScript
   exec sudo su -l $RunUser -c "$CopyOfThisScript $*"
elif [[ "`id -u -n`" != $RunUser ]]; then
   echo "$0 can only be run by root, $RunUser, or $SudoUser on host $RunHost."
   exit 1
fi

if [[ ${HOSTNAME%%.*} != $RunHost ]]; then
   echo "$0 can only be run by root, $RunUser, or $SudoUser on host $RunHost."
fi

echo "Running as user $USER on host ${HOSTNAME%%.*}."

echo "Updating CBD scripts from $SharedCBD."
for dir in test scripts triggers; do
   if [[ ! -d $CBD_HOME/$dir ]]; then
      mkdirCmd="mkdir -p $CBD_HOME/$dir"
      echo "Running: $mkdirCmd"
      $mkdirCmd
   fi

   rsyncCmd="rsync -a --delete $SharedCBD/$dir/ $CBD_HOME/$dir"
   echo "Running: $rsyncCmd"
   $rsyncCmd ||:

   diffCmd="diff -qr $SharedCBD/$dir $CBD_HOME/$dir"
   echo "Running: $diffCmd"
   $diffCmd || bail "CBD files were not verified. Aborting."
done

echo "Verified: CBD files updated OK from $SharedCBD."

TestSuiteCmd="$CBD_HOME/test/test_cbd.sh -I -S"
echo -e "Running the Test Suite, executing:\n$TestSuiteCmd"

$TestSuiteCmd || bail "Test Suite Failed."

echo -e "SUCCESS: Test Suite Completed OK."

exit 0
