#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: vm-check.sh [-x] -t TYPE -H HOST -r REMOTE vm-check.sh -h EOF } help() { cat <<-'EOF' Options: -x shutdown the VM before running checks -t TYPE the type of VM being tested -H HOST the name of the host to SSH into -r REMOTE the base address of the remote package-repository -h, --help show this message Run end-to-end tests of the package repository. EOF } for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done SHUTDOWN=false while getopts 'xt:H:r:h' flag; do case "$flag" in x) SHUTDOWN=true ;; t) TYPE="$OPTARG" ;; H) HOST="$OPTARG" ;; r) REMOTE="$OPTARG" ;; h) usage help exit ;; *) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) eval "$(assert-arg -- "${TYPE:-}" '-t TYPE')" eval "$(assert-arg -- "${HOST:-}" '-H HOST')" eval "$(assert-arg -- "${REMOTE:-}" '-r REMOTE')" SEP="$(color -c blacki ':')" pre_guest() { sed "s|^|$(color -c green "$HOST")$SEP$(color -c yellow "$TYPE")$SEP |" } pre_host() { sed "s|^|$(color -c blueb "$0")$SEP |" } shutdown() { if [ "$SHUTDOWN" = true ]; then vm down "$HOST" 2>&1 | pre_host fi } trap shutdown EXIT { if [ "$SHUTDOWN" = true ]; then vm down "$HOST" fi vm up "$HOST" untill -m5 -n5 ssh "$HOST" uptime scp tests/checks/"$TYPE".sh "$HOST":check.sh } 2>&1 | pre_host # shellcheck disable=2029 ssh "$HOST" sh check.sh "$REMOTE" 2>&1 | pre_guest