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. | |||
44 | 44 | ||
45 | =over | 45 | =over |
46 | 46 | ||
47 | =item C<getTestParameter(...)> | 47 | =item getTestParameter( "ENV_VARIABLE", $brief_description, $default ) |
48 | 48 | ||
49 | A flexible and user override-able method of collecting, storing and | 49 | This function allows the test harness |
50 | retrieving test parameters. This function allows the test harness | ||
51 | developer to interactively request test parameter information from the | 50 | developer to interactively request test parameter information from the |
52 | user, when the no means of obtaining the information automatically has | 51 | user. The user can accept the developer's default value or reply "none" |
53 | been successful. The user is provided with the option of accepting | 52 | which will then be returned as "" for the test to skip if appropriate. |
54 | test harness developer's default value for the parameter, if a suggested | 53 | |
55 | default is provided. | 54 | Responses are stored in an external, file-based |
56 | 55 | cache so subsequent test runs will use these values. The user is able | |
57 | User supplied responses are stored in an external (file-based) | 56 | to change the values by amending the values in the file /var/tmp/NPTest.pm, |
58 | cache. These values are retrieved on subsequent runs alleviating the | 57 | or by setting the appropriate environment variable before running the test. |
59 | user of reconfirming the previous entered responses. The user is able | ||
60 | to override the value of a parameter on any given run by setting the | ||
61 | associated environment variable. These environment variable based | ||
62 | overrides are not stored in the cache, allowing one-time and what-if | ||
63 | based tests on the command line without polluting the cache. | ||
64 | 58 | ||
65 | The option exists to store parameters in a scoped means, allowing a | 59 | The option exists to store parameters in a scoped means, allowing a |
66 | test harness to a localise a parameter should the need arise. This | 60 | 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 | |||
73 | cache is first searched for "check_disk"/"mountpoint_valid", if this | 67 | cache is first searched for "check_disk"/"mountpoint_valid", if this |
74 | fails, then a search is conducted for "mountpoint_valid". | 68 | fails, then a search is conducted for "mountpoint_valid". |
75 | 69 | ||
76 | The facilitate quick testing setup, it is possible to accept all the | 70 | To facilitate quick testing setup, it is possible to accept all the |
77 | developer provided defaults by setting the environment variable | 71 | developer provided defaults by setting the environment variable |
78 | "NPTEST_ACCEPTDEFAULT" to "1" (or any other perl truth value). Note | 72 | "NPTEST_ACCEPTDEFAULT" to "1" (or any other perl truth value). Note |
79 | that, such defaults are not stored in the cache, as there is currently | 73 | that, such defaults are not stored in the cache, as there is currently |
@@ -306,7 +300,16 @@ sub skipMissingCmd | |||
306 | 300 | ||
307 | sub getTestParameter | 301 | sub getTestParameter |
308 | { | 302 | { |
309 | my( $param, $envvar, $default, $brief, $scoped ) = @_; | 303 | my( $param, $envvar, $default, $brief, $scoped ); |
304 | my $new_style; | ||
305 | if (scalar @_ == 3) { | ||
306 | ($param, $brief, $default) = @_; | ||
307 | $envvar = $param; | ||
308 | $new_style = 1; | ||
309 | } else { | ||
310 | ( $param, $envvar, $default, $brief, $scoped ) = @_; | ||
311 | $new_style = 0; | ||
312 | } | ||
310 | 313 | ||
311 | # Apply default values for optional arguments | 314 | # Apply default values for optional arguments |
312 | $scoped = ( defined( $scoped ) && $scoped ); | 315 | $scoped = ( defined( $scoped ) && $scoped ); |
@@ -319,8 +322,13 @@ sub getTestParameter | |||
319 | } | 322 | } |
320 | 323 | ||
321 | my $cachedValue = SearchCache( $param, $testharness ); | 324 | my $cachedValue = SearchCache( $param, $testharness ); |
322 | if ( defined( $cachedValue ) && $cachedValue ) | 325 | if ( defined( $cachedValue ) ) |
323 | { | 326 | { |
327 | # This save required to convert to new style because the key required is | ||
328 | # changing to the environment variable | ||
329 | if ($new_style == 0) { | ||
330 | SetCacheParameter( $envvar, undef, $cachedValue ); | ||
331 | } | ||
324 | return $cachedValue; | 332 | return $cachedValue; |
325 | } | 333 | } |
326 | 334 | ||
@@ -339,9 +347,9 @@ sub getTestParameter | |||
339 | print STDERR "\n"; | 347 | print STDERR "\n"; |
340 | print STDERR "Test Harness : $testharness\n"; | 348 | print STDERR "Test Harness : $testharness\n"; |
341 | print STDERR "Test Parameter : $param\n"; | 349 | print STDERR "Test Parameter : $param\n"; |
342 | print STDERR "Environment Variable : $envvar\n"; | 350 | print STDERR "Environment Variable : $envvar\n" if ($param ne $envvar); |
343 | print STDERR "Brief Description : $brief\n"; | 351 | print STDERR "Brief Description : $brief\n"; |
344 | print STDERR "Enter value ", ($defaultValid ? "[${default}]" : "[]"), " => "; | 352 | print STDERR "Enter value (or 'none') ", ($defaultValid ? "[${default}]" : "[]"), " => "; |
345 | $userResponse = <STDIN>; | 353 | $userResponse = <STDIN>; |
346 | $userResponse = "" if ! defined( $userResponse ); # Handle EOF | 354 | $userResponse = "" if ! defined( $userResponse ); # Handle EOF |
347 | chomp( $userResponse ); | 355 | chomp( $userResponse ); |
@@ -353,6 +361,10 @@ sub getTestParameter | |||
353 | 361 | ||
354 | print STDERR "\n"; | 362 | print STDERR "\n"; |
355 | 363 | ||
364 | if ($userResponse =~ /^(na|none)$/) { | ||
365 | $userResponse = ""; | ||
366 | } | ||
367 | |||
356 | # define all user responses at global scope | 368 | # define all user responses at global scope |
357 | SetCacheParameter( $param, ( $scoped ? $testharness : undef ), $userResponse ); | 369 | SetCacheParameter( $param, ( $scoped ? $testharness : undef ), $userResponse ); |
358 | 370 | ||
@@ -378,6 +390,7 @@ sub SearchCache | |||
378 | { | 390 | { |
379 | return $CACHE{$param}; | 391 | return $CACHE{$param}; |
380 | } | 392 | } |
393 | return undef; # Need this to say "nothing found" | ||
381 | } | 394 | } |
382 | 395 | ||
383 | sub SetCacheParameter | 396 | sub SetCacheParameter |
diff --git a/doc/developer-guidelines.sgml b/doc/developer-guidelines.sgml index 433a302..3c37e5c 100644 --- a/doc/developer-guidelines.sgml +++ b/doc/developer-guidelines.sgml | |||
@@ -572,6 +572,53 @@ | |||
572 | </section> | 572 | </section> |
573 | </section> | 573 | </section> |
574 | 574 | ||
575 | <section id="Testcases"><title>Test cases</title> | ||
576 | <para> | ||
577 | Tests are the best way of knowing if the plugins work as expected. Please | ||
578 | create and update test cases where possible. | ||
579 | </para> | ||
580 | |||
581 | <para> | ||
582 | To run a test, from the top level directory, run "make test". This will run | ||
583 | all the current tests and report an overall success rate. | ||
584 | </para> | ||
585 | |||
586 | <para> | ||
587 | See the <ulink url="http://tinderbox.altinity.org">Nagios Plugins Tinderbox server</ulink> | ||
588 | for the daily test results. | ||
589 | </para> | ||
590 | |||
591 | <section><title>Test cases for plugins</title> | ||
592 | <para>These use perl's Test::More. To do a one time test, run "cd plugins && perl t/check_disk.t". | ||
593 | </para> | ||
594 | |||
595 | <para>There will somtimes be failures seen in this output which are known failures that | ||
596 | need to be fixed. As long as the return code is 0, it will be reported as "test pass". | ||
597 | (If you have a fix so that the specific test passes, that will be gratefully received!) | ||
598 | </para> | ||
599 | |||
600 | <para> | ||
601 | If you want a summary test, run: "cd plugins && perl -MTest::Harness -e 'runtests(@ARGV)' t/check_disk.t". | ||
602 | This runs the test in a summary format. | ||
603 | </para> | ||
604 | |||
605 | <para> | ||
606 | For a good and amusing tutorial on using Test::More, see this | ||
607 | <ulink url="http://search.cpan.org/~mschwern/Test-Simple-0.62/lib/Test/Tutorial.pod"> | ||
608 | link</ulink> | ||
609 | </para> | ||
610 | |||
611 | </section> | ||
612 | |||
613 | <section><title>Testing the C library functions</title> | ||
614 | <para> | ||
615 | Will be looking at using libtap, which is utilised by the FreeBSD team. The output is | ||
616 | based on perl's TAP (Test Anything Protocol) format, so that Test::Harness will understand | ||
617 | results. This is still in planning stages. | ||
618 | </para> | ||
619 | </section> | ||
620 | |||
621 | </section> | ||
575 | <section id="CodingGuidelines"><title>Coding guidelines</title> | 622 | <section id="CodingGuidelines"><title>Coding guidelines</title> |
576 | <para>See <ulink url="http://www.gnu.org/prep/standards_toc.html">GNU | 623 | <para>See <ulink url="http://www.gnu.org/prep/standards_toc.html">GNU |
577 | Coding standards</ulink> for general guidelines.</para> | 624 | Coding standards</ulink> for general guidelines.</para> |
diff --git a/plugins/t/check_disk.t b/plugins/t/check_disk.t index d35d02c..385865f 100644 --- a/plugins/t/check_disk.t +++ b/plugins/t/check_disk.t | |||
@@ -6,7 +6,7 @@ | |||
6 | # | 6 | # |
7 | 7 | ||
8 | use strict; | 8 | use strict; |
9 | use Test::More tests => 26; | 9 | use Test::More; |
10 | use NPTest; | 10 | use NPTest; |
11 | use POSIX qw(ceil floor); | 11 | use POSIX qw(ceil floor); |
12 | 12 | ||
@@ -16,12 +16,14 @@ my $warningOutput = '/^DISK WARNING - /'; | |||
16 | 16 | ||
17 | my $result; | 17 | my $result; |
18 | 18 | ||
19 | my $mountpoint_valid = getTestParameter( "mountpoint_valid", "NP_MOUNTPOINT_VALID", "/", | 19 | my $mountpoint_valid = getTestParameter( "NP_MOUNTPOINT_VALID", "Path to valid mountpoint", "/"); |
20 | "The path to a valid mountpoint" ); | 20 | my $mountpoint2_valid = getTestParameter( "NP_MOUNTPOINT2_VALID", "Path to another valid mountpoint. Must be different from 1st one", "/var"); |
21 | |||
22 | my $mountpoint2_valid = getTestParameter( "mountpoint2_valid", "NP_MOUNTPOINT2_VALID", "/var", | ||
23 | "The path to another valid mountpoint. Must be different from 1st one." ); | ||
24 | 21 | ||
22 | if ($mountpoint_valid eq "" or $mountpoint2_valid eq "") { | ||
23 | plan skip_all => "Need 2 mountpoints to test"; | ||
24 | } else { | ||
25 | plan tests => 26; | ||
26 | } | ||
25 | 27 | ||
26 | $result = NPTest->testCmd( | 28 | $result = NPTest->testCmd( |
27 | "./check_disk -w 1% -c 1% -p $mountpoint_valid -w 1% -c 1% -p $mountpoint2_valid" | 29 | "./check_disk -w 1% -c 1% -p $mountpoint_valid -w 1% -c 1% -p $mountpoint2_valid" |