b324ee4807
Right now we only print a diff of the pending deployment if we have a cached update (which only happens if user just did an `upgrade` operation). But really, we can just always print this for the pending deployment regardless of whether there's a cached update calculated. This is prep for changing chained operations to only show the diff between the previous pending deployment to the new pending deployment. With this patch, the full diff from booted to pending will always be available through `status` (and `db diff` too though it's not as nice). Closes: #1760 Approved by: cgwalters
174 lines
5.3 KiB
Bash
Executable File
174 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2017 Jonathan Lebon <jlebon@redhat.com>
|
|
#
|
|
# 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, write to the
|
|
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
# Boston, MA 02111-1307, USA.
|
|
|
|
set -euo pipefail
|
|
|
|
. ${commondir}/libtest.sh
|
|
. ${commondir}/libvm.sh
|
|
|
|
set -x
|
|
|
|
# SUMMARY: check that `db` commands work correctly. Right now, we're only
|
|
# testing `db diff`.
|
|
|
|
YUMREPO=/var/tmp/vmcheck/yumrepo/packages/x86_64
|
|
|
|
check_diff() {
|
|
arg1=$1; shift
|
|
arg2=$1; shift
|
|
cmd="vm_rpmostree db diff --format=diff"
|
|
if [ -n "$arg1" ]; then
|
|
cmd="$cmd $arg1"
|
|
fi
|
|
if [ -n "$arg2" ]; then
|
|
cmd="$cmd $arg2"
|
|
fi
|
|
$cmd > diff.txt
|
|
assert_file_has_content diff.txt "$@"
|
|
}
|
|
|
|
check_not_diff() {
|
|
from=$1; shift
|
|
to=$1; shift
|
|
vm_rpmostree db diff --format=diff $from $to > diff.txt
|
|
assert_not_file_has_content diff.txt "$@"
|
|
}
|
|
|
|
vm_build_rpm pkg-to-remove
|
|
vm_build_rpm pkg-to-replace
|
|
vm_build_rpm pkg-to-replace-archtrans arch noarch
|
|
vm_rpmostree install pkg-to-remove pkg-to-replace pkg-to-replace-archtrans
|
|
|
|
# we should be able to see the diff in status now
|
|
vm_rpmostree status > status.txt
|
|
assert_file_has_content status.txt "Diff: 3 added"
|
|
vm_rpmostree status -v > statusv.txt
|
|
assert_file_has_content statusv.txt \
|
|
"Added:" \
|
|
"pkg-to-remove" \
|
|
"pkg-to-replace" \
|
|
"pkg-to-replace-archtrans"
|
|
echo "ok db diff in status"
|
|
|
|
booted_csum=$(vm_get_booted_csum)
|
|
pending_csum=$(vm_get_pending_csum)
|
|
check_diff $booted_csum $pending_csum \
|
|
+pkg-to-remove \
|
|
+pkg-to-replace \
|
|
+pkg-to-replace-archtrans
|
|
|
|
# check that it's the default behaviour without both args
|
|
check_diff "" "" \
|
|
+pkg-to-remove \
|
|
+pkg-to-replace \
|
|
+pkg-to-replace-archtrans
|
|
|
|
# check that it's the default behaviour without one arg
|
|
check_diff "$pending_csum" "" \
|
|
+pkg-to-remove \
|
|
+pkg-to-replace \
|
|
+pkg-to-replace-archtrans
|
|
|
|
# check that diff'ing with --base yields 0 diffs
|
|
check_not_diff "--base" "" pkg-to-
|
|
|
|
# now let's make the pending csum become an update
|
|
vm_ostree_commit_layered_as_base $pending_csum vmcheck
|
|
vm_rpmostree cleanup -p
|
|
vm_rpmostree upgrade
|
|
pending_csum=$(vm_get_pending_csum)
|
|
check_diff $booted_csum $pending_csum \
|
|
+pkg-to-remove \
|
|
+pkg-to-replace \
|
|
+pkg-to-replace-archtrans
|
|
echo "ok setup"
|
|
|
|
vm_rpmostree override remove pkg-to-remove
|
|
vm_build_rpm pkg-to-replace version 2.0
|
|
vm_build_rpm pkg-to-replace-archtrans version 2.0
|
|
vm_rpmostree override replace \
|
|
$YUMREPO/pkg-to-replace-2.0-1.x86_64.rpm \
|
|
$YUMREPO/pkg-to-replace-archtrans-2.0-1.x86_64.rpm
|
|
vm_build_rpm pkg-to-overlay build 'echo same > pkg-to-overlay'
|
|
# some multilib handling tests (override default /bin script to skip conflicts)
|
|
vm_build_rpm pkg-to-overlay build 'echo same > pkg-to-overlay' arch i686
|
|
vm_build_rpm glibc arch i686
|
|
vm_rpmostree install pkg-to-overlay.{x86_64,i686} glibc.i686
|
|
pending_layered_csum=$(vm_get_pending_csum)
|
|
check_diff $booted_csum $pending_layered_csum \
|
|
+pkg-to-overlay-1.0-1.x86_64 \
|
|
+pkg-to-overlay-1.0-1.i686 \
|
|
+glibc-1.0-1.i686 \
|
|
+pkg-to-replace-2.0 \
|
|
+pkg-to-replace-archtrans-2.0
|
|
# check that regular glibc is *not* in the list of modified/dropped packages
|
|
check_not_diff $booted_csum $pending_layered_csum \
|
|
=glibc \
|
|
!glibc \
|
|
-glibc \
|
|
=pkg-to-overlay \
|
|
!pkg-to-overlay \
|
|
-pkg-to-overlay
|
|
check_diff $pending_csum $pending_layered_csum \
|
|
+pkg-to-overlay-1.0-1.x86_64 \
|
|
+pkg-to-overlay-1.0-1.i686 \
|
|
+glibc-1.0-1.i686 \
|
|
-pkg-to-remove \
|
|
!pkg-to-replace-1.0 \
|
|
=pkg-to-replace-2.0 \
|
|
!pkg-to-replace-archtrans-1.0 \
|
|
=pkg-to-replace-archtrans-2.0
|
|
echo "ok db diff"
|
|
|
|
# this is a bit convoluted; basically, we prune the commit and only keep its
|
|
# metadata to check that `db diff` is indeed using the rpmdb.pkglist metadata
|
|
commit_path=$(get_obj_path /ostree/repo $pending_layered_csum commit)
|
|
vm_cmd test -f $commit_path
|
|
vm_cmd cp $commit_path $commit_path.bak
|
|
vm_rpmostree cleanup -p
|
|
vm_cmd test ! -f $commit_path
|
|
vm_cmd mv $commit_path.bak $commit_path
|
|
if vm_cmd ostree checkout --subpath /usr/share/rpm $pending_layered_csum; then
|
|
assert_not_reached "Was able to checkout /usr/share/rpm?"
|
|
fi
|
|
check_diff $pending_csum $pending_layered_csum \
|
|
+pkg-to-overlay-1.0-1.x86_64 \
|
|
+pkg-to-overlay-1.0-1.i686 \
|
|
+glibc-1.0-1.i686 \
|
|
-pkg-to-remove \
|
|
!pkg-to-replace-1.0 \
|
|
=pkg-to-replace-2.0 \
|
|
!pkg-to-replace-archtrans-1.0 \
|
|
=pkg-to-replace-archtrans-2.0
|
|
echo "ok db from pkglist.metadata"
|
|
|
|
# check that db list also works fine from pkglist.metadata
|
|
vm_rpmostree db list $pending_layered_csum > out.txt
|
|
assert_not_file_has_content out.txt \
|
|
pkg-to-remove \
|
|
pkg-to-replace-1.0 \
|
|
pkg-to-replace-archtrans-1.0
|
|
assert_file_has_content out.txt \
|
|
pkg-to-overlay-1.0-1.x86_64 \
|
|
pkg-to-overlay-1.0-1.i686 \
|
|
glibc-1.0-1.i686 \
|
|
pkg-to-replace-2.0 \
|
|
pkg-to-replace-archtrans-2.0
|
|
echo "ok list from pkglist.metadata"
|