You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
4.2 KiB
Bash

9 years ago
#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
#
# Author: Hari Sekhon
# Date: 2015-05-25 01:38:24 +0100 (Mon, 25 May 2015)
#
# https://github.com/harisekhon/pytools
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help improve or steer this or other code I publish
#
# https://www.linkedin.com/in/harisekhon
9 years ago
#
set -eu
[ -n "${DEBUG:-}" ] && set -x
9 years ago
srcdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
8 years ago
export TRAP_SIGNALS="INT QUIT TRAP ABRT TERM EXIT"
9 years ago
hr(){
echo "================================================================================"
}
9 years ago
section(){
hr
"$srcdir/center80.sh" "$@"
hr
8 years ago
echo
9 years ago
}
9 years ago
# TODO:
#export SPARK_HOME="$(ls -d tests/spark-*-bin-hadoop* | head -n 1)"
type isExcluded &>/dev/null || . "$srcdir/excluded.sh"
9 years ago
8 years ago
check_exit_code(){
local exit_code=$?
8 years ago
local expected_exit_codes="$@"
local failed=1
for e in $expected_exit_codes; do
if [ $exit_code = $e ]; then
failed=0
fi
done
if [ $failed != 0 ]; then
echo "WRONG EXIT CODE RETURNED! Expected: '$expected_exit_codes', got: '$exit_code'"
8 years ago
exit 1
fi
}
9 years ago
is_linux(){
if [ "$(uname -s)" = "Linux" ]; then
return 0
else
return 1
fi
}
is_mac(){
if [ "$(uname -s)" = "Darwin" ]; then
return 0
else
return 1
fi
}
9 years ago
8 years ago
is_jenkins(){
if [ -n "${JENKINS_URL:-}" ]; then
return 0
else
return 1
fi
}
9 years ago
is_travis(){
if [ -n "${TRAVIS:-}" ]; then
return 0
else
return 1
fi
}
8 years ago
8 years ago
is_CI(){
if is_jenkins || is_travis; then
return 0
else
return 1
fi
}
8 years ago
if is_travis; then
8 years ago
#export DOCKER_HOST="${DOCKER_HOST:-localhost}"
8 years ago
export HOST="${HOST:-localhost}"
8 years ago
fi
8 years ago
if is_travis; then
sudo=sudo
else
sudo=""
fi
8 years ago
# useful for cutting down on number of noisy docker tests which take a long time but more importantly
# cause the CI builds to fail with job logs > 4MB
8 years ago
ci_sample(){
8 years ago
local versions="$@"
8 years ago
if [ -n "${SAMPLE:-}" ] || is_CI; then
8 years ago
if [ -n "$versions" ]; then
8 years ago
local a
8 years ago
IFS=' ' read -r -a a <<< "$versions"
8 years ago
local highest_index="${#a[@]}"
8 years ago
local random_index="$(($RANDOM % $highest_index))"
8 years ago
# Travis CI builds are too slow, halve the version tests
8 years ago
if [ $(($RANDOM % 3 )) = 0 ]; then
8 years ago
echo "${a[$random_index]}"
fi
8 years ago
return 1
8 years ago
else
if [ "$(($RANDOM % 4))" != 0 ]; then
return 1
fi
fi
else
if [ -n "$versions" ]; then
echo "$versions"
8 years ago
fi
fi
return 0
}
8 years ago
untrap(){
trap - $TRAP_SIGNALS
}
8 years ago
8 years ago
plural(){
plural="s"
local num="${1:-}"
if [ "$num" = 1 ]; then
plural=""
fi
}
plural_str(){
local parts=($@)
plural ${#parts[@]}
}
8 years ago
timestamp(){
printf "%s" "`date '+%F %T'` $*";
[ $# -gt 0 ] && printf "\n"
}
when_ports_available(){
8 years ago
local max_secs="$1"
8 years ago
local host="$2"
local ports="${@:3}"
8 years ago
local retry_interval=1
local max_tries=$(($max_secs / $retry_interval))
local nc_cmd="nc -z -G $retry_interval $host"
8 years ago
cmd=""
8 years ago
for x in $ports; do
8 years ago
cmd="$cmd $nc_cmd $x &>/dev/null && "
8 years ago
done
local cmd="${cmd% && }"
8 years ago
plural_str $ports
echo "waiting for port$plural '$ports' to become available, will try up to $max_tries times at $retry_interval sec intervals"
8 years ago
echo "cmd: $cmd"
8 years ago
local found=0
if which nc &>/dev/null; then
8 years ago
for((i=0; i< $max_tries; i++)); do
8 years ago
timestamp "trying host '$host' port(s) '$ports'"
8 years ago
if eval $cmd; then
8 years ago
found=1
break
fi
sleep 1
done
if [ $found -eq 1 ]; then
8 years ago
timestamp "host '$host' port$plural '$ports' available after $i secs"
8 years ago
else
8 years ago
timestamp "host '$host' port$plural '$ports' still not available after '$max_secs' secs, giving up waiting"
8 years ago
fi
else
echo "'nc' command not found, sleeping for '$max_secs' secs instead"
8 years ago
sleep "$max_secs"
8 years ago
fi
}