#!/bin/bash
declare Version=1.1.4

#------------------------------------------------------------------------------
# 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 CbdDir=/depotdata${CBD_HOME}
declare LibDir=/p4/common/lib
declare SharedCBD=/shared/cbd
declare SharedLib=/shared/lib
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 ${0##*/} v$Version as user $USER on host ${HOSTNAME%%.*}."

echo "Updating CBD scripts from $SharedCBD."

for dir in test scripts triggers; do
   if [[ ! -d $CbdDir/$dir ]]; then
      mkdirCmd="sudo mkdir -p $CbdDir/$dir"
      echo "Running: $mkdirCmd"
      $mkdirCmd
   fi

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

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

chownCmd="sudo chown -R $RunUser:$RunGroup $CbdDir"
echo "Running: $chownCmd"
$chownCmd

if [[ -d /p4 ]]; then
   if [[ -L /p4/common ]]; then
      echo "Verified: SDP /p4/common symlink exists."
   else
      echo "Making SDP symlink in /p4."
      cd /p4
      linkCmd="sudo ln -s /depotdata/p4/common"
      echo "Running: $linkCmd"
      $linkCmd || bail "SDP symlink not created. Aborting."
   fi
else
   bail "Expected /p4 directory does not exist. Aborting."
fi

if [[ ! -d $LibDir ]]; then
   mkdirCmd="sudo mkdir -p $LibDir"
   echo "Running: $mkdirCmd"
   $mkdirCmd
fi

rsyncCmd="sudo rsync -a --delete $SharedLib/ $LibDir"
echo "Running: $rsyncCmd"
$rsyncCmd ||:

diffCmd="sudo diff -qr $SharedLib $LibDir"
echo "Running: $diffCmd"
$diffCmd || bail "CBD files were not verified. Aborting."

echo "Verified: SDP lib files updated OK from $SharedLib."

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
