From aacb17f3f007991c6a200a97b77b1979b2061795 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 15 Aug 2024 13:51:59 -0400 Subject: [PATCH] tests: Attempt to update auto-prune test We need to look in the journal since https://github.com/ostreedev/ostree/pull/3282/commits/3d07a808ce9a764c98560279fc444d2e4fb901db Signed-off-by: Colin Walters Co-authored-by: Jonathan Lebon Signed-off-by: Colin Walters --- tests/kolainst/destructive/auto-prune.sh | 78 ++++++++++++++++-------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/tests/kolainst/destructive/auto-prune.sh b/tests/kolainst/destructive/auto-prune.sh index 5081275e07..b2ef289369 100755 --- a/tests/kolainst/destructive/auto-prune.sh +++ b/tests/kolainst/destructive/auto-prune.sh @@ -5,6 +5,34 @@ set -xeuo pipefail . ${KOLA_EXT_DATA}/libinsttest.sh +journal_cursor() { + journalctl -o json -n 1 | jq -r '.["__CURSOR"]' +} + +assert_journal_grep() { + local cursor re + cursor=$1 + shift + re=$1 + shift + + if ! journalctl -t ostree --after-cursor "${cursor}" --grep="$re" "$@" >/dev/null; then + fatal "failed to find in journal: $re"; exit 1 + fi +} + +assert_not_journal_grep() { + local cursor re + cursor=$1 + shift + re=$1 + shift + + if journalctl -t ostree --after-cursor "${cursor}" --grep="$re" "$@"; then + fatal "found in journal: $re"; exit 1 + fi +} + # make two fake ostree commits with modified kernels of about the same size cd /root mkdir -p rootfs/usr/lib/modules/`uname -r` @@ -44,12 +72,12 @@ assert_bootfs_has_n_bootcsum_dirs 1 # the booted deployment is never pruned, so this is a hopeless case and auto-pruning can't save us consume_bootfs_space rpm-ostree rebase :modkernel1 -if ostree admin finalize-staged |& tee out.txt; then +cursor=$(journal_cursor) +if ostree admin finalize-staged; then assert_not_reached "successfully wrote to filled up bootfs" fi -assert_file_has_content out.txt "Disabling auto-prune optimization; insufficient space left in bootfs" -assert_file_has_content out.txt "No space left on device" -rm out.txt +assert_journal_grep "$cursor" "Disabling auto-prune optimization; insufficient space left in bootfs" +assert_journal_grep "$cursor" "No space left on device" unconsume_bootfs_space rpm-ostree cleanup -bpr @@ -58,9 +86,9 @@ rpm-ostree cleanup -bpr assert_bootfs_has_n_bootcsum_dirs 1 rpm-ostree rebase :modkernel1 -ostree admin finalize-staged |& tee out.txt -assert_not_file_has_content out.txt "updating bootloader in two steps" -rm out.txt +cursor=$(journal_cursor) +ostree admin finalize-staged +assert_not_journal_grep "$cursor" "updating bootloader in two steps" # and put it in rollback position; this is the deployment that'll get auto-pruned rpm-ostree rollback @@ -71,11 +99,11 @@ bootloader_orig=$(sha256sum /boot/loader/entries/*) # now try to deploy a third deployment without early pruning; we should hit ENOSPC consume_bootfs_space rpm-ostree rebase :modkernel2 -if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged |& tee out.txt; then +cursor=$(journal_cursor) +if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged; then assert_not_reached "successfully wrote kernel without auto-pruning" fi -assert_file_has_content out.txt "No space left on device" -rm out.txt +assert_journal_grep "$cursor" "updating bootloader in two steps" # there's 3 bootcsums now because it'll also have the partially written # bootcsum dir we were creating when we hit ENOSPC; this verifies that all the @@ -86,9 +114,9 @@ assert_streq "$bootloader_orig" "$(sha256sum /boot/loader/entries/*)" # now, try again but with auto-pruning enabled rpm-ostree rebase :modkernel2 -ostree admin finalize-staged |& tee out.txt -assert_file_has_content out.txt "updating bootloader in two steps" -rm out.txt +cursor=$(journal_cursor) +ostree admin finalize-staged +assert_journal_grep "$cursor" "updating bootloader in two steps" assert_bootfs_has_n_bootcsum_dirs 2 assert_not_streq "$bootloader_orig" "$(sha256sum /boot/loader/entries/*)" @@ -121,18 +149,18 @@ unshare -m bash -c \ consume_bootfs_space "$((free_blocks_kernel_and_initrd))" rpm-ostree rebase :modkernel1 +cursor=$(journal_cursor) # Disable auto-pruning to verify we reproduce the bug -if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged |& tee out.txt; then +if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged; then assert_not_reached "successfully wrote kernel without auto-pruning" fi -assert_file_has_content out.txt "No space left on device" -rm out.txt +assert_journal_grep "$cursor" "No space left on device" # now, try again but with (now default) auto-pruning enabled rpm-ostree rebase :modkernel1 -ostree admin finalize-staged |& tee out.txt -assert_file_has_content out.txt "updating bootloader in two steps" -rm out.txt +cursor=$(journal_cursor) +ostree admin finalize-staged +assert_journal_grep "$cursor" "updating bootloader in two steps" # Below, we test that the size estimator is blocksize aware. This catches the # case where the dtb contains many small files such that there's a lot of wasted @@ -149,17 +177,17 @@ ostree commit --base modkernel1 -P --tree=dir=rootfs -b modkernel3 consume_bootfs_space "$((free_blocks_kernel_and_initrd - 10000))" rpm-ostree rebase :modkernel3 +cursor=$(journal_cursor) # Disable auto-pruning to verify we reproduce the bug -if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged |& tee out.txt; then +if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged; then assert_not_reached "successfully wrote kernel without auto-pruning" fi -assert_file_has_content out.txt "No space left on device" -rm out.txt +assert_journal_grep "$cursor" "No space left on device" # now, try again but with (now default) auto-pruning enabled rpm-ostree rebase :modkernel3 -ostree admin finalize-staged |& tee out.txt -assert_file_has_content out.txt "updating bootloader in two steps" -rm out.txt +cursor=$(journal_cursor) +ostree admin finalize-staged +assert_journal_grep "$cursor" "updating bootloader in two steps" echo "ok bootfs auto-prune"