aboutsummaryrefslogtreecommitdiff
path: root/NPTest.pm
diff options
context:
space:
mode:
authorGravatar Sven Nierlein <Sven.Nierlein@consol.de> 2013-09-18 11:03:00 +0200
committerGravatar Sven Nierlein <sven@consol.de> 2013-09-18 11:03:00 +0200
commit843bbfb75adf888b1cb0ee3b0dc8f98d70ff6dda (patch)
tree2b6a67036aca651e08d72a48fc37ee66ee9ee24d /NPTest.pm
parent065905e9002e1c53f82f014dfda3e134c2f9cbf1 (diff)
downloadmonitoring-plugins-843bbfb75adf888b1cb0ee3b0dc8f98d70ff6dda.tar.gz
tests: only write cache file if it changed
Tests sometimes fila when running multiple parallel tests using the same cache file because it is written everytime a test parameter is read. Since there is no locking, this might fail from time to time.
Diffstat (limited to 'NPTest.pm')
-rw-r--r--NPTest.pm36
1 files changed, 19 insertions, 17 deletions
diff --git a/NPTest.pm b/NPTest.pm
index 0713b5ef..9b856171 100644
--- a/NPTest.pm
+++ b/NPTest.pm
@@ -422,6 +422,7 @@ sub LoadCache
{
return if exists( $CACHE{'_cache_loaded_'} );
+ my $fileContents = "";
if ( -f $CACHEFILENAME )
{
my( $fileHandle ) = new IO::File;
@@ -432,44 +433,45 @@ sub LoadCache
return;
}
- my( $fileContents ) = join( "\n", <$fileHandle> );
-
+ $fileContents = join("", <$fileHandle>);
$fileHandle->close();
+ chomp($fileContents);
my( $contentsRef ) = eval $fileContents;
%CACHE = %{$contentsRef};
}
- $CACHE{'_cache_loaded_'} = 1;
+ $CACHE{'_cache_loaded_'} = 1;
+ $CACHE{'_original_cache'} = $fileContents;
}
sub SaveCache
{
delete $CACHE{'_cache_loaded_'};
+ my $oldFileContents = delete $CACHE{'_original_cache'};
- my( $fileHandle ) = new IO::File;
-
- if ( ! $fileHandle->open( "> ${CACHEFILENAME}" ) )
- {
- print STDERR "NPTest::LoadCache() : Problem saving ${CACHEFILENAME} : $!\n";
- return;
- }
-
- my( $dataDumper ) = new Data::Dumper( [ \%CACHE ] );
-
+ my($dataDumper) = new Data::Dumper([\%CACHE]);
$dataDumper->Terse(1);
$dataDumper->Sortkeys(1);
-
my $data = $dataDumper->Dump();
$data =~ s/^\s+/ /gmx; # make sure all systems use same amount of whitespace
$data =~ s/^\s+}/}/gmx;
- print $fileHandle $data;
+ chomp($data);
- $fileHandle->close();
+ if($oldFileContents ne $data) {
+ my($fileHandle) = new IO::File;
+ if (!$fileHandle->open( "> ${CACHEFILENAME}")) {
+ print STDERR "NPTest::LoadCache() : Problem saving ${CACHEFILENAME} : $!\n";
+ return;
+ }
+ print $fileHandle $data;
+ $fileHandle->close();
+ }
- $CACHE{'_cache_loaded_'} = 1;
+ $CACHE{'_cache_loaded_'} = 1;
+ $CACHE{'_original_cache'} = $data;
}
#