diff options
author | Sven Nierlein <Sven.Nierlein@consol.de> | 2013-09-18 11:03:00 +0200 |
---|---|---|
committer | Sven Nierlein <sven@consol.de> | 2013-09-18 11:03:00 +0200 |
commit | 843bbfb75adf888b1cb0ee3b0dc8f98d70ff6dda (patch) | |
tree | 2b6a67036aca651e08d72a48fc37ee66ee9ee24d | |
parent | 065905e9002e1c53f82f014dfda3e134c2f9cbf1 (diff) | |
download | monitoring-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.
-rw-r--r-- | NPTest.pm | 36 |
1 files changed, 19 insertions, 17 deletions
@@ -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; } # |