#!/bin/bash # # Copyright (C) 2017,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 # Miscellaneous basic tests; most are nondestructive # https://github.com/projectatomic/rpm-ostree/issues/1301 # FIXME: temporarily disabled as it really wants to start # from a fresh instance and we don't currently guarantee that. # # But we'll rework the test suite to do that soon like # https://github.com/ostreedev/ostree/pull/1462 # vm_cmd 'mv /etc/ostree/remotes.d{,.orig}' # vm_cmd systemctl restart rpm-ostreed # vm_cmd rpm-ostree status > status.txt # assert_file_has_content status.txt 'Remote.*not found' # vm_cmd 'mv /etc/ostree/remotes.d{.orig,}' # vm_rpmostree reload # echo "ok remote not found" # 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"]' \ '.deployments[0]["layered-commit-meta"]|not' echo "ok empty pkg arrays, and commit meta correct in status json" vm_rpmostree status --jsonpath '$.deployments[0].booted' > jsonpath.txt assert_file_has_content_literal jsonpath.txt 'true' echo "ok jsonpath" vm_rpmostree --version > version.yaml python3 -c 'import yaml; v=yaml.safe_load(open("version.yaml")); assert("Version" in v["rpm-ostree"])' echo "ok yaml version" # Ensure we return an error when passing a wrong option. vm_rpmostree --help | awk '/^$/ {in_commands=0} {if(in_commands==1){print $0}} /^Builtin Commands:/ {in_commands=1}' > commands while read command; do if vm_rpmostree $command --n0t-3xisting-0ption &>/dev/null; then assert_not_reached "command $command --n0t-3xisting-0ption was successful" fi done < commands echo "ok error on unknown command options" if vm_rpmostree nosuchcommand --nosuchoption 2>err.txt; then assert_not_reached "Expected an error for nosuchcommand" fi assert_file_has_content err.txt 'Unknown.*command' echo "ok error on unknown command" # Make sure we can't do various operations as non-root vm_build_rpm foo if vm_cmd_as core 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' if vm_cmd_as core 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" wrapdir="/usr/libexec/rpm-ostree/wrapped" if [ -d "${wrapdir}" ]; then # Test wrapped functions for rpm rpm --version rpm -qa > /dev/null rpm --verify >out.txt assert_file_has_content out.txt "rpm --verify is not necessary for ostree-based systems" rm -f out.txt if rpm -e bash 2>out.txt; then fatal "rpm -e worked" fi assert_file_has_content out.txt 'Dropping privileges as `rpm` was executed with not "known safe" arguments' if dracut --blah 2>out.txt; then fatal "dracut worked" fi assert_file_has_content out.txt 'This system is rpm-ostree based' rm -f out.txt else echo "Missing ${wrapdir}; cliwrap not enabled" fi # Test coreos-rootfs vm_shell_inline > coreos-rootfs.txt << EOF mkdir /var/tmp/coreos-rootfs rpm-ostree coreos-rootfs seal /var/tmp/coreos-rootfs lsattr -d /var/tmp/coreos-rootfs rpm-ostree coreos-rootfs seal /var/tmp/coreos-rootfs EOF assert_file_has_content coreos-rootfs.txt '-*i-* /var/tmp/coreos-rootfs' # Reload as root https://github.com/projectatomic/rpm-ostree/issues/976 vm_cmd rpm-ostree reload echo "ok reload" stateroot=$(vm_get_booted_stateroot) ospath=/org/projectatomic/rpmostree1/${stateroot//-/_} # related: https://github.com/coreos/fedora-coreos-config/issues/194 vm_cmd env LANG=C.UTF-8 gdbus call \ --system --dest org.projectatomic.rpmostree1 \ --object-path /org/projectatomic/rpmostree1/fedora_coreos \ --method org.projectatomic.rpmostree1.OSExperimental.Moo true > moo.txt assert_file_has_content moo.txt '🐄' echo "ok moo" vm_rpmostree usroverlay vm_cmd test -w /usr/bin echo "ok usroverlay" vm_shell_inline_sysroot_rw <> \${originpath} rpm-ostree reload rpm-ostree status if rpm-ostree upgrade 2>err.txt; then echo "Upgraded from unconfigured-state" exit 1 fi grep -qFe 'ONE BILLION DOLLARS' err.txt mv \${originpath}{.orig,} rpm-ostree reload EOF echo "ok unconfigured status"