- SOURCE_FILE=$_
-
- set -ueEo pipefail
-
- function log() {
- echo -e "\033[0;33m[INFO] $@\033[0m"
- echo "[INFO] $@" >> $(dirname "${BASH_SOURCE[0]}")/test.log
- }
-
- # lineno[, msg]
- function die() {
- local line=$1
- local msg=${2:-command failed}
- local supplemental=${3:-}
- echo "[ERROR] $SOURCE_FILE:$1 $msg" | tee -a $(dirname "${BASH_SOURCE[0]}")/test.log | cat 1>&2
- if [ ! -z "$supplemental" ]; then
- echo "$supplemental" | >&2 sed 's|^| |g'
- fi
- exit 1
- }
- trap 'die $LINENO' ERR
-
- # Get a random port for the test to use
- # This isn't foolproof but should fail less than handcrafted approaches
- function getRandomPort() {
- # Get the PID of this script as a way to get a random port,
- # and make sure the value is > 1024, as ports < 1024 are priviledged
- # and require root priviledges.
- # We also need to make sure the value is not > ushort.max
- PORT=$(($$ % 65536))
- if [ $PORT -le 1024 ]; then
- PORT=$(($PORT + 1025))
- fi
- echo $PORT
- }
-
- # Emulate GNU readlink's behavior on non-GNU readlink (e.g. MacOSX / BSD's)
- # Credit to https://stackoverflow.com/a/1116890
- function gnureadlink() {
- TARGET_FILE=$1
-
- cd `dirname $TARGET_FILE`
- TARGET_FILE=`basename $TARGET_FILE`
-
- # Iterate down a (possible) chain of symlinks
- while [ -L "$TARGET_FILE" ]
- do
- TARGET_FILE=`readlink $TARGET_FILE`
- cd `dirname $TARGET_FILE`
- TARGET_FILE=`basename $TARGET_FILE`
- done
-
- # Compute the canonicalized name by finding the physical path
- # for the directory we're in and appending the target file.
- PHYS_DIR=`pwd -P`
- RESULT=$PHYS_DIR/$TARGET_FILE
- echo $RESULT
- }