96c2d8998d
We had a memory safety/UB bug in the C code; let's use that as a good motivation to rewrite in Rust. It's a nice self contained bit.
88 lines
3.1 KiB
Bash
Executable File
88 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
. ${KOLA_EXT_DATA}/libtest.sh
|
|
cd $(mktemp -d)
|
|
|
|
# From https://github.com/ostreedev/ostree/blob/95a6d1514/tests/kolainst/destructive/overlay-initrds.sh#L23
|
|
check_for_dracut_karg() {
|
|
local karg=$1; shift
|
|
# https://github.com/dracutdevs/dracut/blob/38ea7e821b/modules.d/98dracut-systemd/dracut-cmdline.sh#L17
|
|
journalctl -b 0 -t dracut-cmdline \
|
|
--grep "Using kernel command line parameters:.* ${karg} "
|
|
}
|
|
|
|
case "${AUTOPKGTEST_REBOOT_MARK:-}" in
|
|
"")
|
|
for f in / /var /usr/bin; do
|
|
if rpm-ostree ex initramfs-etc --track ${f} 2>out.txt; then
|
|
fatal "should have failed with path ${f}"
|
|
fi
|
|
assert_file_has_content_literal out.txt "Path outside /etc forbidden: ${f}"
|
|
rm -f out.txt
|
|
done
|
|
|
|
mkdir -p /etc/cmdline.d
|
|
echo 'foobar' > /etc/cmdline.d/foobar.conf
|
|
|
|
rpm-ostree ex initramfs-etc --track /etc/cmdline.d/foobar.conf
|
|
rpm-ostree status > status.txt
|
|
assert_file_has_content_literal status.txt "InitramfsEtc: /etc/cmdline.d/foobar.conf"
|
|
rpm-ostree status --json > status.json
|
|
assert_jq status.json \
|
|
'.deployments[0]["initramfs-etc"]|length == 1' \
|
|
'.deployments[0]["initramfs-etc"][0] == "/etc/cmdline.d/foobar.conf"'
|
|
|
|
/tmp/autopkgtest-reboot 1
|
|
;;
|
|
1)
|
|
check_for_dracut_karg foobar
|
|
rpm-ostree ex initramfs-etc --track /etc/cmdline.d/foobar.conf > out.txt
|
|
assert_file_has_content_literal out.txt "No changes."
|
|
|
|
# right now we don't rechecksum all the files so changing the file alone
|
|
# isn't noticed, but we could in the future
|
|
echo 'barbaz' > /etc/cmdline.d/foobar.conf
|
|
rpm-ostree ex initramfs-etc --track /etc/cmdline.d/foobar.conf > out.txt
|
|
assert_file_has_content_literal out.txt "No changes."
|
|
|
|
# but --force-sync should also plow through
|
|
rpm-ostree ex initramfs-etc --force-sync > out.txt
|
|
assert_file_has_content_literal out.txt "Staging deployment"
|
|
|
|
/tmp/autopkgtest-reboot 2
|
|
;;
|
|
2)
|
|
check_for_dracut_karg barbaz
|
|
if check_for_dracut_karg foobar; then
|
|
assert_not_reached "Found karg foobar; expected barbaz"
|
|
fi
|
|
|
|
# let's try tracking a whole directory instead
|
|
echo 'bazboo' > /etc/cmdline.d/bazboo.conf
|
|
# and for fun, let's use the the locked finalization flow
|
|
rpm-ostree ex initramfs-etc --lock-finalization \
|
|
--untrack /etc/cmdline.d/foobar.conf \
|
|
--track /etc/cmdline.d
|
|
rpm-ostree status > status.txt
|
|
assert_file_has_content_literal status.txt "InitramfsEtc: /etc/cmdline.d"
|
|
rpm-ostree status --json > status.json
|
|
assert_jq status.json \
|
|
'.deployments[0]["initramfs-etc"]|length == 1' \
|
|
'.deployments[0]["initramfs-etc"][0] == "/etc/cmdline.d"'
|
|
|
|
/tmp/autopkgtest-reboot-prepare 3
|
|
rpm-ostree finalize-deployment --allow-missing-checksum
|
|
;;
|
|
3)
|
|
check_for_dracut_karg barbaz
|
|
check_for_dracut_karg bazboo
|
|
|
|
# finally, check that passing no args prints the tracked files
|
|
rpm-ostree ex initramfs-etc > out.txt
|
|
assert_file_has_content_literal out.txt "Tracked files:"
|
|
assert_file_has_content_literal out.txt "/etc/cmdline.d"
|
|
;;
|
|
*) echo "unexpected mark: ${AUTOPKGTEST_REBOOT_MARK}"; exit 1;;
|
|
esac
|