b68209b6d4
During a deploy operation, we would fetch commit objects from the remote to resolve the version string. If gpg-verify was turned on, we would fail to pull them if some of the commits were not signed. This is because we pulled them in batches. We partially address this by only fetching the HEAD commit on the first pass. This allows `upgrade` operations to work just as well as `deploy` operations. Though there is still an issue if we have to traverse farther back than when signed commits become unsigned (unless they happen to fall on a batch boundary). We leave that unsolved for now, since that would likely require a more complex solution and it's not clear whether it's a real world issue (signers can just retroactively sign commits). Copy the gpghome from ostree so that we can test GPG-related cases in our suite. Closes: #527 Closes: #557 Approved by: cgwalters
98 lines
2.4 KiB
Bash
Executable File
98 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
dn=$(cd $(dirname $0) && pwd)
|
|
|
|
export topsrcdir=$(cd $dn/.. && pwd)
|
|
|
|
LOG=${LOG:-compose.log}
|
|
date > ${LOG}
|
|
|
|
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
|
|
}
|
|
|
|
uid=$(id -u)
|
|
test_compose_datadir=/var/tmp/rpmostree-compose-cache-${uid}
|
|
export test_compose_datadir
|
|
mkdir -p ${test_compose_datadir}
|
|
datadir_owner=$(stat -c '%u' ${test_compose_datadir})
|
|
test ${uid} = ${datadir_owner}
|
|
|
|
# Pre-cache RPMs for each test, and share ostree repos between them for efficiency
|
|
repo=${test_compose_datadir}/repo
|
|
export repo
|
|
ostree --repo=${repo} init --mode=archive
|
|
repobuild=${test_compose_datadir}/repo-build
|
|
export repobuild
|
|
ostree --repo=${repobuild} init --mode=bare-user
|
|
mkdir -p ${test_compose_datadir}/cache
|
|
|
|
echo "Preparing compose tests..." | tee -a ${LOG}
|
|
|
|
# Delete the default ref, since we want to use subrefs of it
|
|
(rm ${repobuild}/refs/heads/* -rf
|
|
rpm-ostree compose --repo=${repobuild} tree --dry-run --cachedir=${test_compose_datadir}/cache ${dn}/composedata/fedora-base.json
|
|
rm ${repobuild}/refs/heads/* -rf) &>> ${LOG}
|
|
|
|
total=0
|
|
pass=0
|
|
fail=0
|
|
skip=0
|
|
for tf in $(find ${dn}/compose-tests -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\n===== ${bn} =====\n\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"
|
|
echo "PASS" >> ${LOG}
|
|
let "pass += 1"
|
|
else
|
|
if test $? = 77; then
|
|
skip_print "SKIP: $bn"
|
|
echo "SKIP" >> ${LOG}
|
|
let "skip += 1"
|
|
else
|
|
fail_print "FAIL: $bn"
|
|
echo "FAIL" >> ${LOG}
|
|
let "fail += 1"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
[ ${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 ]
|