10755592ea
This is the rpm-ostree equivalent of `dnf history`. As opposed to the history of the refspec (i.e. `ostree log`), this shows the history of the system, i.e. the refspecs the host deployed, checksums, versions, layered packages, etc... The amount of details remembered is similar to what shows up in `status`. There's definitely some further enhancements possible (e.g. printing package diffs, displaying rollbacks), though this seems in good enough shape as a first cut. Closes: #1489 Closes: #1813 Approved by: cgwalters
115 lines
4.0 KiB
Bash
Executable File
115 lines
4.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2019 Jonathan Lebon <jonathan@jlebon.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
|
|
|
|
# Simple e2e test for history; note there are many more extensive corner-case
|
|
# style unit tests in history.rs.
|
|
|
|
# XXX: hack around the latest ostree in f29 not having
|
|
# https://github.com/ostreedev/ostree/pull/1842
|
|
vm_rpmostree initramfs --enable
|
|
|
|
vm_build_rpm foo
|
|
vm_rpmostree install foo
|
|
vm_reboot
|
|
echo "ok setup"
|
|
|
|
vm_rpmostree ex history > out.txt
|
|
assert_file_has_content out.txt "CreateCommand: install foo"
|
|
assert_file_has_content out.txt "LayeredPackages: foo"
|
|
vm_rpmostree ex history --json | jq . --slurp > out.json
|
|
assert_jq out.json \
|
|
'.[0]["deployment-create-command-line"] == "install foo"' \
|
|
'.[0]["deployment-create-timestamp"] != null' \
|
|
'.[0]["deployment"]["packages"][0] == "foo"' \
|
|
'.[0]["first-boot-timestamp"] != null' \
|
|
'.[0]["last-boot-timestamp"] != null' \
|
|
'.[0]["boot-count"] == 1'
|
|
echo "ok install first boot"
|
|
|
|
vm_reboot
|
|
|
|
vm_rpmostree ex history > out.txt
|
|
assert_file_has_content out.txt "BootCount: 2"
|
|
vm_rpmostree ex history --json | jq . --slurp > out.json
|
|
assert_jq out.json \
|
|
'.[0]["deployment-create-command-line"] == "install foo"' \
|
|
'.[0]["deployment-create-timestamp"] != null' \
|
|
'.[0]["deployment"]["packages"][0] == "foo"' \
|
|
'.[0]["first-boot-timestamp"] != null' \
|
|
'.[0]["last-boot-timestamp"] != null' \
|
|
'.[0]["boot-count"] == 2'
|
|
echo "ok install second boot"
|
|
|
|
vm_rpmostree uninstall foo
|
|
vm_reboot
|
|
|
|
vm_rpmostree ex history > out.txt
|
|
assert_file_has_content out.txt "CreateCommand: uninstall foo"
|
|
vm_rpmostree ex history --json | jq . --slurp > out.json
|
|
assert_jq out.json \
|
|
'.[0]["deployment-create-command-line"] == "uninstall foo"' \
|
|
'.[0]["deployment-create-timestamp"] != null' \
|
|
'.[0]["first-boot-timestamp"] != null' \
|
|
'.[0]["last-boot-timestamp"] != null' \
|
|
'.[0]["boot-count"] == 1'
|
|
assert_jq out.json \
|
|
'.[1]["deployment-create-command-line"] == "install foo"' \
|
|
'.[1]["deployment-create-timestamp"] != null' \
|
|
'.[1]["deployment"]["packages"][0] == "foo"' \
|
|
'.[1]["first-boot-timestamp"] != null' \
|
|
'.[1]["last-boot-timestamp"] != null' \
|
|
'.[1]["boot-count"] == 2'
|
|
echo "ok uninstall"
|
|
|
|
# and check history pruning since that's one bit we can't really test from the
|
|
# unit tests
|
|
|
|
vm_cmd find /var/lib/rpm-ostree/history | xargs -n 1 basename | sort -g > entries.txt
|
|
if [ ! $(wc -l entries.txt) -gt 1 ]; then
|
|
assert_not_reached "Expected more than 1 entry, got $(cat entries.txt)"
|
|
fi
|
|
|
|
# get the most recent entry
|
|
entry=$(tail -n 1 entries.txt)
|
|
# And now nuke all the journal entries except the latest, but we don't want to
|
|
# actually lose everything since e.g. some of the previous vmcheck tests that
|
|
# ran on this machine may have failed and we would've rendered the journal
|
|
# useless for debugging. So hack around that... yeah, would be cleaner if we
|
|
# could just spawn individual VMs per test.
|
|
vm_cmd systemctl stop systemd-journald.service
|
|
vm_cmd cp -r /var/log/journal{,.bak}
|
|
vm_cmd journalctl --vacuum-time=$((entry - 1))s
|
|
vm_rpmostree cleanup -b
|
|
vm_cmd systemctl stop systemd-journald.service
|
|
vm_cmd rm -rf /var/log/journal
|
|
vm_cmd mv /var/log/journal{.bak,}
|
|
|
|
vm_cmd ls -l /var/lib/rpm-ostree/history > entries.txt
|
|
if [ $(wc -l entries.txt) != 1 ]; then
|
|
assert_not_reached "Expected only 1 entry, got $(cat entries.txt)"
|
|
fi
|
|
echo "ok prune"
|