2017-06-05 19:38:39 +03:00
#!/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.
2017-10-01 16:34:23 +03:00
set -euo pipefail
2017-06-05 19:38:39 +03:00
. ${ 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"]' \
2017-06-20 19:21:57 +03:00
'.deployments[0]["base-removals"]' \
2017-10-23 22:05:19 +03:00
'.deployments[0]["requested-base-removals"]' \
2017-10-19 22:31:50 +03:00
'.deployments[0]["base-commit-meta"]["ostree.source-title"]|contains("overlay")' \
2017-10-23 22:05:19 +03:00
'.deployments[0]["layered-commit-meta"]|not'
echo "ok empty pkg arrays, and commit meta correct in status json"
2017-06-05 19:38:39 +03:00
2017-12-20 23:50:46 +03:00
vm_rpmostree status --jsonpath '$.deployments[0].booted' > jsonpath.txt
assert_file_has_content_literal jsonpath.txt '[true]'
echo "ok jsonpath"
2017-07-27 17:16:23 +03:00
# 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
2017-06-05 19:38:39 +03:00
2017-09-07 17:20:33 +03:00
# Make sure we can't do various operations as non-root
2017-07-27 07:08:23 +03:00
vm_build_rpm foo
2017-07-27 17:16:23 +03:00
if vm_cmd_as testuser rpm-ostree pkg-add foo & > err.txt; then
2017-06-05 19:38:39 +03:00
assert_not_reached "Was able to install a package as non-root!"
fi
2017-07-27 07:08:23 +03:00
assert_file_has_content err.txt 'PkgChange not allowed for user'
2017-09-07 17:20:33 +03:00
if vm_cmd_as testuser rpm-ostree reload & > err.txt; then
assert_not_reached "Was able to reload as non-root!"
fi
assert_file_has_content err.txt 'ReloadConfig not allowed for user'
echo "ok auth"
2017-06-05 19:38:39 +03:00
# Assert that we can do status as non-root
2017-07-27 17:16:23 +03:00
vm_cmd_as testuser rpm-ostree status
2017-06-05 19:38:39 +03:00
echo "ok status doesn't require root"
2017-07-27 23:13:43 +03:00
# 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"
2017-07-26 00:49:10 +03:00
2017-09-07 17:20:33 +03:00
# Reload as root https://github.com/projectatomic/rpm-ostree/issues/976
vm_cmd rpm-ostree reload
echo "ok reload"
2017-07-26 00:49:10 +03:00
# 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"
2017-08-03 16:41:18 +03:00
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"
2017-08-21 22:30:42 +03:00
2018-02-17 01:27:42 +03:00
vm_rpmostree status -b > status.txt
assert_streq $( grep -F -e 'ostree://' status.txt | wc -l) "1"
echo "ok status -b"
2017-08-21 22:30:42 +03:00
# https://github.com/ostreedev/ostree/pull/1055
vm_cmd ostree commit -b vmcheck --tree= ref = vmcheck --timestamp= \" October 25 1985\"
if vm_rpmostree upgrade 2>err.txt; then
fatal "upgraded to older commit?"
fi
assert_file_has_content err.txt "chronologically older"
echo "ok failed to upgrade to older commit"
2017-09-06 19:19:55 +03:00
# https://github.com/projectatomic/rpm-ostree/issues/365
2017-09-13 23:33:47 +03:00
vm_build_rpm base-package \
2017-09-06 19:19:55 +03:00
files /usr/app \
install " mkdir -p %{buildroot}/usr/app
echo one > %{ buildroot} /usr/app/conflict-file"
2017-09-13 23:33:47 +03:00
vm_rpmostree install base-package
2017-09-06 19:19:55 +03:00
2017-09-13 23:33:47 +03:00
# build a file having exact same content and check for merging
vm_build_rpm test-merging \
files /usr/app \
install " mkdir -p %{buildroot}/usr/app
echo one > %{ buildroot} /usr/app/conflict-file"
vm_rpmostree install test-merging
echo "ok identical file merges"
# have a file with same file path but different content, testing for conflicts
2017-09-06 19:19:55 +03:00
vm_build_rpm conflict-pkg \
files /usr/app \
install " mkdir -p %{buildroot}/usr/app
echo two > %{ buildroot} /usr/app/conflict-file"
if vm_rpmostree install conflict-pkg 2>err.txt; then
assert_not_reached "Install packages with conflicting files unexpected succeeded"
fi
assert_not_file_has_content err.txt "Writing rpmdb"
assert_file_has_content err.txt "File exists"
echo "ok detecting file name conflicts before writing rpmdb"
2017-09-11 23:00:40 +03:00
# check that the way we detect deployment changes is not dependent on pending-*
# https://github.com/projectatomic/rpm-ostree/issues/981
vm_rpmostree cleanup -rp
csum = $( vm_cmd ostree commit -b vmcheck --tree= ref = vmcheck)
# restart to make daemon see the pending checksum
vm_cmd systemctl restart rpm-ostreed
vm_assert_status_jq '.deployments[0]["pending-base-checksum"]'
# hard reset to booted csum (simulates what deploy does to remote refspecs)
vm_cmd ostree reset vmcheck $( vm_get_booted_csum)
rc = 0
vm_rpmostree deploy $( vm_get_booted_csum) > out.txt || rc = $?
if [ $rc != 77 ] ; then
assert_not_reached "trying to re-deploy same commit didn't exit 77"
fi
assert_file_has_content out.txt 'No change.'
vm_assert_status_jq '.deployments[0]["pending-base-checksum"]|not'
echo "ok changes to deployment variant don't affect deploy"
2017-09-20 23:26:29 +03:00
vm_build_rpm bad-post post "echo a bad post >&2 && false"
cursor = $( vm_get_journal_cursor)
if vm_rpmostree install bad-post & > err.txt; then
assert_not_reached "installing pkg with failing post unexpectedly succeeded"
fi
assert_file_has_content err.txt "run.*journalctl.*for more information"
vm_assert_journal_has_content $cursor 'rpm-ostree(bad-post.post).*a bad post'
echo "ok script output prefixed in journal"
2017-10-05 22:33:40 +03:00
# check refresh-md/-C functionality
# local repos are always cached, so let's start up an http server for the same
# vmcheck repo
2017-10-13 16:20:10 +03:00
vm_start_httpd vmcheck /tmp 8888
cat > vmcheck-http.repo << EOF
2017-10-05 22:33:40 +03:00
[ vmcheck-http]
name = vmcheck-http
baseurl = http://localhost:8888/vmcheck/yumrepo
gpgcheck = 0
EOF
2017-10-13 16:20:10 +03:00
vm_send /etc/yum.repos.d vmcheck-http.repo
2017-10-05 22:33:40 +03:00
vm_rpmostree cleanup -rpmb
vm_cmd rm -f /etc/yum.repos.d/vmcheck.repo
vm_build_rpm_repo_mode skip refresh-md-old-pkg
vm_rpmostree refresh-md
vm_build_rpm_repo_mode skip refresh-md-new-pkg
vm_rpmostree refresh-md # shouldn't do anything since it hasn't expired yet
2017-10-13 16:22:15 +03:00
if vm_rpmostree install refresh-md-new-pkg --dry-run; then
2017-10-05 22:33:40 +03:00
assert_not_reached "successfully dry-run installed new pkg from cached rpmmd?"
fi
vm_rpmostree refresh-md -f
2017-10-13 16:22:15 +03:00
if ! vm_rpmostree install refresh-md-new-pkg --dry-run; then
2017-10-05 22:33:40 +03:00
assert_not_reached "failed to dry-run install new pkg from cached rpmmd?"
fi
2017-10-13 16:20:10 +03:00
vm_stop_httpd vmcheck
2017-10-13 16:22:15 +03:00
echo "ok refresh-md"
2018-02-06 22:44:48 +03:00
vm_rpmostree usroverlay
vm_cmd test -w /usr/bin
echo "ok usroverlay"