Code

Fix Debian bug #478942: Fragile argument passing
[nagiosplug.git] / NPTest.pm
index e321623bff12fe0bebae610f277d5e50a157217f..54a535e77808b167741ba30ca744fcb3266acc5c 100644 (file)
--- a/NPTest.pm
+++ b/NPTest.pm
@@ -21,7 +21,7 @@ use Data::Dumper;
 use Test;
 
 use vars qw($VERSION);
-$VERSION = do { my @r = (q$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
+$VERSION = "1556."; # must be all one line, for MakeMaker
 
 =head1 NAME
 
@@ -54,13 +54,13 @@ user. The user can accept the developer's default value or reply "none"
 which will then be returned as "" for the test to skip if appropriate.
 
 If a parameter needs to be entered and the test is run without a tty 
-attached (such as a cronjob), this routine will die causing the test to 
-fail.
+attached (such as a cronjob), the parameter will be assigned as if it 
+was "none". Tests can check for the parameter and skip if not set.
 
-Responses are stored in an external, file-based
-cache so subsequent test runs will use these values. The user is able
-to change the values by amending the values in the file /var/tmp/NPTest.pm,
-or by setting the appropriate environment variable before running the test.
+Responses are stored in an external, file-based cache so subsequent test
+runs will use these values. The user is able to change the values by
+amending the values in the file /var/tmp/NPTest.cache, or by setting
+the appropriate environment variable before running the test.
 
 The option exists to store parameters in a scoped means, allowing a
 test harness to a localise a parameter should the need arise. This
@@ -346,7 +346,8 @@ sub getTestParameter
     return $default;
   }
 
-  die "Need to manually enter test parameter $param" unless (-t STDERR);
+  # Set "none" if no terminal attached (eg, tinderbox build servers when new variables set)
+  return "" unless (-t STDERR);
 
   my $userResponse = "";
 
@@ -567,7 +568,7 @@ sub TestsFrom
 
   closedir( DIR );
 
-  return @tests;
+  return sort @tests;
 }
 
 # All the new object oriented stuff below
@@ -596,21 +597,38 @@ sub output {
        }
 }
 
+sub perf_output {
+       my $self = shift;
+       $_ = $self->{output};
+       /\|(.*)$/;
+       return $1 || "";
+}
+
+sub only_output {
+       my $self = shift;
+       $_ = $self->{output};
+       /(.*?)\|/;
+       return $1 || "";
+}
+
 sub testCmd {
        my $class = shift;
        my $command = shift or die "No command passed to testCmd";
        my $object = $class->new;
        
        my $output = `$command`;
+       $object->return_code($? >> 8);
+       $_ = $? & 127;
+       if ($_) {
+               die "Got signal $_ for command $command";
+       }
        chomp $output;
-       
        $object->output($output);
-       $object->return_code($? >> 8);
 
+       my ($pkg, $file, $line) = caller(0);
+       print "Testing: $command", $/;
        if ($ENV{'NPTEST_DEBUG'}) {
-               my ($pkg, $file, $line) = caller(0);
                print "testCmd: Called from line $line in $file", $/;
-               print "Testing: $command", $/;
                print "Output:  ", $object->output, $/;
                print "Return code: ", $object->return_code, $/;
        }