Tests: test-no-initramfs: Test both legacy and new kernel locations
authorWilliam Manley <will@williammanley.net>
Tue, 7 Mar 2017 12:57:26 +0000 (12:57 +0000)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 10 Jan 2018 13:52:58 +0000 (13:52 +0000)
Closes: #1401
Approved by: cgwalters

tests/test-no-initramfs.sh

index dcd21ee1c8c4999531b2dee85f354ebf67ff457e..7c23a3e7545c12b283270a65523fb8f7d1894139 100755 (executable)
@@ -2,7 +2,7 @@
 
 . $(dirname $0)/libtest.sh
 
-echo "1..3"
+echo "1..7"
 
 setup_os_repository "archive-z2" "uboot"
 
@@ -17,36 +17,62 @@ assert_not_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'in
 
 echo "ok deployment with initramfs"
 
-cd ${test_tmpdir}/osdata/boot
-rm -f initramfs* vmlinuz*
-echo "the kernel only" > vmlinuz-3.6.0
-bootcsum=$(cat vmlinuz-3.6.0 | sha256sum | cut -f 1 -d ' ')
-mv vmlinuz-3.6.0 vmlinuz-3.6.0-${bootcsum}
-cd -
-${CMD_PREFIX} ostree --repo=${test_tmpdir}/testos-repo commit --tree=dir=osdata/ -b testos/buildmaster/x86_64-runtime
-${CMD_PREFIX} ostree pull testos:testos/buildmaster/x86_64-runtime
-${CMD_PREFIX} ostree admin deploy --os=testos --karg=root=/dev/sda2 --karg=rootwait testos:testos/buildmaster/x86_64-runtime
-assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'rootwait'
-assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'init='
-assert_not_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'initrd'
-
-echo "ok switching to bootdir with no initramfs"
-
-cd ${test_tmpdir}/osdata/boot
-rm -f initramfs* vmlinuz*
-echo "the kernel" > vmlinuz-3.6.0
-echo "initramfs to assist the kernel" > initramfs-3.6.0
-bootcsum=$(cat vmlinuz-3.6.0 initramfs-3.6.0 | sha256sum | cut -f 1 -d ' ')
-mv vmlinuz-3.6.0 vmlinuz-3.6.0-${bootcsum}
-mv initramfs-3.6.0 initramfs-3.6.0-${bootcsum}
-cd -
-${CMD_PREFIX} ostree --repo=${test_tmpdir}/testos-repo commit --tree=dir=osdata/ -b testos/buildmaster/x86_64-runtime
-${CMD_PREFIX} ostree pull testos:testos/buildmaster/x86_64-runtime
-${CMD_PREFIX} ostree admin deploy --os=testos --karg-none --karg=root=LABEL=rootfs testos:testos/buildmaster/x86_64-runtime
-assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'initrd'
-assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'root=LABEL=rootfs'
-assert_not_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'rootwait'
-assert_not_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'init='
+pull_test_tree() {
+    kernel_contents=$1
+    initramfs_contents=$2
+
+    printf "TEST SETUP:\n    kernel: %s\n    initramfs: %s\n    layout: %s\n" \
+        "$kernel_contents" "$initramfs_contents" "$layout"
+
+    rm -rf ${test_tmpdir}/osdata/usr/lib/modules/3.6.0/{initramfs.img,vmlinuz} \
+           ${test_tmpdir}/osdata/usr/lib/ostree-boot \
+           ${test_tmpdir}/osdata/boot
+    if [ "$layout" = "/usr/lib/modules" ]; then
+        # Fedora compatible layout
+        cd ${test_tmpdir}/osdata/usr/lib/modules/3.6.0
+        echo -n "$kernel_contents" > vmlinuz
+        [ -n "$initramfs_contents" ] && echo -n "$initramfs_contents" > initramfs.img
+    elif [ "$layout" = "/usr/lib/ostree-boot" ] || [ "$layout" = "/boot" ]; then
+        # "Legacy" layout
+        mkdir -p "${test_tmpdir}/osdata/$layout"
+        cd "${test_tmpdir}/osdata/$layout"
+        bootcsum=$(echo -n "$kernel_contents$initramfs_contents" \
+                   | sha256sum | cut -f 1 -d ' ')
+        echo -n "$kernel_contents" > vmlinuz-${bootcsum}
+        [ -n "$initramfs_contents" ] && echo -n "$initramfs_contents" > initramfs-${bootcsum}
+    else
+        exit 1
+    fi
+    cd -
+    ${CMD_PREFIX} ostree --repo=${test_tmpdir}/testos-repo commit --tree=dir=osdata/ -b testos/buildmaster/x86_64-runtime
+    ${CMD_PREFIX} ostree pull testos:testos/buildmaster/x86_64-runtime
+}
+
+get_key_from_bootloader_conf() {
+    conffile=$1
+    key=$2
+
+    assert_file_has_content "$conffile" "^$key"
+    awk "/^$key/ { print \$2 }" "$conffile"
+}
+
+for layout in /usr/lib/modules /usr/lib/ostree-boot /boot;
+do
+    pull_test_tree "the kernel only"
+    ${CMD_PREFIX} ostree admin deploy --os=testos --karg=root=/dev/sda2 --karg=rootwait testos:testos/buildmaster/x86_64-runtime
+    assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'rootwait'
+    assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'init='
+    assert_not_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'initrd'
+
+    echo "ok switching to bootdir with no initramfs layout=$layout"
 
-echo "ok switching from no initramfs to initramfs enabled sysroot"
+    pull_test_tree "the kernel" "initramfs to assist the kernel"
+    ${CMD_PREFIX} ostree admin deploy --os=testos --karg-none --karg=root=LABEL=rootfs testos:testos/buildmaster/x86_64-runtime
+    assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'initrd'
+    assert_file_has_content sysroot/boot/$(get_key_from_bootloader_conf sysroot/boot/loader/entries/ostree-testos-0.conf "initrd") "initramfs to assist the kernel"
+    assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'root=LABEL=rootfs'
+    assert_not_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'rootwait'
+    assert_not_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'init='
 
+    echo "ok switching from no initramfs to initramfs enabled sysroot layout=$layout"
+done