diff options
Diffstat (limited to 'NPTest.pm')
| -rw-r--r-- | NPTest.pm | 72 |
1 files changed, 60 insertions, 12 deletions
| @@ -31,7 +31,7 @@ NPTest - Simplify the testing of Nagios Plugins | |||
| 31 | 31 | ||
| 32 | This modules provides convenience functions to assist in the testing | 32 | This modules provides convenience functions to assist in the testing |
| 33 | of Nagios Plugins, making the testing code easier to read and write; | 33 | of Nagios Plugins, making the testing code easier to read and write; |
| 34 | hopefully encouraging the development of more complete test suite for | 34 | hopefully encouraging the development of a more complete test suite for |
| 35 | the Nagios Plugins. It is based on the patterns of testing seen in the | 35 | the Nagios Plugins. It is based on the patterns of testing seen in the |
| 36 | 1.4.0 release, and continues to use the L<Test> module as the basis of | 36 | 1.4.0 release, and continues to use the L<Test> module as the basis of |
| 37 | testing. | 37 | testing. |
| @@ -80,8 +80,17 @@ that, such defaults are not stored in the cache, as there is currently | |||
| 80 | no mechanism to edit existing cache entries, save the use of text | 80 | no mechanism to edit existing cache entries, save the use of text |
| 81 | editor or removing the cache file completely. | 81 | editor or removing the cache file completely. |
| 82 | 82 | ||
| 83 | =item C<testCmd($command)> | ||
| 84 | |||
| 85 | Call with NPTest->testCmd("./check_disk ...."). This returns a NPTest object | ||
| 86 | which you can then run $object->return_code or $object->output against. | ||
| 87 | |||
| 88 | Testing of results would be done in your test script, not in this module. | ||
| 89 | |||
| 83 | =item C<checkCmd(...)> | 90 | =item C<checkCmd(...)> |
| 84 | 91 | ||
| 92 | This function is obsolete. Use C<testCmd()> instead. | ||
| 93 | |||
| 85 | This function attempts to encompass the majority of test styles used | 94 | This function attempts to encompass the majority of test styles used |
| 86 | in testing Nagios Plugins. As each plug-in is a separate command, the | 95 | in testing Nagios Plugins. As each plug-in is a separate command, the |
| 87 | typical tests we wish to perform are against the exit status of the | 96 | typical tests we wish to perform are against the exit status of the |
| @@ -213,21 +222,14 @@ sub checkCmd | |||
| 213 | { | 222 | { |
| 214 | my( $command, $desiredExitStatus, $desiredOutput, %exceptions ) = @_; | 223 | my( $command, $desiredExitStatus, $desiredOutput, %exceptions ) = @_; |
| 215 | 224 | ||
| 216 | my $output = `${command}`; | 225 | my $result = NPTest->testCmd($command); |
| 217 | my $exitStatus = $? >> 8; | 226 | |
| 227 | my $output = $result->output; | ||
| 228 | my $exitStatus = $result->return_code; | ||
| 218 | 229 | ||
| 219 | $output = "" unless defined( $output ); | 230 | $output = "" unless defined( $output ); |
| 220 | chomp( $output ); | 231 | chomp( $output ); |
| 221 | 232 | ||
| 222 | if ( exists( $ENV{'NPTEST_DEBUG'} ) && $ENV{'NPTEST_DEBUG'} ) | ||
| 223 | { | ||
| 224 | my( $pkg, $file, $line ) = caller(0); | ||
| 225 | |||
| 226 | print "checkCmd: Called from line $line in $file\n"; | ||
| 227 | print "Testing : ${command}\n"; | ||
| 228 | print "Result : ${exitStatus} AND '${output}'\n"; | ||
| 229 | } | ||
| 230 | |||
| 231 | my $testStatus; | 233 | my $testStatus; |
| 232 | 234 | ||
| 233 | my $testOutput = "continue"; | 235 | my $testOutput = "continue"; |
| @@ -547,7 +549,53 @@ sub TestsFrom | |||
| 547 | return @tests; | 549 | return @tests; |
| 548 | } | 550 | } |
| 549 | 551 | ||
| 552 | # All the new object oriented stuff below | ||
| 550 | 553 | ||
| 554 | sub new { | ||
| 555 | my $type = shift; | ||
| 556 | my $self = {}; | ||
| 557 | return bless $self, $type; | ||
| 558 | } | ||
| 559 | |||
| 560 | # Accessors | ||
| 561 | sub return_code { | ||
| 562 | my $self = shift; | ||
| 563 | if (@_) { | ||
| 564 | return $self->{return_code} = shift; | ||
| 565 | } else { | ||
| 566 | return $self->{return_code}; | ||
| 567 | } | ||
| 568 | } | ||
| 569 | sub output { | ||
| 570 | my $self = shift; | ||
| 571 | if (@_) { | ||
| 572 | return $self->{output} = shift; | ||
| 573 | } else { | ||
| 574 | return $self->{output}; | ||
| 575 | } | ||
| 576 | } | ||
| 577 | |||
| 578 | sub testCmd { | ||
| 579 | my $class = shift; | ||
| 580 | my $command = shift or die "No command passed to testCmd"; | ||
| 581 | my $object = $class->new; | ||
| 582 | |||
| 583 | my $output = `$command`; | ||
| 584 | chomp $output; | ||
| 585 | |||
| 586 | $object->output($output); | ||
| 587 | $object->return_code($? >> 8); | ||
| 588 | |||
| 589 | if ($ENV{'NPTEST_DEBUG'}) { | ||
| 590 | my ($pkg, $file, $line) = caller(0); | ||
| 591 | print "testCmd: Called from line $line in $file", $/; | ||
| 592 | print "Testing: $command", $/; | ||
| 593 | print "Output: ", $object->output, $/; | ||
| 594 | print "Return code: ", $object->return_code, $/; | ||
| 595 | } | ||
| 596 | |||
| 597 | return $object; | ||
| 598 | } | ||
| 551 | 599 | ||
| 552 | 1; | 600 | 1; |
| 553 | # | 601 | # |
