deploy: Correctly swap bootloader version with new boot checksums

If we had two deployments with different boot checksums, and were
trying to remove the one that was the same and add a new one (the
normal case), we'd end up assuming due to comparison with 0 that
we only needed to do the fast subbootversion swap.

Fix this by actually putting 1 where we really mean 1.

And update the tests to verify the fix; I have double-verified by
undoing the fix, and noting that the test fails.

https://bugzilla.gnome.org/show_bug.cgi?id=708351
This commit is contained in:
Colin Walters committed 2013-09-20 11:21:08 -04:00
1 parent 08b8734576
commit 298625d7f8
3 files changed
+18 -17

No files matched your search

+7 -2
View File
@@ -239,10 +239,15 @@ EOF
os_repository_new_commit ()
{
boot_checksum_iteration=$1
echo "BOOT ITERATION: $boot_checksum_iteration"
if test -z "$boot_checksum_iteration"; then
boot_checksum_iteration=0
fi
cd ${test_tmpdir}/osdata
rm boot/*
echo "new: a kernel" > boot/vmlinuz-3.6.0
echo "new: an initramfs" > boot/initramfs-3.6.0
echo "new: a kernel ${boot_checksum_iteration}" > boot/vmlinuz-3.6.0
echo "new: an initramfs ${boot_checksum_iteration}" > boot/initramfs-3.6.0
bootcsum=$(cat boot/vmlinuz-3.6.0 boot/initramfs-3.6.0 | sha256sum | cut -f 1 -d ' ')
export bootcsum
mv boot/vmlinuz-3.6.0 boot/vmlinuz-3.6.0-${bootcsum}
+8 -4
View File
@@ -39,20 +39,24 @@ assert_has_dir sysroot/boot/ostree/testos-${bootcsum}
echo "ok deploy command"
# Commit + upgrade twice, so that we'll rotate out the original deployment
orig_bootcsum=${bootcsum}
bootcsum1=${bootcsum}
os_repository_new_commit
ostree --repo=sysroot/ostree/repo remote add testos file://$(pwd)/testos-repo testos/buildmaster/x86_64-runtime
ostree admin --sysroot=sysroot upgrade --os=testos
os_repository_new_commit
bootcsum2=${bootcsum}
os_repository_new_commit "1"
bootcsum3=${bootcsum}
ostree --repo=sysroot/ostree/repo remote add testos file://$(pwd)/testos-repo testos/buildmaster/x86_64-runtime
ostree admin --sysroot=sysroot upgrade --os=testos
rev=${newrev}
newrev=$(ostree --repo=sysroot/ostree/repo rev-parse testos/buildmaster/x86_64-runtime)
assert_not_streq ${rev} ${newrev}
assert_not_streq ${orig_bootcsum} ${bootcsum}
assert_not_has_dir sysroot/boot/ostree/testos-${orig_bootcsum}
assert_not_streq ${bootcsum1} ${bootcsum2}
assert_not_streq ${bootcsum2} ${bootcsum3}
assert_not_has_dir sysroot/boot/ostree/testos-${bootcsum1}
assert_has_dir sysroot/boot/ostree/testos-${bootcsum}
assert_has_dir sysroot/boot/ostree/testos-${bootcsum2}
assert_file_has_content sysroot/ostree/deploy/testos/deploy/${newrev}.0/etc/os-release 'NAME=TestOS'
echo "ok deploy and GC /boot"