]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
better diagnostic when failing to undefine a running domain via ID
authorJim Meyering <meyering@redhat.com>
Tue, 22 Jul 2008 16:12:01 +0000 (16:12 +0000)
committerJim Meyering <meyering@redhat.com>
Tue, 22 Jul 2008 16:12:01 +0000 (16:12 +0000)
* src/virsh.c (cmdUndefine): Tell user to shutdown and then use name or UUID.
* tests/undefine: New test.  Exercise virsh's undefine command.
* tests/Makefile.am (test_scripts): Add undefine.

ChangeLog
src/virsh.c
tests/Makefile.am
tests/undefine [new file with mode: 0755]

index eb9b036d4753dc7d181b076104dea96ab2fabb80..a91cc3fefd230e04a4ac3e54356ef5e83810b70f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Tue Jul 22 18:11:13 CEST 2008 Jim Meyering <meyering@redhat.com>
+
+       better diagnostic when failing to undefine a running domain via ID
+       * src/virsh.c (cmdUndefine): Tell user to shutdown and then use name
+       or UUID.
+       * tests/undefine: New test.  Exercise virsh's undefine command.
+       * tests/Makefile.am (test_scripts): Add undefine.
+
 Mon Jul 21 15:31:52 CEST 2008 Daniel Veillard <veillard@redhat.com>
 
        * src/openvz_conf.c src/openvz_driver.c: patch from Evgeniy Sokolov
index f1296ec5dfeefc5b9fa1378bc1ec2214f824a63a..620f103919a3887c08c65856223eecf8cc5ccfe1 100644 (file)
@@ -974,10 +974,24 @@ cmdUndefine(vshControl * ctl, vshCmd * cmd)
     virDomainPtr dom;
     int ret = TRUE;
     char *name;
+    int found;
+    int id;
 
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;
 
+    name = vshCommandOptString(cmd, "domain", &found);
+    if (!found)
+        return FALSE;
+
+    if (name && virStrToLong_i(name, NULL, 10, &id) == 0
+        && id >= 0 && (dom = virDomainLookupByID(ctl->conn, id))) {
+        vshError(ctl, FALSE, _("a running domain like %s cannot be undefined;\n"
+                               "to undefine, first shutdown then undefine"
+                               " using its name or UUID"), name);
+        virDomainFree(dom);
+        return FALSE;
+    }
     if (!(dom = vshCommandOptDomainBy(ctl, cmd, "domain", &name,
                                       VSH_BYNAME|VSH_BYUUID)))
         return FALSE;
index 2fc5a2fbbe7ae43f3151109ad26b11945839d037..5686678c70a68c78d3fd559ab935a5dceefce59e 100644 (file)
@@ -51,6 +51,7 @@ test_scripts += \
        int-overflow \
        read-bufsiz \
        read-non-seekable \
+       undefine \
        vcpupin
 endif
 
diff --git a/tests/undefine b/tests/undefine
new file mode 100755 (executable)
index 0000000..3936e22
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/sh
+# exercise virsh's "undefine" command
+
+# Copyright (C) 2008 Free Software Foundation, 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 3 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 <http://www.gnu.org/licenses/>.
+
+if test "$VERBOSE" = yes; then
+  set -x
+  virsh --version
+fi
+
+. $srcdir/test-lib.sh
+
+fail=0
+
+# Attempt to undefine a running domain, by domain name.
+virsh -q -c test:///default undefine test > out 2>&1
+test $? = 1 || fail=1
+cat <<\EOF > exp || fail=1
+libvir: Test error test: internal error Domain is still running
+error: Failed to undefine domain test
+EOF
+compare out exp || fail=1
+
+# A different diagnostic when specifying a domain ID
+virsh -q -c test:///default undefine 1 > out 2>&1
+test $? = 1 || fail=1
+cat <<\EOF > exp || fail=1
+error: a running domain like 1 cannot be undefined;
+to undefine, first shutdown then undefine using its name or UUID
+EOF
+compare out exp || fail=1
+
+# Succeed, now: first shut down, then undefine, both via name.
+virsh -q -c test:///default 'shutdown test; undefine test' > out 2>&1
+test $? = 0 || fail=1
+cat <<\EOF > exp || fail=1
+Domain test is being shutdown
+Domain test has been undefined
+EOF
+compare out exp || fail=1
+
+(exit $fail); exit $fail