summaryrefslogtreecommitdiffstats
path: root/rescue
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-09-04 14:02:58 +0100
committerRichard W.M. Jones <rjones@redhat.com>2012-09-04 14:43:26 +0100
commit05beac65e58ef20899c7a50888a2854c07f83db9 (patch)
tree9d6047bfa61a75a026523bc69226d37f01829596 /rescue
parent8248a346d71ed7fc964595f6e973ff6593cdc217 (diff)
downloadlibguestfs-05beac65e58ef20899c7a50888a2854c07f83db9.tar.gz
libguestfs-05beac65e58ef20899c7a50888a2854c07f83db9.tar.xz
libguestfs-05beac65e58ef20899c7a50888a2854c07f83db9.zip
rescue: Add an expect-driven test for the virt-rescue command.
This command was not tested at all. As a result we didn't notice that it was broken for a long time (RHBZ#853159). This adds a test that drives the command through a pty. It uses the perl 'Expect' module, although this is not required.
Diffstat (limited to 'rescue')
-rw-r--r--rescue/Makefile.am9
-rwxr-xr-xrescue/test-virt-rescue.pl54
2 files changed, 63 insertions, 0 deletions
diff --git a/rescue/Makefile.am b/rescue/Makefile.am
index d0b23cae..6e775d09 100644
--- a/rescue/Makefile.am
+++ b/rescue/Makefile.am
@@ -18,6 +18,7 @@
include $(top_srcdir)/subdir-rules.mk
EXTRA_DIST = \
+ test-virt-rescue.pl \
virt-rescue.pod
CLEANFILES = stamp-virt-rescue.pod
@@ -63,3 +64,11 @@ stamp-virt-rescue.pod: virt-rescue.pod
--license GPLv2+ \
$<
touch $@
+
+# Tests.
+
+TESTS_ENVIRONMENT = $(top_builddir)/run --test
+
+if ENABLE_APPLIANCE
+TESTS = test-virt-rescue.pl
+endif ENABLE_APPLIANCE
diff --git a/rescue/test-virt-rescue.pl b/rescue/test-virt-rescue.pl
new file mode 100755
index 00000000..7767ab01
--- /dev/null
+++ b/rescue/test-virt-rescue.pl
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+# libguestfs
+# Copyright (C) 2012 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use strict;
+
+# This test requires the perl 'Expect' module. If it doesn't
+# exist, skip the test.
+eval "use Expect";
+
+unless (exists $INC{"Expect.pm"}) {
+ print STDERR "$0: test skipped because there is no perl Expect module\n";
+ exit 77
+}
+
+# Run virt-rescue and make sure we get to the rescue prompt.
+my $exp = Expect->spawn ("./virt-rescue", "--scratch")
+ or die "$0: Expect could not spawn virt-rescue: $!\n";
+
+my $timeout = 5 * 60;
+my $r;
+$r = $exp->expect ($timeout, '><rescue>');
+
+unless (defined $r) {
+ die "$0: virt-rescue did not reach the '><rescue>' prompt within $timeout seconds\n";
+}
+
+# Send a simple command; expect to get back to the prompt.
+$exp->send ("ls -1\n");
+
+$timeout = 60;
+$r = $exp->expect ($timeout, '><rescue>');
+
+unless (defined $r) {
+ die "$0: virt-rescue did not return to the prompt after sending a command\n";
+}
+
+# Check virt-rescue shell exits when we send the 'exit' command.
+$exp->send ("exit\n");
+$exp->soft_close ();