From 73b77a44c43960b6fcf8b3c29c1016ba1940aa89 Mon Sep 17 00:00:00 2001 From: Ton Voon Date: Thu, 15 Dec 2005 15:17:49 +0000 Subject: Allow directories and links to be tested by check_file_age. Sanitise output. Added tests git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1297 f882894a-f735-0410-b71e-b25c423dba1c diff --git a/plugins-scripts/check_file_age.pl b/plugins-scripts/check_file_age.pl index 43038fa..0215c0f 100755 --- a/plugins-scripts/check_file_age.pl +++ b/plugins-scripts/check_file_age.pl @@ -67,14 +67,14 @@ if ($opt_h) { $opt_f = shift unless ($opt_f); if (! $opt_f) { - print "No file specified\n"; + print "FILE_AGE UNKNOWN: No file specified\n"; exit $ERRORS{'UNKNOWN'}; } -# Examine the file. -unless (-f $opt_f) { - print "$opt_f: File not found\n"; - exit $ERRORS{'UNKNOWN'}; +# Check that file exists (can be directory or link) +unless (-e $opt_f) { + print "FILE_AGE CRITICAL: File not found - $opt_f\n"; + exit $ERRORS{'CRITICAL'}; } $st = File::stat::stat($opt_f); @@ -91,7 +91,7 @@ elsif (($opt_w and $age > $opt_w) or ($opt_W and $size < $opt_W)) { $result = 'WARNING'; } -print "$result - $opt_f is $age seconds old and $size bytes\n"; +print "FILE_AGE $result: $opt_f is $age seconds old and $size bytes\n"; exit $ERRORS{$result}; sub print_usage () { @@ -106,8 +106,8 @@ sub print_help () { print "Copyright (c) 2003 Steven Grimm\n\n"; print_usage(); print "\n"; - print " File must be no more than this many seconds old\n"; - print " File must be at least this many bytes long\n"; + print " File must be no more than this many seconds old (default: warn 240 secs, crit 600)\n"; + print " File must be at least this many bytes long (default: crit 0 bytes)\n"; print "\n"; support(); } diff --git a/plugins-scripts/t/check_file_age.t b/plugins-scripts/t/check_file_age.t new file mode 100644 index 0000000..372b9f2 --- /dev/null +++ b/plugins-scripts/t/check_file_age.t @@ -0,0 +1,88 @@ +#!/usr/bin/perl -w -I .. +# +# check_file_age tests +# +# $Id$ +# + +use strict; +use Test::More tests => 15; +use NPTest; + +my $successOutput = '/^FILE_AGE OK: /'; +my $warningOutput = '/^FILE_AGE WARNING: /'; +my $criticalOutput = '/^FILE_AGE CRITICAL: /'; +my $unknownOutput = '/^FILE_AGE UNKNOWN: /'; + +my $result; +my $temp_file = "/tmp/check_file_age.tmp"; +my $temp_link = "/tmp/check_file_age.link.tmp"; + +unlink $temp_file, $temp_link; + +$result = NPTest->testCmd( + "./check_file_age" + ); +cmp_ok( $result->return_code, '==', 3, "Missing parameters" ); +like ( $result->output, $unknownOutput, "Output for unknown correct" ); + +$result = NPTest->testCmd( + "./check_file_age -f $temp_file" + ); +cmp_ok( $result->return_code, '==', 2, "File not exists" ); +like ( $result->output, $criticalOutput, "Output for file missing correct" ); + +write_chars(100); +$result = NPTest->testCmd( + "./check_file_age -f $temp_file" + ); +cmp_ok( $result->return_code, '==', 0, "File is new enough" ); +like ( $result->output, $successOutput, "Output for success correct" ); + +sleep 2; + +$result = NPTest->testCmd( + "./check_file_age -f $temp_file -w 1" + ); +cmp_ok( $result->return_code, '==', 1, "Warning for file over 1 second old" ); +like ( $result->output, $warningOutput, "Output for warning correct" ); + +$result = NPTest->testCmd( + "./check_file_age -f $temp_file -c 1" + ); +cmp_ok( $result->return_code, '==', 2, "Critical for file over 1 second old" ); +like ( $result->output, $criticalOutput, "Output for critical correct" ); + +$result = NPTest->testCmd( + "./check_file_age -f $temp_file -c 1000 -W 100" + ); +cmp_ok( $result->return_code, '==', 0, "Checking file size" ); + +$result = NPTest->testCmd( + "./check_file_age -f $temp_file -c 1000 -W 101" + ); +cmp_ok( $result->return_code, '==', 1, "One byte too short" ); + +$result = NPTest->testCmd( + "./check_file_age -f $temp_file -c 1000 -C 101" + ); +cmp_ok( $result->return_code, '==', 2, "One byte too short - critical" ); + +symlink $temp_file, $temp_link or die "Cannot create symlink"; +$result = NPTest->testCmd("./check_file_age -f $temp_link -c 10"); +cmp_ok( $result->return_code, '==', 0, "Works for symlinks" ); +unlink $temp_link; + +unlink $temp_file; +mkdir $temp_file or die "Cannot create directory"; +$result = NPTest->testCmd("./check_file_age -f $temp_file -c 1"); +cmp_ok( $result->return_code, '==', 0, "Works for directories" ); +rmdir $temp_file; + + +sub write_chars { + my $size = shift; + open F, "> $temp_file" or die "Cannot write to $temp_file"; + print F "A" x $size; + close F; +} -- cgit v0.10-9-g596f