diff --git a/tests/meson.build b/tests/meson.build index efbe99f55e..46e1679ad7 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -691,7 +691,6 @@ if conf.has('WITH_LIBVIRTD') 'libvirtd-fail', 'libvirtd-pool', 'virsh-auth', - 'virsh-checkpoint', 'virsh-read-bufsiz', 'virsh-read-non-seekable', 'virsh-self-test', diff --git a/tests/virsh-checkpoint b/tests/virsh-checkpoint deleted file mode 100755 index 2492d29f53..0000000000 --- a/tests/virsh-checkpoint +++ /dev/null @@ -1,178 +0,0 @@ -#!/bin/sh -# simple testing of checkpoint 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" - -test_expensive - -if test "$VERBOSE" = yes; then - set -x - $abs_top_builddir/tools/virsh --version -fi - -fail=0 - -mock_xdg_ || framework_failure - -# 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 checkpoints, with names that intentionally sort - # differently by topology than by name. For now, it is not possible - # to create fanout without hacking through redefines. - checkpoint-create-as test c1 - checkpoint-create-as test c1 - checkpoint-create-as test c3 - checkpoint-create-as test c2 - # snapshots cannot be created while checkpoints exist - echo --err marker - snapshot-create-as test s1 - echo --err marker - # Checking tree view (siblings sorted alphabetically) - checkpoint-list test --tree - # Demonstrate list filtering - checkpoint-list test --roots - checkpoint-list test --leaves - checkpoint-list test --parent --no-leaves - checkpoint-list test --from c3 - checkpoint-list test --from c1 --descendants --name - # Now the tree is linear, so we have an unambiguous topological order - checkpoint-list test --name - checkpoint-list test --name --topological - # Capture some XML for later redefine - checkpoint-delete test c1 - echo "" - checkpoint-dumpxml test c3 - echo "" - checkpoint-dumpxml test c2 - echo "" - # Deleting current checkpoint moves current up to remaining parent - checkpoint-delete test --children-only c3 - checkpoint-list test --leaves --name - checkpoint-delete test --children c3 - checkpoint-list test --leaves --name - # All done -' || fail=1 - -# First part is expected output, --tree results in trailing spaces, -# and checkpoint-list produces timestamps -sed 's/ *$//; s/[0-9-]\{10\} [0-9:.]* .[0-9]\{4\}/TIMESTAMP/; - /MarkerA/,/MarkerC/d' < out > out.cooked || fail=1 -# Second part holds domain checkpoint XMLs -sed -n '/MarkerA/,/MarkerB/p' < out > c3.xml || fail=1 -sed -n '/MarkerB/,/MarkerC/p' < out > c2.xml || fail=1 - -cat <<\EOF > exp || fail=1 -Domain checkpoint c1 created - -Domain checkpoint c3 created -Domain checkpoint c2 created - - - -c1 - | - +- c3 - | - +- c2 - - - Name Creation Time ------------------------------------ - c1 TIMESTAMP - - Name Creation Time ------------------------------------ - c2 TIMESTAMP - - Name Creation Time Parent --------------------------------------------- - c1 TIMESTAMP - c3 TIMESTAMP c1 - - Name Creation Time ------------------------------------ - c2 TIMESTAMP - -c2 -c3 - -c1 -c2 -c3 - -c1 -c3 -c2 - -Domain checkpoint c1 deleted - -Domain checkpoint c3 children deleted - -c3 - -Domain checkpoint c3 deleted - - -EOF -compare exp out.cooked || fail=1 - -cat < exp || fail=1 -error: operation failed: domain moment c1 already exists -error: marker -error: Operation not supported: cannot create snapshot while checkpoint exists -error: marker -EOF -compare exp err || fail=1 - -# Restore state with redefine -$abs_top_builddir/tools/virsh -c test:///default >out 2>err ' - # Redefine must be in topological order; this will fail - checkpoint-create test --redefine c2.xml - echo --err marker - # This is the right order - checkpoint-create test --redefine c3.xml - checkpoint-create test --redefine c2.xml - checkpoint-list test --leaves --name - checkpoint-info test c2 -' || fail=1 - -cat <<\EOF > exp || fail=1 - - -Domain checkpoint c3 created from 'c3.xml' -Domain checkpoint c2 created from 'c2.xml' -c2 - -Name: c2 -Domain: test -Parent: c3 -Children: 0 -Descendants: 0 - -EOF -compare exp out || fail=1 - -cat < exp || fail=1 -error: invalid argument: parent c3 for moment c2 not found -error: marker -EOF -compare exp err || fail=1 - -(exit $fail); exit $fail diff --git a/tests/virshtest.c b/tests/virshtest.c index 0250535119..3c345d5ac1 100644 --- a/tests/virshtest.c +++ b/tests/virshtest.c @@ -228,6 +228,16 @@ mymain(void) "snapshot-create test --redefine snapshot-s2.xml --current --validate ;" "snapshot-info test --current"); + DO_TEST_SCRIPT("checkpoint", " + c2 + + c3 + + 1234 + + + + + test + 6695eb01-f6a4-8304-79aa-97f2502e193f + 8388608 + 2097152 + 2 + + hvm + + + + destroy + restart + destroy + + + + +
+ + + + + +
+ + +
+ + + + diff --git a/tests/virshtestdata/checkpoint-c3.xml b/tests/virshtestdata/checkpoint-c3.xml new file mode 100644 index 0000000000..c960a8553b --- /dev/null +++ b/tests/virshtestdata/checkpoint-c3.xml @@ -0,0 +1,38 @@ + + c3 + 5678 + + + + + test + 6695eb01-f6a4-8304-79aa-97f2502e193f + 8388608 + 2097152 + 2 + + hvm + + + + destroy + restart + destroy + + + + +
+ + + + + +
+ + +
+ + + + diff --git a/tests/virshtestdata/checkpoint-redefine.out b/tests/virshtestdata/checkpoint-redefine.out new file mode 100644 index 0000000000..83fccbc799 --- /dev/null +++ b/tests/virshtestdata/checkpoint-redefine.out @@ -0,0 +1,13 @@ + +Redefine must be in topological order; this will fail +error: invalid argument: parent c3 for moment c2 not found + +correct order +Domain checkpoint c3 created from 'checkpoint-c3.xml' +Domain checkpoint c2 created from 'checkpoint-c2.xml' +Name: c2 +Domain: test +Parent: c3 +Children: 0 +Descendants: 0 + diff --git a/tests/virshtestdata/checkpoint.in b/tests/virshtestdata/checkpoint.in new file mode 100755 index 0000000000..760f1fb648 --- /dev/null +++ b/tests/virshtestdata/checkpoint.in @@ -0,0 +1,35 @@ +echo Create a series of checkpoints, with names that intentionally sort +echo differently by topology than by name. For now, it is not possible +echo to create fanout without hacking through redefines. +checkpoint-create-as test c1 +checkpoint-create-as test c1 +checkpoint-create-as test c3 +checkpoint-create-as test c2 + +echo snapshots cannot be created while checkpoints exist +snapshot-create-as test s1 + +echo Checking tree view (siblings sorted alphabetically) +checkpoint-list test --tree + +echo Demonstrate list filtering +checkpoint-list test --roots --name +checkpoint-list test --leaves --name +checkpoint-list test --parent --no-leaves --name +checkpoint-list test --from c3 --name +checkpoint-list test --from c1 --descendants --name + +echo Now the tree is linear, so we have an unambiguous topological order +checkpoint-list test --name +checkpoint-list test --name --topological + +echo validate XML +checkpoint-delete test c1 +checkpoint-dumpxml test c3 +checkpoint-dumpxml test c2 + +echo Deleting current checkpoint moves current up to remaining parent +checkpoint-delete test --children-only c3 +checkpoint-list test --leaves --name +checkpoint-delete test --children c3 +checkpoint-list test --leaves --name diff --git a/tests/virshtestdata/checkpoint.out b/tests/virshtestdata/checkpoint.out new file mode 100644 index 0000000000..285bb0648f --- /dev/null +++ b/tests/virshtestdata/checkpoint.out @@ -0,0 +1,133 @@ +Create a series of checkpoints, with names that intentionally sort +differently by topology than by name. For now, it is not possible +to create fanout without hacking through redefines. +Domain checkpoint c1 created +error: operation failed: domain moment c1 already exists + +Domain checkpoint c3 created +Domain checkpoint c2 created +snapshots cannot be created while checkpoints exist +error: Operation not supported: cannot create snapshot while checkpoint exists + +Checking tree view (siblings sorted alphabetically) +c1 + | + +- c3 + | + +- c2 + + +Demonstrate list filtering +c1 + +c2 + +c1 +c3 c1 + +c2 + +c2 +c3 + +Now the tree is linear, so we have an unambiguous topological order +c1 +c2 +c3 + +c1 +c3 +c2 + +validate XML +Domain checkpoint c1 deleted + + + c3 + + + + + + test + 6695eb01-f6a4-8304-79aa-97f2502e193f + 8388608 + 2097152 + 2 + + hvm + + + + destroy + restart + destroy + + + + +
+ + + + + +
+ + +
+ + + + + + + c2 + + c3 + + + + + + + test + 6695eb01-f6a4-8304-79aa-97f2502e193f + 8388608 + 2097152 + 2 + + hvm + + + + destroy + restart + destroy + + + + +
+ + + + + +
+ + +
+ + + + + +Deleting current checkpoint moves current up to remaining parent +Domain checkpoint c3 children deleted + +c3 + +Domain checkpoint c3 deleted + +