7697702aaa
We now make the test harness handle restoring the VM to the original state. The wonderful thing about ostree here is that it's a perfect shoo-in for this. We make a 'backup' of the current ref, and just have to make sure that the VM is back on that ref after running each test. This will allow us to write tests without worrying as much about cleaning up in the event of an error. Closes: #360 Approved by: cgwalters
90 lines
2.4 KiB
Bash
90 lines
2.4 KiB
Bash
#!/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
|
|
|
|
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
|
|
|
|
failures=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
|
|
|
|
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
|
|
echo "PASS: $bn"
|
|
else
|
|
if test $? = 77; then
|
|
echo "SKIP: $bn"
|
|
else
|
|
echo "FAIL: $bn"
|
|
let "failures += 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)
|
|
vm_cmd ostree commit -b vmcheck --tree=ref=vmcheck_orig
|
|
vm_cmd ostree admin deploy vmcheck
|
|
vm_reboot
|
|
fi
|
|
done
|
|
|
|
# tear down ssh connection
|
|
$SSH -O exit &>/dev/null
|
|
|
|
if [ ${failures} -eq 0 ]; then
|
|
echo "All tests passed."
|
|
else
|
|
echo "Test failures: ${failures}"
|
|
echo "See ${LOG} for more information."
|
|
exit 1
|
|
fi
|