From 843bbfb75adf888b1cb0ee3b0dc8f98d70ff6dda Mon Sep 17 00:00:00 2001 From: Sven Nierlein Date: Wed, 18 Sep 2013 11:03:00 +0200 Subject: 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. diff --git a/NPTest.pm b/NPTest.pm index 0713b5e..9b85617 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; } # -- cgit v0.10-9-g596f