aa64df080d
It turns out there's a naming clash between `to_string()` here in Rust *and* introspection is incorrectly associating the method with `ostree::Deployment` because of the naming prefix.
140 lines
4.6 KiB
Bash
Executable File
140 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
set -xeuo pipefail
|
|
|
|
. ${KOLA_EXT_DATA}/libtest.sh
|
|
cd $(mktemp -d)
|
|
|
|
# make sure that package-related entries are always present,
|
|
# even when they're empty.
|
|
# Validate there's no live state by default.
|
|
rpm-ostree status --json > status.json
|
|
assert_jq status.json \
|
|
'.deployments[0]["packages"]' \
|
|
'.deployments[0]["requested-packages"]' \
|
|
'.deployments[0]["requested-local-packages"]' \
|
|
'.deployments[0]["base-removals"]' \
|
|
'.deployments[0]["requested-base-removals"]' \
|
|
'.deployments[0]["live-inprogress"]|not' \
|
|
'.deployments[0]["live-replaced"]|not' \
|
|
'.deployments[0]["layered-commit-meta"]|not'
|
|
rm status.json
|
|
rpm-ostree testutils validate-parse-status
|
|
echo "ok empty pkg arrays, and commit meta correct in status json"
|
|
|
|
# Ensure we return an error when passing a wrong option.
|
|
rpm-ostree --help | awk '/^$/ {in_commands=0} {if(in_commands==1){print $0}} /^Builtin Commands:/ {in_commands=1}' > commands.txt
|
|
while read cmd; do
|
|
if rpm-ostree ${cmd} --n0t-3xisting-0ption &>/dev/null; then
|
|
assert_not_reached "command ${cmd} --n0t-3xisting-0ption was successful"
|
|
fi
|
|
done < commands.txt
|
|
echo "ok error on unknown command options"
|
|
|
|
rpm-ostree status --jsonpath '$.deployments[0].booted' > jsonpath.txt
|
|
assert_file_has_content_literal jsonpath.txt 'true'
|
|
echo "ok jsonpath"
|
|
|
|
# Verify operations as non-root
|
|
runuser -u core rpm-ostree status
|
|
echo "ok status doesn't require root"
|
|
|
|
if runuser -u core rpm-ostree pkg-add foo &>err.txt; then
|
|
fatal "Was able to install a package as non-root!"
|
|
fi
|
|
assert_file_has_content err.txt 'PkgChange not allowed for user'
|
|
if runuser -u core rpm-ostree reload &>err.txt; then
|
|
assert_not_reached "Was able to reload as non-root!"
|
|
fi
|
|
echo "ok polkit"
|
|
|
|
wrapdir="/usr/libexec/rpm-ostree/wrapped"
|
|
if [ -d "${wrapdir}" ]; then
|
|
# Test wrapped functions for rpm
|
|
rpm --version
|
|
rpm -qa > /dev/null
|
|
rpm --verify >out.txt
|
|
assert_file_has_content out.txt "rpm --verify is not necessary for ostree-based systems"
|
|
rm -f out.txt
|
|
if rpm -e bash 2>out.txt; then
|
|
fatal "rpm -e worked"
|
|
fi
|
|
assert_file_has_content out.txt 'Dropping privileges as `rpm` was executed with not "known safe" arguments'
|
|
|
|
if dracut --blah 2>out.txt; then
|
|
fatal "dracut worked"
|
|
fi
|
|
assert_file_has_content out.txt 'This system is rpm-ostree based'
|
|
rm -f out.txt
|
|
else
|
|
echo "Missing ${wrapdir}; cliwrap not enabled"
|
|
fi
|
|
|
|
# StateRoot is only in --verbose, also verify we're not showing
|
|
# unlocked.
|
|
rpm-ostree status > status.txt
|
|
assert_not_file_has_content status.txt StateRoot:
|
|
assert_not_file_has_content status.txt Unlocked:
|
|
rpm-ostree status -v > status.txt
|
|
assert_file_has_content status.txt StateRoot:
|
|
echo "ok status text"
|
|
|
|
# Also check that we can do status as non-root non-active
|
|
runuser -u bin rpm-ostree status
|
|
echo "ok status doesn't require active PAM session"
|
|
|
|
rpm-ostree status -b > status.txt
|
|
assert_streq $(grep -F -e 'ostree://' status.txt | wc -l) "1"
|
|
assert_file_has_content status.txt BootedDeployment:
|
|
echo "ok status -b"
|
|
|
|
if rpm-ostree nosuchcommand --nosuchoption 2>err.txt; then
|
|
assert_not_reached "Expected an error for nosuchcommand"
|
|
fi
|
|
assert_file_has_content err.txt 'Unknown.*command'
|
|
echo "ok error on unknown command"
|
|
|
|
# related: https://github.com/coreos/fedora-coreos-config/issues/194
|
|
rpm-ostree testutils moo
|
|
echo "ok moo"
|
|
|
|
# Reload as root https://github.com/projectatomic/rpm-ostree/issues/976
|
|
rpm-ostree reload
|
|
echo "ok reload"
|
|
|
|
# See rpmostree-scripts.c
|
|
grep ^DEFAULT /etc/crypto-policies/config
|
|
echo "ok crypto-policies DEFAULT backend"
|
|
|
|
ldd /usr/lib64/librpmostree-1.so.1 > rpmostree-lib-deps.txt
|
|
assert_not_file_has_content rpmostree-lib-deps.txt libdnf
|
|
echo "ok lib deps"
|
|
|
|
mv /etc/ostree/remotes.d{,.orig}
|
|
systemctl restart rpm-ostreed
|
|
rpm-ostree status > status.txt
|
|
assert_file_has_content status.txt 'Remote.*not found'
|
|
mv /etc/ostree/remotes.d{.orig,}
|
|
rpm-ostree reload
|
|
echo "ok remote not found"
|
|
|
|
rpm-ostree cleanup -p
|
|
originpath=$(ostree admin --print-current-dir).origin
|
|
unshare -m /bin/bash -c "mount -o remount,rw /sysroot && cp -a ${originpath}{,.orig} &&
|
|
echo 'unconfigured-state=Access to TestOS requires ONE BILLION DOLLARS' >> ${originpath}"
|
|
rpm-ostree reload
|
|
rpm-ostree status
|
|
if rpm-ostree upgrade 2>err.txt; then
|
|
echo "Upgraded from unconfigured-state"
|
|
exit 1
|
|
fi
|
|
grep -qFe 'ONE BILLION DOLLARS' err.txt
|
|
unshare -m /bin/bash -c "mount -o remount,rw /sysroot && cp -a ${originpath}{.orig,}"
|
|
rpm-ostree reload
|
|
echo "ok unconfigured-state"
|
|
|
|
### Stuff following here may mutate the host persistently ###
|
|
|
|
rpm-ostree usroverlay
|
|
echo some content > /usr/share/testcontent
|
|
echo "ok usroverlay"
|