From nobody Mon Feb 9 00:19:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 155340015987856.520115381005326; Sat, 23 Mar 2019 21:02:39 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 809C6307CDE3; Sun, 24 Mar 2019 04:02:38 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4776C600D4; Sun, 24 Mar 2019 04:02:38 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 10B563FAF5; Sun, 24 Mar 2019 04:02:38 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x2O42Dwu011000 for ; Sun, 24 Mar 2019 00:02:13 -0400 Received: by smtp.corp.redhat.com (Postfix) id AE3FA5C280; Sun, 24 Mar 2019 04:02:13 +0000 (UTC) Received: from blue.redhat.com (ovpn-116-59.phx2.redhat.com [10.3.116.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6A36F5C26D; Sun, 24 Mar 2019 04:02:11 +0000 (UTC) From: Eric Blake To: libvir-list@redhat.com Date: Sat, 23 Mar 2019 23:02:03 -0500 Message-Id: <20190324040203.24304-6-eblake@redhat.com> In-Reply-To: <20190324040203.24304-1-eblake@redhat.com> References: <20190324040203.24304-1-eblake@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Cc: mprivozn@redhat.com Subject: [libvirt] [PATCH 5/5] snapshot: Add tests of virsh -c test:///default snapshot* X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Sun, 24 Mar 2019 04:02:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Had this been in place earlier, I would have avoided the bugs in commit 0baf6945 and 55c2ab3e. Writing the test required me to extend the power of virsh - creating enough snapshots to cause fanout requires enough input in a single session that adding comments and markers makes it easier to check that output is correct. It's still a bit odd that with test:///default, reverting to a snapshot changes the domain from running to paused (possibly a bug in how the test driver copied from the qemu driver) - but the important part is that the test is reproducible, and any future tweaks we make to snapshot code have less chance of breaking successful command sequences. Signed-off-by: Eric Blake --- tests/Makefile.am | 3 +- tests/virsh-snapshot | 212 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 214 insertions(+), 1 deletion(-) create mode 100755 tests/virsh-snapshot diff --git a/tests/Makefile.am b/tests/Makefile.am index 29f1fe2d2a..d3cdbff8bb 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -## Copyright (C) 2005-2015 Red Hat, Inc. +## Copyright (C) 2005-2019 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 @@ -410,6 +410,7 @@ libvirtd_test_scripts =3D \ virsh-schedinfo \ virsh-self-test \ virt-admin-self-test \ + virsh-snapshot \ virsh-start \ virsh-undefine \ virsh-uriprecedence \ diff --git a/tests/virsh-snapshot b/tests/virsh-snapshot new file mode 100755 index 0000000000..3e6ff39f5f --- /dev/null +++ b/tests/virsh-snapshot @@ -0,0 +1,212 @@ +#!/bin/sh +# simple testing of snapshot APIs on test driver + +# Copyright (C) 2019 Red Hat, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. + +# This program 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 General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# . + +. "$(dirname $0)/test-lib.sh" + +if test "$VERBOSE" =3D yes; then + set -x + $abs_top_builddir/tools/virsh --version +fi + +fail=3D0 + +# The test driver loses states between restarts, so we perform a script +# with some convenient markers for later post-processing of output. +$abs_top_builddir/tools/virsh --connect test:///default >out 2>err ' + # Create a series of snapshots, with names that intentionally sort + # differently by topology than by name. Use revert to create fanout. + snapshot-create-as test s1 + snapshot-create-as test s3 + snapshot-create-as test s2 + snapshot-revert test s3 + snapshot-create-as test s6 + snapshot-create-as test s5 + snapshot-revert test s6 + snapshot-create-as test s4 + snapshot-revert test s1 + snapshot-create-as test s7 + snapshot-create-as test s8 + # Checking tree view (siblings sorted alphabetically) + snapshot-list test --tree + # Current was last one created, but we can change that + snapshot-current test --name + snapshot-current test s1 + snapshot-current test --name + # Deleting current root leads to multiple roots, demonstrate list filter= ing + snapshot-delete test --current + echo --err marker + snapshot-current test --name + echo --err marker + snapshot-list test --roots + snapshot-list test --leaves + snapshot-list test --parent --no-leaves + snapshot-list test --from s3 + snapshot-list test --from s3 --descendants --name + # More fun with delete flags, current node moves up to remaining parent + snapshot-current test s4 + snapshot-delete test --children-only s6 + snapshot-current test --name + snapshot-delete test --children s7 + snapshot-current test --name + snapshot-delete test s6 + snapshot-current test --name + # Now the tree is linear, so we have an unambiguous topological order + snapshot-list test --name + snapshot-list test --name --topological + # Capture some XML for later redefine + echo "" + snapshot-dumpxml test s3 + echo "" + snapshot-dumpxml test s2 + echo "" + # All done +' || fail=3D1 + +# First part is expected output, --tree results in trailing spaces, +# and --list produces timestamps +sed 's/ *$//; s/[0-9-]\{10\} [0-9:.]* .[0-9]\{4\}/TIMESTAMP/; + /MarkerA/,/MarkerC/d' < out > out.cooked || fail=3D1 +# Second part holds domain XMLs +sed -n '/MarkerA/,/MarkerB/p' < out > s3.xml || fail=3D1 +sed -n '/MarkerB/,/MarkerC/p' < out > s2.xml || fail=3D1 + +cat <<\EOF > exp || fail=3D1 +Domain snapshot s1 created +Domain snapshot s3 created +Domain snapshot s2 created + +Domain snapshot s6 created +Domain snapshot s5 created + +Domain snapshot s4 created + +Domain snapshot s7 created +Domain snapshot s8 created +s1 + | + +- s3 + | | + | +- s2 + | +- s6 + | | + | +- s4 + | +- s5 + | + +- s7 + | + +- s8 + + +s8 +Snapshot s1 set as current +s1 +Domain snapshot s1 deleted + + + + + Name Creation Time State +--------------------------------------------- + s3 TIMESTAMP running + s7 TIMESTAMP paused + + Name Creation Time State +--------------------------------------------- + s2 TIMESTAMP running + s4 TIMESTAMP paused + s5 TIMESTAMP paused + s8 TIMESTAMP paused + + Name Creation Time State Parent +------------------------------------------------------ + s3 TIMESTAMP running + s6 TIMESTAMP paused s3 + s7 TIMESTAMP paused + + Name Creation Time State +--------------------------------------------- + s2 TIMESTAMP running + s6 TIMESTAMP paused + +s2 +s4 +s5 +s6 + +Snapshot s4 set as current +Domain snapshot s6 children deleted + +s6 +Domain snapshot s7 deleted + +s6 +Domain snapshot s6 deleted + +s3 +s2 +s3 + +s3 +s2 + +EOF +compare exp out.cooked || fail=3D1 + +cat < exp || fail=3D1 +error: marker +error: domain 'test' has no current snapshot +error: marker +EOF +compare exp err || fail=3D1 + +# Restore state with redefine +$abs_top_builddir/tools/virsh -c test:///default >out 2>err < exp || fail=3D1 + + +Domain snapshot s3 created from 's3.xml' +Domain snapshot s2 created from 's2.xml' +Name: s2 +Domain: test +Current: yes +State: running +Location: internal +Parent: s3 +Children: 0 +Descendants: 0 +Metadata: yes + +EOF + +cat < exp || fail=3D1 +error: invalid argument: parent s3 for snapshot s2 not found +error: marker +EOF +compare exp err || fail=3D1 + +(exit $fail); exit $fail --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list