rpm-ostree/tests/vmcheck/test-layering-basic-2.sh
Colin Walters 1dee43319c Use indicatif for progress
This turned out to be messier than I thought, because of two primary
factors; the biggest mess here of course is the indirection
through the DBus API.

The other problem is that previously we passed the string to render
each time, and with current indicatif that'd trigger a rerender.
Since (usually) don't change the "prefix string", rework the API.

Change the "percent/n_items" bits to use autocleanups as well, and
to take the prefix string as an initial argument.

Since the state expands to multiple components, also change the
API to use the `0-initialized` pattern rather than trying to
return an aggregate.

We also gain a "sub message" which we use to display e.g.
package names as we're doing checkouts.  Note this ends up
at the end, since otherwise everything else jumps around.

Closes: #1661
Approved by: rfairley
2018-11-09 13:59:43 +00:00

146 lines
5.8 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (C) 2018 Red Hat, Inc.
#
# 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
# install foo and make sure it was imported
vm_build_rpm foo
vm_rpmostree install foo | tee output.txt
assert_file_has_content output.txt '^Importing\.\.\.done'
# also check that we definitely had to checkout the tree
assert_file_has_content output.txt "Checking out tree "
# upgrade with same foo in repos --> shouldn't re-import
vm_cmd ostree commit -b vmcheck --tree=ref=vmcheck
vm_rpmostree upgrade | tee output.txt
assert_not_file_has_content output.txt '^Importing\.\.\.'
echo "ok reuse cached pkg"
# upgrade with different foo in repos --> should re-import
c1=$(sha256sum ${test_tmpdir}/yumrepo/packages/x86_64/foo-1.0-1.x86_64.rpm)
vm_build_rpm foo
c2=$(sha256sum ${test_tmpdir}/yumrepo/packages/x86_64/foo-1.0-1.x86_64.rpm)
if cmp -s c1 c2; then
assert_not_reached "RPM rebuild yielded same SHA256"
fi
vm_rpmostree upgrade | tee output.txt
assert_file_has_content output.txt '^Importing\.\.\.done'
echo "ok invalidate pkgcache from RPM chksum"
# make sure installing in /boot translates to /usr/lib/ostree-boot
efidir=/boot/EFI/efi/fedora
vm_build_rpm test-boot \
files "${efidir}/*" \
install "mkdir -p %{buildroot}/${efidir}/fonts && echo grubenv > %{buildroot}/${efidir}/grubenv && echo unicode > %{buildroot}/${efidir}/fonts/unicode.pf2"
vm_rpmostree install test-boot
vm_reboot
vm_cmd cat /usr/lib/ostree-boot/EFI/efi/fedora/grubenv > grubenv.txt
assert_file_has_content grubenv.txt grubenv
vm_cmd cat /usr/lib/ostree-boot/EFI/efi/fedora/fonts/unicode.pf2 > unicode.txt
assert_file_has_content unicode.txt unicode
echo "ok failed installed in /boot"
# there should be a couple of pkgs already installed from the tests up above,
# though let's add our own to be self-contained
vm_build_rpm test-pkgcache-migrate-pkg1
vm_build_rpm test-pkgcache-migrate-pkg2
vm_rpmostree install test-pkgcache-migrate-pkg{1,2}
# jury-rig a pkgcache of the olden days
OLD_PKGCACHE_DIR=/ostree/repo/extensions/rpmostree/pkgcache
vm_cmd test -L ${OLD_PKGCACHE_DIR}
vm_cmd rm ${OLD_PKGCACHE_DIR}
vm_cmd mkdir ${OLD_PKGCACHE_DIR}
vm_cmd ostree init --repo ${OLD_PKGCACHE_DIR} --mode=bare
vm_cmd ostree pull-local --repo ${OLD_PKGCACHE_DIR} /ostree/repo \
rpmostree/pkg/test-pkgcache-migrate-pkg{1,2}/1.0-1.x86__64
vm_cmd ostree commit -b vmcheck --tree=ref=vmcheck
cursor=$(vm_get_journal_cursor)
vm_rpmostree upgrade | tee output.txt
vm_wait_content_after_cursor $cursor 'migrated 2 cached packages'
assert_file_has_content output.txt "Migrating pkgcache"
for ref in rpmostree/pkg/test-pkgcache-migrate-pkg{1,2}/1.0-1.x86__64; do
vm_cmd ostree show $ref
done
vm_cmd test -L ${OLD_PKGCACHE_DIR}
echo "ok migrate pkgcache"
vm_cmd ostree show --print-metadata-key rpmostree.rpmdb.pkglist \
$(vm_get_deployment_info 0 checksum) > pkglist.txt
assert_file_has_content pkglist.txt 'test-pkgcache-migrate-pkg'
echo "ok layered pkglist"
# remove accumulated crud from previous tests
vm_rpmostree uninstall --all
vm_reboot
if vm_rpmostree install glibc &>out.txt; then
assert_not_reached "Successfully requested glibc without --allow-inactive?"
fi
assert_file_has_content out.txt "Use --allow-inactive to explicitly require it."
vm_rpmostree cleanup -p
vm_rpmostree install glibc --allow-inactive &>out.txt
# if we have a base rpmdb, then we should be able to figure out it's inactive
# without checking out the tree -- this conditional is needed because of CentOS
if vm_cmd test -d /usr/lib/sysimage/rpm-ostree-base-db; then
assert_not_file_has_content out.txt "Checking out tree "
fi
vm_rpmostree cleanup -p
echo "ok --allow-inactive"
vm_rpmostree uninstall --all |& tee out.txt
assert_file_has_content out.txt "No change."
vm_build_rpm test-uninstall-all-pkg1
vm_build_rpm test-uninstall-all-pkg2
vm_build_rpm test-uninstall-all-pkg3
# do one from repo and one local for funsies
vm_rpmostree install test-uninstall-all-pkg1 \
/var/tmp/vmcheck/yumrepo/packages/x86_64/test-uninstall-all-pkg2-1.0-1.x86_64.rpm
vm_assert_status_jq \
'.deployments[0]["packages"]|length == 1' \
'.deployments[0]["requested-packages"]|length == 1' \
'.deployments[0]["requested-local-packages"]|length == 1'
vm_rpmostree uninstall --all |& tee out.txt
assert_not_file_has_content out.txt "No change."
vm_assert_status_jq \
'.deployments[0]["packages"]|length == 0' \
'.deployments[0]["requested-packages"]|length == 0' \
'.deployments[0]["requested-local-packages"]|length == 0'
vm_rpmostree cleanup -p
echo "ok uninstall --all"
vm_rpmostree install test-uninstall-all-pkg1
vm_assert_status_jq \
'.deployments[0]["packages"]|length == 1' \
'.deployments[0]["packages"]|index("test-uninstall-all-pkg1") >= 0' \
'.deployments[0]["requested-packages"]|length == 1' \
'.deployments[0]["requested-local-packages"]|length == 0'
vm_rpmostree uninstall --all --install test-uninstall-all-pkg3
vm_assert_status_jq \
'.deployments[0]["packages"]|length == 1' \
'.deployments[0]["packages"]|index("test-uninstall-all-pkg3") >= 0' \
'.deployments[0]["requested-packages"]|length == 1' \
'.deployments[0]["requested-local-packages"]|length == 0'
echo "ok uninstall --all --install <pkg>"