ostree-sysroot-deploy: check if deployments are in the same stateroot.
authorJoseph Marrero Corchado <jmarrero@redhat.com>
Tue, 30 Apr 2024 15:51:48 +0000 (11:51 -0400)
committerJoseph Marrero Corchado <jmarrero@redhat.com>
Fri, 3 May 2024 23:57:31 +0000 (19:57 -0400)
Makefile-tests.am
src/libostree/ostree-sysroot-deploy.c
tests/test-admin-stateroot.sh [new file with mode: 0755]

index c6f9420eeed1c4f6bf65e321dd774e44f6d22931..d333b9a3c1b5bcadb01f105e2c806dc3bff61633 100644 (file)
@@ -125,6 +125,7 @@ _installed_or_uninstalled_test_scripts = \
        tests/test-admin-locking.sh \
        tests/test-admin-deploy-clean.sh \
        tests/test-admin-kargs.sh \
+        tests/test-admin-stateroot.sh \
        tests/test-reset-nonlinear.sh \
        tests/test-oldstyle-partial.sh \
        tests/test-delta.sh \
index f777b92f0d70db2dc32d9c7bcb1cfd111cda0670..8ee44761afe6349b7543d5697b512869bd3efaa2 100644 (file)
@@ -2383,6 +2383,12 @@ deployment_bootconfigs_equal (OstreeRepo *repo, OstreeDeployment *a, OstreeDeplo
   if (g_strcmp0 (a_version, b_version) != 0)
     return FALSE;
 
+  /* same stateroot? */
+  const char *a_stateroot = ostree_deployment_get_osname (a);
+  const char *b_stateroot = ostree_deployment_get_osname (b);
+  if (g_strcmp0 (a_stateroot, b_stateroot) != 0)
+    return FALSE;
+
   return TRUE;
 }
 
diff --git a/tests/test-admin-stateroot.sh b/tests/test-admin-stateroot.sh
new file mode 100755 (executable)
index 0000000..ee746fc
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Copyright (C) 2011 Colin Walters <walters@verbum.org>
+# Copyright (C) 2022 Huijing Hei <hhei@redhat.com>
+#
+# SPDX-License-Identifier: LGPL-2.0+
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see <https://www.gnu.org/licenses/>.
+
+set -euo pipefail
+
+. $(dirname $0)/libtest.sh
+
+# Exports OSTREE_SYSROOT so --sysroot not needed.
+setup_os_repository "archive" "syslinux"
+
+echo "1..2"
+
+# Initial deployment on testos stateroot
+${CMD_PREFIX} ostree --repo=sysroot/ostree/repo pull-local --remote=testos testos-repo testos/buildmain/x86_64-runtime
+${CMD_PREFIX} ostree admin deploy --os=testos testos:testos/buildmain/x86_64-runtime
+
+REF=$(${CMD_PREFIX} ostree admin status | grep -oE 'testos .*\.0' | sed -e 's/^testos //' -e 's/\.0$//')
+
+# Should prompt bootloader update as it does have a different stateroot
+${CMD_PREFIX} ostree admin stateroot-init testos2
+${CMD_PREFIX} ostree admin deploy ${REF} --os=testos2
+${CMD_PREFIX} ostree admin set-default 1 >out.txt
+
+assert_file_has_content out.txt 'bootconfig swap: yes'
+echo "ok stateroot new-deployment"
+
+# Should not prompt update to bootloader as stateroot/commit and kargs are all the same.
+${CMD_PREFIX} ostree admin deploy ${REF} --os=testos2
+${CMD_PREFIX} ostree admin deploy ${REF} --os=testos2
+${CMD_PREFIX} ostree admin set-default 1 >out.txt
+
+assert_file_has_content out.txt 'bootconfig swap: no'
+echo "ok stateroot equal-deployment"