From e03d87d8aef6701e7245b98800e67b64319bf7b2 Mon Sep 17 00:00:00 2001 From: Ton Voon Date: Thu, 15 Dec 2005 15:19:55 +0000 Subject: New 3 parameter version of getTestParameters. Updated check_disk.t to reflect. Added notes re: testing in developer guidelines. git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1298 f882894a-f735-0410-b71e-b25c423dba1c --- NPTest.pm | 53 +++++++++++++++++++++++++++---------------- doc/developer-guidelines.sgml | 47 ++++++++++++++++++++++++++++++++++++++ plugins/t/check_disk.t | 14 +++++++----- 3 files changed, 88 insertions(+), 26 deletions(-) diff --git a/NPTest.pm b/NPTest.pm index 440e7343..4036a9d0 100644 --- a/NPTest.pm +++ b/NPTest.pm @@ -44,23 +44,17 @@ default via the C statement. =over -=item C +=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 = ; $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 @@ +
Test cases + +Tests are the best way of knowing if the plugins work as expected. Please +create and update test cases where possible. + + + +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. + + + +See the Nagios Plugins Tinderbox server +for the daily test results. + + +
Test cases for plugins +These use perl's Test::More. To do a one time test, run "cd plugins && perl t/check_disk.t". + + +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!) + + + +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. + + + +For a good and amusing tutorial on using Test::More, see this + +link + + +
+ +
Testing the C library functions + +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. + +
+ +
Coding guidelines See GNU Coding standards for general guidelines. 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" -- cgit v1.2.3