diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-09-04 14:02:58 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-09-04 14:43:26 +0100 |
commit | 05beac65e58ef20899c7a50888a2854c07f83db9 (patch) | |
tree | 9d6047bfa61a75a026523bc69226d37f01829596 /rescue | |
parent | 8248a346d71ed7fc964595f6e973ff6593cdc217 (diff) | |
download | libguestfs-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.am | 9 | ||||
-rwxr-xr-x | rescue/test-virt-rescue.pl | 54 |
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 (); |