ROOT_DIR=$(git rev-parse --show-toplevel) TEST_DATA_DIR=${ROOT_DIR}/test/data/ OS="${OS:-linux}" ARCH="${ARCH:-amd64}" ZOT_PATH=${ROOT_DIR}/bin/zot-${OS}-${ARCH} mkdir -p ${TEST_DATA_DIR} function verify_prerequisites { if [ ! -f ${ZOT_PATH} ]; then echo "you need to build ${ZOT_PATH} before running the tests" >&3 return 1 fi if [ ! command -v skopeo &> /dev/null ]; then echo "you need to install skopeo as a prerequisite to running the tests" >&3 return 1 fi if [ ! command -v awslocal ] &>/dev/null; then echo "you need to install aws cli as a prerequisite to running the tests" >&3 return 1 fi return 0 } function zot_serve_strace() { local config_file=${1} strace -o "strace.txt" -f -e trace=openat ${ZOT_PATH} serve ${config_file} & } function zot_serve() { local config_file=${1} ${ZOT_PATH} serve ${config_file} & } function zot_stop() { pkill zot } function wait_str() { local filepath="$1" local search_term="$2" local wait_time="${3:-2m}" (timeout $wait_time tail -F -n0 "$filepath" &) | grep -q "$search_term" && return 0 echo "timeout of $wait_time reached. unable to find '$search_term' in '$filepath'" return 1 } function wait_for_string() { local search_term="$1" local filepath="$2" local wait_time="${3:-2m}" wait_file "$filepath" 60 || { echo "server log file missing: '$filepath'"; return 1; } wait_str "$filepath" "$search_term" "$wait_time" } function wait_file() { local file="$1"; shift local wait_seconds="${1:-60}"; shift until test $((wait_seconds--)) -eq 0 -o -f "$file" ; do sleep 1; done } function wait_zot_reachable() { zot_url=${1} curl --connect-timeout 3 \ --max-time 10 \ --retry 10 \ --retry-delay 0 \ --retry-max-time 120 \ --retry-connrefused \ ${zot_url} }