rpm-ostree/tests/vmcheck/test.sh
Jonathan Lebon ba05972bbb vmcheck/test.sh: make more silent and add some bling
Print out a better summary that sums up the passes, failures, and skips.
Silence the restoring step at the end of the testsuite by only echo'ing
to the log file. Finally, add some colouring because colours are
awesome.

Closes: #371
Approved by: cgwalters
2016-07-05 15:26:45 +00:00

119 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# prepare ssh connection
vagrant ssh-config > ssh-config
echo " ControlMaster auto" >> ssh-config
echo " ControlPath $PWD/ssh.sock" >> ssh-config
echo " ControlPersist yes" >> ssh-config
export SSH="ssh -F $PWD/ssh-config vmcheck"
export SCP="scp -F $PWD/ssh-config"
. ${commondir}/libvm.sh
# stand up ssh connection and sanity check that it all works
if ! vm_ssh_wait 20; then
echo "ERROR: A running VM is required for 'make vmcheck'."
exit 1
fi
# just error out if we're unlocked -- we use the current deployment as the
# fallback between each test, so we need to be sure it's in a state that works.
# also, the user might have forgotten that these tests are somewhat destructive
# and thus would wipe out unlocked changes, hotfix or not.
unlocked_cur=$(vm_get_booted_deployment_info unlocked)
if [[ $unlocked_cur != none ]]; then
echo "ERROR: VM is unlocked."
exit 1
fi
# remember the csum we're currently on and tag it so that ostree doesn't wipe it
csum_orig=$(vm_get_booted_csum)
vm_cmd ostree rev-parse $csum_orig &> /dev/null # validate
vm_cmd ostree refs vmcheck_orig --delete
vm_cmd ostree refs $csum_orig --create vmcheck_orig
LOG=${LOG:-"$PWD/vmcheck.log"}
echo -n '' > ${LOG}
testdir="$(dirname $(realpath $0))"
cd $testdir
colour_print() {
colour=$1; shift
[ ! -t 1 ] || echo -en "\e[${colour}m"
echo -n "$@"
[ ! -t 1 ] || echo -en "\e[0m"
echo
}
pass_print() {
colour_print 32 "$@" # green
}
fail_print() {
colour_print 31 "$@" # red
}
skip_print() {
colour_print 34 "$@" # blue
}
total=0
pass=0
fail=0
skip=0
for tf in $(find . -name 'test-*.sh' | sort); do
if [ -n "${TESTS+ }" ]; then
tfbn=$(basename "$tf" .sh)
tfbn=" ${tfbn#test-} "
if [[ " $TESTS " != *$tfbn* ]]; then
continue
fi
fi
let "total += 1"
bn=$(basename ${tf})
printf "Running $bn...\n"
printf "\n==== ${tf} ====\n" >> ${LOG}
# do some dirty piping to get some instant feedback and help debugging
if ${tf} |& tee -a ${LOG} \
| grep -e '^ok' --line-buffered \
| xargs -d '\n' -n 1 echo " "; then
pass_print "PASS: $bn"
let "pass += 1"
else
if test $? = 77; then
skip_print "SKIP: $bn"
let "skip += 1"
else
fail_print "FAIL: $bn"
let "fail += 1"
fi
fi
# go back to the original vmcheck deployment if needed
csum_cur=$(vm_get_booted_csum)
unlocked_cur=$(vm_get_booted_deployment_info unlocked)
if [[ $csum_orig != $csum_cur ]] || \
[[ $unlocked_cur != none ]]; then
# redeploy under the name 'vmcheck' so that tests can never modify the
# vmcheck_orig ref itself (e.g. package layering)
echo "Restoring vmcheck commit" >> ${LOG}
vm_cmd ostree commit -b vmcheck --tree=ref=vmcheck_orig &>> ${LOG}
vm_cmd ostree admin deploy vmcheck &>> ${LOG}
vm_reboot
fi
done
# tear down ssh connection
$SSH -O exit &>/dev/null
[ ${fail} -eq 0 ] && printer=pass || printer=fail
${printer}_print "TOTAL: $total PASS: $pass SKIP: $skip FAIL: $fail"
echo "See ${LOG} for more information."
[ ${fail} -eq 0 ]