dc24dd3105
The new API to find pending and rollback deployments do so relative to
the booted deployment. This caused an interesting behaviour: the first
time a user uses "rpm-ostree rollback", it would (as expected) move the
previous deployment first. but the second call to "rpm-ostree rollback"
would fail since there were now no more rollback deployments.
We fine tune the logic here to allow this, as well as the more general
case of putting the booted deployment back on top.
This fixes a subtle regression from b7cf58e
(https://github.com/projectatomic/rpm-ostree/pull/767).
Closes: https://github.com/projectatomic/rpm-ostree/issues/906
Closes: #907
Approved by: cgwalters
86 lines
3.2 KiB
Bash
Executable File
86 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2017 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 -e
|
|
|
|
. ${commondir}/libtest.sh
|
|
. ${commondir}/libvm.sh
|
|
|
|
set -x
|
|
|
|
# make sure that package-related entries are always present,
|
|
# even when they're empty
|
|
vm_assert_status_jq \
|
|
'.deployments[0]["packages"]' \
|
|
'.deployments[0]["requested-packages"]' \
|
|
'.deployments[0]["requested-local-packages"]' \
|
|
'.deployments[0]["base-removals"]' \
|
|
'.deployments[0]["requested-base-removals"]'
|
|
echo "ok empty pkg arrays in status json"
|
|
|
|
# Be sure an unprivileged user exists and that we can SSH into it. This is a bit
|
|
# underhanded, but we need a bona fide user session to verify non-priv status,
|
|
# and logging in through SSH is an easy way to achieve that.
|
|
if ! vm_cmd getent passwd testuser; then
|
|
vm_cmd useradd testuser
|
|
vm_cmd mkdir -pm 0700 /home/testuser/.ssh
|
|
vm_cmd cp -a /root/.ssh/authorized_keys /home/testuser/.ssh
|
|
vm_cmd chown -R testuser:testuser /home/testuser/.ssh
|
|
fi
|
|
|
|
# Make sure we can't layer as non-root
|
|
vm_build_rpm foo
|
|
if vm_cmd_as testuser rpm-ostree pkg-add foo &> err.txt; then
|
|
assert_not_reached "Was able to install a package as non-root!"
|
|
fi
|
|
assert_file_has_content err.txt 'PkgChange not allowed for user'
|
|
echo "ok layering requires root or auth"
|
|
|
|
# Assert that we can do status as non-root
|
|
vm_cmd_as testuser rpm-ostree status
|
|
echo "ok status doesn't require root"
|
|
|
|
# Also check that we can do status as non-root non-active
|
|
vm_cmd runuser -u bin rpm-ostree status
|
|
echo "ok status doesn't require active PAM session"
|
|
|
|
# Add metadata string containing EnfOfLife attribtue
|
|
META_ENDOFLIFE_MESSAGE="this is a test for metadata message"
|
|
commit=$(vm_cmd ostree commit -b vmcheck \
|
|
--tree=ref=vmcheck --add-metadata-string=ostree.endoflife=\"${META_ENDOFLIFE_MESSAGE}\")
|
|
vm_rpmostree upgrade
|
|
vm_assert_status_jq ".deployments[0][\"endoflife\"] == \"${META_ENDOFLIFE_MESSAGE}\""
|
|
echo "ok endoflife metadata gets parsed correctly"
|
|
|
|
# Build a layered commit and check if EndOfLife still present
|
|
vm_build_rpm foo
|
|
vm_rpmostree install foo
|
|
vm_assert_status_jq ".deployments[0][\"endoflife\"] == \"${META_ENDOFLIFE_MESSAGE}\""
|
|
echo "ok layered commit inherits the endoflife attribute"
|
|
|
|
vm_assert_status_jq ".deployments[0][\"booted\"] == false" \
|
|
".deployments[1][\"booted\"] == true"
|
|
vm_rpmostree rollback
|
|
vm_assert_status_jq ".deployments[0][\"booted\"] == true" \
|
|
".deployments[1][\"booted\"] == false"
|
|
vm_rpmostree rollback
|
|
vm_assert_status_jq ".deployments[0][\"booted\"] == false" \
|
|
".deployments[1][\"booted\"] == true"
|
|
echo "ok rollback"
|