diff options
-rw-r--r-- | NPTest.pm | 53 | ||||
-rw-r--r-- | doc/developer-guidelines.sgml | 47 | ||||
-rw-r--r-- | plugins/t/check_disk.t | 14 |
3 files changed, 88 insertions, 26 deletions
@@ -44,23 +44,17 @@ default via the C<use NPTest;> statement. =over -=item C<getTestParameter(...)> +=item getTestParameter( "ENV_VARIABLE", $brief_description, $default ) -A flexible and user override-able method of collecting, storing and -retrieving test parameters. This function allows the test harness +This function allows the test harness developer to interactively request test parameter information from the -user, when the no means of obtaining the information automatically has -been successful. The user is provided with the option of accepting -test harness developer's default value for the parameter, if a suggested -default is provided. - -User supplied responses are stored in an external (file-based) -cache. These values are retrieved on subsequent runs alleviating the -user of reconfirming the previous entered responses. The user is able -to override the value of a parameter on any given run by setting the -associated environment variable. These environment variable based -overrides are not stored in the cache, allowing one-time and what-if -based tests on the command line without polluting the cache. +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. + +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. The option exists to store parameters in a scoped means, allowing a test harness to a localise a parameter should the need arise. This @@ -73,7 +67,7 @@ called "check_disk.t" requesting the parameter "mountpoint_valid", the cache is first searched for "check_disk"/"mountpoint_valid", if this fails, then a search is conducted for "mountpoint_valid". -The facilitate quick testing setup, it is possible to accept all the +To facilitate quick testing setup, it is possible to accept all the developer provided defaults by setting the environment variable "NPTEST_ACCEPTDEFAULT" to "1" (or any other perl truth value). Note that, such defaults are not stored in the cache, as there is currently @@ -306,7 +300,16 @@ sub skipMissingCmd sub getTestParameter { - my( $param, $envvar, $default, $brief, $scoped ) = @_; + my( $param, $envvar, $default, $brief, $scoped ); + my $new_style; + if (scalar @_ == 3) { + ($param, $brief, $default) = @_; + $envvar = $param; + $new_style = 1; + } else { + ( $param, $envvar, $default, $brief, $scoped ) = @_; + $new_style = 0; + } # Apply default values for optional arguments $scoped = ( defined( $scoped ) && $scoped ); @@ -319,8 +322,13 @@ sub getTestParameter } my $cachedValue = SearchCache( $param, $testharness ); - if ( defined( $cachedValue ) && $cachedValue ) + if ( defined( $cachedValue ) ) { + # This save required to convert to new style because the key required is + # changing to the environment variable + if ($new_style == 0) { + SetCacheParameter( $envvar, undef, $cachedValue ); + } return $cachedValue; } @@ -339,9 +347,9 @@ sub getTestParameter print STDERR "\n"; print STDERR "Test Harness : $testharness\n"; print STDERR "Test Parameter : $param\n"; - print STDERR "Environment Variable : $envvar\n"; + print STDERR "Environment Variable : $envvar\n" if ($param ne $envvar); print STDERR "Brief Description : $brief\n"; - print STDERR "Enter value ", ($defaultValid ? "[${default}]" : "[]"), " => "; + print STDERR "Enter value (or 'none') ", ($defaultValid ? "[${default}]" : "[]"), " => "; $userResponse = <STDIN>; $userResponse = "" if ! defined( $userResponse ); # Handle EOF chomp( $userResponse ); @@ -353,6 +361,10 @@ sub getTestParameter print STDERR "\n"; + if ($userResponse =~ /^(na|none)$/) { + $userResponse = ""; + } + # define all user responses at global scope SetCacheParameter( $param, ( $scoped ? $testharness : undef ), $userResponse ); @@ -378,6 +390,7 @@ sub SearchCache { return $CACHE{$param}; } + return undef; # Need this to say "nothing found" } sub SetCacheParameter diff --git a/doc/developer-guidelines.sgml b/doc/developer-guidelines.sgml index 433a3022..3c37e5c1 100644 --- a/doc/developer-guidelines.sgml +++ b/doc/developer-guidelines.sgml @@ -572,6 +572,53 @@ </section> </section> +<section id="Testcases"><title>Test cases</title> +<para> +Tests are the best way of knowing if the plugins work as expected. Please +create and update test cases where possible. +</para> + +<para> +To run a test, from the top level directory, run "make test". This will run +all the current tests and report an overall success rate. +</para> + +<para> +See the <ulink url="http://tinderbox.altinity.org">Nagios Plugins Tinderbox server</ulink> +for the daily test results. +</para> + +<section><title>Test cases for plugins</title> +<para>These use perl's Test::More. To do a one time test, run "cd plugins && perl t/check_disk.t". +</para> + +<para>There will somtimes be failures seen in this output which are known failures that +need to be fixed. As long as the return code is 0, it will be reported as "test pass". +(If you have a fix so that the specific test passes, that will be gratefully received!) +</para> + +<para> +If you want a summary test, run: "cd plugins && perl -MTest::Harness -e 'runtests(@ARGV)' t/check_disk.t". +This runs the test in a summary format. +</para> + +<para> +For a good and amusing tutorial on using Test::More, see this +<ulink url="http://search.cpan.org/~mschwern/Test-Simple-0.62/lib/Test/Tutorial.pod"> +link</ulink> +</para> + +</section> + +<section><title>Testing the C library functions</title> +<para> +Will be looking at using libtap, which is utilised by the FreeBSD team. The output is +based on perl's TAP (Test Anything Protocol) format, so that Test::Harness will understand +results. This is still in planning stages. +</para> +</section> + +</section> <section id="CodingGuidelines"><title>Coding guidelines</title> <para>See <ulink url="http://www.gnu.org/prep/standards_toc.html">GNU Coding standards</ulink> for general guidelines.</para> diff --git a/plugins/t/check_disk.t b/plugins/t/check_disk.t index d35d02c9..385865fe 100644 --- a/plugins/t/check_disk.t +++ b/plugins/t/check_disk.t @@ -6,7 +6,7 @@ # use strict; -use Test::More tests => 26; +use Test::More; use NPTest; use POSIX qw(ceil floor); @@ -16,12 +16,14 @@ my $warningOutput = '/^DISK WARNING - /'; my $result; -my $mountpoint_valid = getTestParameter( "mountpoint_valid", "NP_MOUNTPOINT_VALID", "/", - "The path to a valid mountpoint" ); - -my $mountpoint2_valid = getTestParameter( "mountpoint2_valid", "NP_MOUNTPOINT2_VALID", "/var", - "The path to another valid mountpoint. Must be different from 1st one." ); +my $mountpoint_valid = getTestParameter( "NP_MOUNTPOINT_VALID", "Path to valid mountpoint", "/"); +my $mountpoint2_valid = getTestParameter( "NP_MOUNTPOINT2_VALID", "Path to another valid mountpoint. Must be different from 1st one", "/var"); +if ($mountpoint_valid eq "" or $mountpoint2_valid eq "") { + plan skip_all => "Need 2 mountpoints to test"; +} else { + plan tests => 26; +} $result = NPTest->testCmd( "./check_disk -w 1% -c 1% -p $mountpoint_valid -w 1% -c 1% -p $mountpoint2_valid" |