diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 87ececcf3..a2b51da2d 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -54,6 +54,10 @@

Improve protocol error handling. In particular, stop errors are no longer reported as unexpected.

+ +

Replace dynamically built class hierarchies in I/O layer with fixed parent() calls.

+
+

Improve labeling for errors in helper processes.

diff --git a/lib/pgBackRest/Backup/Filter/PageChecksum.pm b/lib/pgBackRest/Backup/Filter/PageChecksum.pm index 2eaae468e..1aa9fd462 100644 --- a/lib/pgBackRest/Backup/Filter/PageChecksum.pm +++ b/lib/pgBackRest/Backup/Filter/PageChecksum.pm @@ -2,6 +2,7 @@ # Backup Page Checksum Filter #################################################################################################################################### package pgBackRest::Backup::Filter::PageChecksum; +use parent 'pgBackRest::Common::Io::Filter'; use strict; use warnings FATAL => qw(all); @@ -35,8 +36,6 @@ if (libC()) #################################################################################################################################### # CONSTRUCTOR #################################################################################################################################### -our @ISA = (); ## no critic (ClassHierarchies::ProhibitExplicitISA) - sub new { my $class = shift; @@ -45,7 +44,7 @@ sub new my ( $strOperation, - $self, + $oParent, $iSegmentNo, $iWalId, $iWalOffset, @@ -53,14 +52,14 @@ sub new logDebugParam ( __PACKAGE__ . '->new', \@_, - {name => 'self', trace => true}, + {name => 'oParent', trace => true}, {name => 'iSegmentNo', trace => true}, {name => 'iWalId', trace => true}, {name => 'iWalOffset', trace => true}, ); # Bless with new class - @ISA = $self->isA(); ## no critic (ClassHierarchies::ProhibitExplicitISA) + my $self = $class->SUPER::new($oParent); bless $self, $class; # Set variables @@ -90,7 +89,7 @@ sub read my $iSize = shift; # Call the io method - my $iActualSize = $self->SUPER::read($rtBuffer, $iSize); + my $iActualSize = $self->parent()->read($rtBuffer, $iSize); # Validate page checksums for the read block if ($iActualSize > 0) @@ -172,7 +171,7 @@ sub close undef($self->{hResult}); # Close io - return $self->SUPER::close(); + return $self->parent()->close(); } } diff --git a/lib/pgBackRest/Common/Http/Client.pm b/lib/pgBackRest/Common/Http/Client.pm index 45114075a..6900418d2 100644 --- a/lib/pgBackRest/Common/Http/Client.pm +++ b/lib/pgBackRest/Common/Http/Client.pm @@ -2,6 +2,7 @@ # HTTP Client #################################################################################################################################### package pgBackRest::Common::Http::Client; +use parent 'pgBackRest::Common::Io::Buffered'; use strict; use warnings FATAL => qw(all); @@ -37,8 +38,6 @@ use constant HTTP_HEADER_TRANSFER_ENCODING => 'transfer #################################################################################################################################### # new #################################################################################################################################### -our @ISA = (); ## no critic (ClassHierarchies::ProhibitExplicitISA) - sub new { my $class = shift; @@ -117,12 +116,9 @@ sub new ERROR_HOST_CONNECT, coalesce(length($!) == 0 ? undef : $!, $SSL_ERROR), length($!) > 0 ? $SSL_ERROR : undef); } - # Create the buffered IO object - $self = new pgBackRest::Common::Io::Buffered( + # Bless with new class + $self = $class->SUPER::new( new pgBackRest::Common::Io::Handle('httpClient', $oSocket, $oSocket), $iProtocolTimeout, $lBufferMax); - - # Bless with the class - @ISA = $self->isA(); ## no critic (ClassHierarchies::ProhibitExplicitISA) bless $self, $class; # Store socket diff --git a/lib/pgBackRest/Common/Io/Base.pm b/lib/pgBackRest/Common/Io/Base.pm index 5a3210edb..e278c9b73 100644 --- a/lib/pgBackRest/Common/Io/Base.pm +++ b/lib/pgBackRest/Common/Io/Base.pm @@ -1,5 +1,5 @@ #################################################################################################################################### -# Base IO/Filter Module +# Base IO Module #################################################################################################################################### package pgBackRest::Common::Io::Base; @@ -48,9 +48,6 @@ sub new {name => 'strId', trace => true}, ); - # Initialize the ISA stack - $self->{stryIsA} = [COMMON_IO_BASE]; - # Return from function and log return values if any return logDebugReturn ( @@ -72,18 +69,6 @@ sub error logErrorResult($iCode, $strMessage, $strDetail); } -#################################################################################################################################### -# isA - get the list of parent classes and add the current class -#################################################################################################################################### -sub isA -{ - my $self = shift; - - unshift(@{$self->{stryIsA}}, $self->className()); - - return @{$self->{stryIsA}}; -} - #################################################################################################################################### # result - retrieve a result from io or a filter #################################################################################################################################### @@ -100,6 +85,14 @@ sub result return $self->{rhResult}{$strModule}; } +#################################################################################################################################### +# resultAll - get all results +#################################################################################################################################### +sub resultAll +{ + shift->{rhResult}; +} + #################################################################################################################################### # resultSet - set a result from io or a filter #################################################################################################################################### diff --git a/lib/pgBackRest/Common/Io/Buffered.pm b/lib/pgBackRest/Common/Io/Buffered.pm index 1825ca3a4..fa03cb355 100644 --- a/lib/pgBackRest/Common/Io/Buffered.pm +++ b/lib/pgBackRest/Common/Io/Buffered.pm @@ -2,6 +2,7 @@ # Buffered Handle IO #################################################################################################################################### package pgBackRest::Common::Io::Buffered; +use parent 'pgBackRest::Common::Io::Filter'; use strict; use warnings FATAL => qw(all); @@ -15,6 +16,7 @@ use Time::HiRes qw(gettimeofday); use pgBackRest::Common::Exception; use pgBackRest::Common::Io::Base; +use pgBackRest::Common::Io::Handle; use pgBackRest::Common::Log; use pgBackRest::Common::Wait; @@ -27,8 +29,6 @@ use constant COMMON_IO_BUFFERED => __PACKAGE #################################################################################################################################### # CONSTRUCTOR #################################################################################################################################### -our @ISA = (); ## no critic (ClassHierarchies::ProhibitExplicitISA) - sub new { my $class = shift; @@ -37,20 +37,20 @@ sub new my ( $strOperation, - $self, + $oParent, $iTimeout, $lBufferMax, ) = logDebugParam ( __PACKAGE__ . '->new', \@_, - {name => 'self', trace => true}, + {name => 'oParent', trace => true}, {name => 'iTimeout', default => 0, trace => true}, {name => 'lBufferMax', default => COMMON_IO_BUFFER_MAX, trace => true}, ); # Bless with new class - @ISA = $self->isA(); ## no critic (ClassHierarchies::ProhibitExplicitISA) + my $self = $class->SUPER::new($oParent); bless $self, $class; # Set write handle so select object is created @@ -110,7 +110,7 @@ sub read if ($self->{oReadSelect}->can_read($fRemaining)) { # Read data into the buffer - my $iReadSize = $self->SUPER::read($tBufferRef, $iRemainingSize); + my $iReadSize = $self->parent()->read($tBufferRef, $iRemainingSize); # Check for EOF if ($iReadSize == 0) @@ -177,7 +177,7 @@ sub readLine if ($self->{oReadSelect}->can_read($fRemaining)) { - $iBufferRead = $self->SUPER::read( + $iBufferRead = $self->parent()->read( \$self->{tBuffer}, $self->{lBufferSize} >= $self->bufferMax() ? $self->bufferMax() : $self->bufferMax() - $self->{lBufferSize}); @@ -240,7 +240,7 @@ sub writeLine my $strBuffer = shift; $strBuffer .= "\n"; - return $self->SUPER::write(\$strBuffer); + return $self->parent()->write(\$strBuffer); } #################################################################################################################################### @@ -257,7 +257,7 @@ sub handleReadSet my $self = shift; my $fhRead = shift; - $self->SUPER::handleReadSet($fhRead); + $self->parent()->handleReadSet($fhRead); $self->{oReadSelect} = IO::Select->new(); $self->{oReadSelect}->add($self->handleRead()); diff --git a/lib/pgBackRest/Common/Io/Filter.pm b/lib/pgBackRest/Common/Io/Filter.pm new file mode 100644 index 000000000..94cf35695 --- /dev/null +++ b/lib/pgBackRest/Common/Io/Filter.pm @@ -0,0 +1,76 @@ +#################################################################################################################################### +# Base Filter Module +#################################################################################################################################### +package pgBackRest::Common::Io::Filter; + +use strict; +use warnings FATAL => qw(all); +use Carp qw(confess); +use English '-no_match_vars'; + +use Exporter qw(import); + our @EXPORT = qw(); +use Scalar::Util qw(blessed); + +use pgBackRest::Common::Log; + +#################################################################################################################################### +# new +#################################################################################################################################### +sub new +{ + my $class = shift; + + # Create the class hash + my $self = {}; + bless $self, $class; + + # Assign function parameters, defaults, and log debug info + ( + my $strOperation, + $self->{oParent}, + ) = + logDebugParam + ( + __PACKAGE__ . '->new', \@_, + {name => 'oParent', trace => true}, + ); + + # Return from function and log return values if any + return logDebugReturn + ( + $strOperation, + {name => 'self', value => $self} + ); +} + +#################################################################################################################################### +# Pass through for unimplemented methods +#################################################################################################################################### +sub bufferMax {shift->{oParent}->bufferMax()}; +sub className {shift->{oParent}->className()}; +sub close {shift->{oParent}->close()}; +sub eof {shift->{oParent}->eof()}; +sub error {shift->{oParent}->error(@_)}; +sub id {shift->{oParent}->id()}; +sub handleRead {shift->{oParent}->handleRead()}; +sub handleReadSet {shift->{oParent}->handleReadSet(@_)}; +sub handleWrite {shift->{oParent}->handleWrite()}; +sub handleWriteSet {shift->{oParent}->handleWriteSet(@_)}; +sub name {shift->{oParent}->name()}; +sub read {shift->{oParent}->read(@_)}; +sub readLine {shift->{oParent}->readLine(@_)}; +sub result {shift->{oParent}->result(@_)}; +sub resultAll {shift->{oParent}->resultAll()}; +sub resultSet {shift->{oParent}->resultSet(@_)}; +sub size {shift->{oParent}->size()}; +sub timeout {shift->{oParent}->timeout()}; +sub write {shift->{oParent}->write(@_)}; +sub writeLine {shift->{oParent}->writeLine(@_)}; + +#################################################################################################################################### +# Getters +#################################################################################################################################### +sub parent {shift->{oParent}} + +1; diff --git a/lib/pgBackRest/Common/Io/Process.pm b/lib/pgBackRest/Common/Io/Process.pm index 467e0a029..340bd8ec1 100644 --- a/lib/pgBackRest/Common/Io/Process.pm +++ b/lib/pgBackRest/Common/Io/Process.pm @@ -2,6 +2,7 @@ # Process Excecution, Management, and IO #################################################################################################################################### package pgBackRest::Common::Io::Process; +use parent 'pgBackRest::Common::Io::Filter'; use strict; use warnings FATAL => qw(all); @@ -33,8 +34,6 @@ use constant IO_ERROR_TIMEOUT => #################################################################################################################################### # new - use open3 to run the command and get the io handles #################################################################################################################################### -our @ISA = (); ## no critic (ClassHierarchies::ProhibitExplicitISA) - sub new { my $class = shift; @@ -43,18 +42,18 @@ sub new my ( $strOperation, - $self, + $oParent, $strCommand, ) = logDebugParam ( __PACKAGE__ . '->new', \@_, - {name => 'self', trace => true}, + {name => 'oParent', trace => true}, {name => 'strCommand', trace => true}, ); # Bless with new class - @ISA = $self->isA(); ## no critic (ClassHierarchies::ProhibitExplicitISA) + my $self = $class->SUPER::new($oParent); bless $self, $class; # Use open3 to run the command @@ -133,7 +132,7 @@ sub error if (defined($iCode)) { - $self->SUPER::error($iCode, $strMessage, $strDetail); + $self->parent()->error($iCode, $strMessage, $strDetail); } } else @@ -164,7 +163,7 @@ sub writeLine # abort if the remote process has already closed) $self->error(); - return $self->SUPER::writeLine($strBuffer); + return $self->parent()->writeLine($strBuffer); } #################################################################################################################################### @@ -179,7 +178,7 @@ sub close $self->error(undef, undef, undef, true); # Class parent close - $self->SUPER::close(); + $self->parent()->close(); } return true; diff --git a/lib/pgBackRest/Protocol/Storage/File.pm b/lib/pgBackRest/Protocol/Storage/File.pm index e93ccb986..700b12b25 100644 --- a/lib/pgBackRest/Protocol/Storage/File.pm +++ b/lib/pgBackRest/Protocol/Storage/File.pm @@ -140,7 +140,7 @@ sub close # On minion write the results else { - $self->{oProtocol}->outputWrite($self->{oFileIo}->{rhResult}); + $self->{oProtocol}->outputWrite($self->{oFileIo}->resultAll()); } # Delete protocol to prevent close from running again diff --git a/lib/pgBackRest/Storage/Filter/Gzip.pm b/lib/pgBackRest/Storage/Filter/Gzip.pm index 2da2ad8bf..144b9efae 100644 --- a/lib/pgBackRest/Storage/Filter/Gzip.pm +++ b/lib/pgBackRest/Storage/Filter/Gzip.pm @@ -2,6 +2,7 @@ # GZIP Filter #################################################################################################################################### package pgBackRest::Storage::Filter::Gzip; +use parent 'pgBackRest::Common::Io::Filter'; use strict; use warnings FATAL => qw(all); @@ -26,8 +27,6 @@ use constant STORAGE_FILTER_GZIP => __PACKAGE #################################################################################################################################### # CONSTRUCTOR #################################################################################################################################### -our @ISA = (); ## no critic (ClassHierarchies::ProhibitExplicitISA) - sub new { my $class = shift; @@ -36,7 +35,7 @@ sub new my ( $strOperation, - $self, + $oParent, $bWantGzip, $strCompressType, $iLevel, @@ -45,7 +44,7 @@ sub new logDebugParam ( __PACKAGE__ . '->new', \@_, - {name => 'self', trace => true}, + {name => 'oParent', trace => true}, {name => 'bWantGzip', optional => true, default => true, trace => true}, {name => 'strCompressType', optional => true, default => STORAGE_COMPRESS, trace => true}, {name => 'iLevel', optional => true, default => 6, trace => true}, @@ -53,7 +52,7 @@ sub new ); # Bless with new class - @ISA = $self->isA(); ## no critic (ClassHierarchies::ProhibitExplicitISA) + my $self = $class->SUPER::new($oParent); bless $self, $class; # Set variables @@ -108,7 +107,8 @@ sub errorCheck { logErrorResult( $self->{bWrite} ? ERROR_FILE_WRITE : ERROR_FILE_READ, - 'unable to ' . ($self->{strCompressType} eq STORAGE_COMPRESS ? 'deflate' : 'inflate') . " '$self->{strName}'", + 'unable to ' . ($self->{strCompressType} eq STORAGE_COMPRESS ? 'deflate' : 'inflate') . " '" . + $self->parent()->name() . "'", $self->{oZLib}->msg()); } @@ -135,7 +135,7 @@ sub read do { my $tUncompressedBuffer; - $lUncompressedSize = $self->SUPER::read(\$tUncompressedBuffer, $iSize); + $lUncompressedSize = $self->parent()->read(\$tUncompressedBuffer, $iSize); if ($lUncompressedSize > 0) { @@ -162,7 +162,7 @@ sub read { if (!defined($self->{tCompressedBuffer}) || length($self->{tCompressedBuffer}) == 0) { - $self->SUPER::read(\$self->{tCompressedBuffer}, $self->{lCompressBufferMax}); + $self->parent()->read(\$self->{tCompressedBuffer}, $self->{lCompressBufferMax}); } my $iZLibStatus = $self->{oZLib}->inflate($self->{tCompressedBuffer}, $self->{tUncompressedBuffer}); @@ -208,7 +208,7 @@ sub write # Only write when buffer is full if (defined($self->{tCompressedBuffer}) && length($self->{tCompressedBuffer}) > $self->{lCompressBufferMax}) { - $self->SUPER::write(\$self->{tCompressedBuffer}); + $self->parent()->write(\$self->{tCompressedBuffer}); $self->{tCompressedBuffer} = undef; } } @@ -221,7 +221,7 @@ sub write my $tUncompressedBuffer; my $iZLibStatus = $self->{oZLib}->inflate($tCompressedBuffer, $tUncompressedBuffer); - $self->SUPER::write(\$tUncompressedBuffer); + $self->parent()->write(\$tUncompressedBuffer); last if $iZLibStatus == Z_STREAM_END; @@ -251,14 +251,14 @@ sub close $self->errorCheck($self->{oZLib}->flush($self->{tCompressedBuffer})); # Write last compressed bytes - $self->SUPER::write(\$self->{tCompressedBuffer}); + $self->parent()->write(\$self->{tCompressedBuffer}); } } undef($self->{oZLib}); # Close io - return $self->SUPER::close(); + return $self->parent()->close(); } } diff --git a/lib/pgBackRest/Storage/Filter/Sha.pm b/lib/pgBackRest/Storage/Filter/Sha.pm index 71d429d0c..a73387da5 100644 --- a/lib/pgBackRest/Storage/Filter/Sha.pm +++ b/lib/pgBackRest/Storage/Filter/Sha.pm @@ -2,6 +2,7 @@ # SHA Filter #################################################################################################################################### package pgBackRest::Storage::Filter::Sha; +use parent 'pgBackRest::Common::Io::Filter'; use strict; use warnings FATAL => qw(all); @@ -23,8 +24,6 @@ use constant STORAGE_FILTER_SHA => __PACKAGE #################################################################################################################################### # CONSTRUCTOR #################################################################################################################################### -our @ISA = (); ## no critic (ClassHierarchies::ProhibitExplicitISA) - sub new { my $class = shift; @@ -33,18 +32,18 @@ sub new my ( $strOperation, - $self, + $oParent, $strAlgorithm, ) = logDebugParam ( __PACKAGE__ . '->new', \@_, - {name => 'self', trace => true}, + {name => 'oParent', trace => true}, {name => 'strAlgorithm', optional => true, default => 'sha1', trace => true}, ); # Bless with new class - @ISA = $self->isA(); ## no critic (ClassHierarchies::ProhibitExplicitISA) + my $self = $class->SUPER::new($oParent); bless $self, $class; # Set variables @@ -72,7 +71,7 @@ sub read # Call the io method my $tShaBuffer; - my $iActualSize = $self->SUPER::read(\$tShaBuffer, $iSize); + my $iActualSize = $self->parent()->read(\$tShaBuffer, $iSize); # Calculate sha for the returned buffer if ($iActualSize > 0) @@ -97,7 +96,7 @@ sub write $self->{oSha}->add($$rtBuffer); # Call the io method - return $self->SUPER::write($rtBuffer); + return $self->parent()->write($rtBuffer); } #################################################################################################################################### @@ -116,8 +115,10 @@ sub close delete($self->{oSha}); # Close io - return $self->SUPER::close(); + return $self->parent->close(); } + + return false; } 1; diff --git a/lib/pgBackRest/Storage/Posix/FileRead.pm b/lib/pgBackRest/Storage/Posix/FileRead.pm index 5dce51b73..2aaa907d8 100644 --- a/lib/pgBackRest/Storage/Posix/FileRead.pm +++ b/lib/pgBackRest/Storage/Posix/FileRead.pm @@ -100,5 +100,6 @@ sub close # Getters #################################################################################################################################### sub handle {shift->{fhFile}} +sub name {shift->{strName}} 1; diff --git a/lib/pgBackRest/Storage/Posix/FileWrite.pm b/lib/pgBackRest/Storage/Posix/FileWrite.pm index d06e59dfb..64a92ac77 100644 --- a/lib/pgBackRest/Storage/Posix/FileWrite.pm +++ b/lib/pgBackRest/Storage/Posix/FileWrite.pm @@ -188,7 +188,8 @@ sub close #################################################################################################################################### # Getters #################################################################################################################################### -sub opened {shift->{bOpened}} sub handle {shift->{fhFile}} +sub opened {shift->{bOpened}} +sub name {shift->{strName}} 1; diff --git a/lib/pgBackRest/Storage/S3/FileRead.pm b/lib/pgBackRest/Storage/S3/FileRead.pm index 79505b8eb..d490c1ff3 100644 --- a/lib/pgBackRest/Storage/S3/FileRead.pm +++ b/lib/pgBackRest/Storage/S3/FileRead.pm @@ -2,7 +2,7 @@ # S3 File Read #################################################################################################################################### package pgBackRest::Storage::S3::FileRead; -use parent 'pgBackRest::Common::Io::Base'; +use parent 'pgBackRest::Common::Http::Client'; use strict; use warnings FATAL => qw(all); @@ -22,8 +22,6 @@ use pgBackRest::Storage::S3::Request; #################################################################################################################################### # CONSTRUCTOR #################################################################################################################################### -our @ISA = (); ## no critic (ClassHierarchies::ProhibitExplicitISA) - sub new { my $class = shift; @@ -51,7 +49,6 @@ sub new # Bless with new class if file exists if (defined($self)) { - @ISA = $self->isA(); ## no critic (ClassHierarchies::ProhibitExplicitISA) bless $self, $class; } @@ -63,4 +60,9 @@ sub new ); } +#################################################################################################################################### +# Getters +#################################################################################################################################### +sub name {shift->{strName}} + 1; diff --git a/lib/pgBackRest/Storage/S3/FileWrite.pm b/lib/pgBackRest/Storage/S3/FileWrite.pm index 9241c08c5..9e3d38aa6 100644 --- a/lib/pgBackRest/Storage/S3/FileWrite.pm +++ b/lib/pgBackRest/Storage/S3/FileWrite.pm @@ -190,5 +190,6 @@ sub close # Getters #################################################################################################################################### sub opened {defined(shift->{strUploadId})} +sub name {shift->{strName}} 1; diff --git a/test/lib/pgBackRestTest/Common/DefineTest.pm b/test/lib/pgBackRestTest/Common/DefineTest.pm index 22c2a567a..1600014e4 100644 --- a/test/lib/pgBackRestTest/Common/DefineTest.pm +++ b/test/lib/pgBackRestTest/Common/DefineTest.pm @@ -164,7 +164,7 @@ my $oTestDef = }, { &TESTDEF_NAME => 'io-handle', - &TESTDEF_TOTAL => 7, + &TESTDEF_TOTAL => 6, &TESTDEF_COVERAGE => { diff --git a/test/lib/pgBackRestTest/Module/Archive/ArchivePushTest.pm b/test/lib/pgBackRestTest/Module/Archive/ArchivePushTest.pm index 414e1804a..e7860b3d9 100644 --- a/test/lib/pgBackRestTest/Module/Archive/ArchivePushTest.pm +++ b/test/lib/pgBackRestTest/Module/Archive/ArchivePushTest.pm @@ -86,7 +86,7 @@ sub initOption $self->optionTestSet(CFGOPT_DB_TIMEOUT, 5); $self->optionTestSet(CFGOPT_PROTOCOL_TIMEOUT, 6); - $self->optionTestSet(CFGOPT_ARCHIVE_TIMEOUT, 3); + $self->optionTestSet(CFGOPT_ARCHIVE_TIMEOUT, 5); } #################################################################################################################################### diff --git a/test/lib/pgBackRestTest/Module/Common/CommonIoHandleTest.pm b/test/lib/pgBackRestTest/Module/Common/CommonIoHandleTest.pm index 31a6c5c86..e2f4fbf4c 100644 --- a/test/lib/pgBackRestTest/Module/Common/CommonIoHandleTest.pm +++ b/test/lib/pgBackRestTest/Module/Common/CommonIoHandleTest.pm @@ -172,17 +172,6 @@ sub run $self->testResult(sub {$oIoHandle->{rhResult}}, '{Module::1 => 1, Module::2 => {value => 2}}', ' check all results'); } - ################################################################################################################################ - if ($self->begin('isA()')) - { - #--------------------------------------------------------------------------------------------------------------------------- - my $oIoHandle = $self->testResult( - sub {new pgBackRest::Common::Io::Handle('test', undef, undef)}, '[object]', 'new - no handles'); - - $self->testResult( - sub {$oIoHandle->isA()}, '(' . COMMON_IO_HANDLE . ', ' . COMMON_IO_BASE . ')', ' check isA'); - } - ################################################################################################################################ if ($self->begin('className()')) { diff --git a/test/lib/pgBackRestTest/Module/Storage/StorageFilterShaTest.pm b/test/lib/pgBackRestTest/Module/Storage/StorageFilterShaTest.pm index 595299230..ee385b9aa 100644 --- a/test/lib/pgBackRestTest/Module/Storage/StorageFilterShaTest.pm +++ b/test/lib/pgBackRestTest/Module/Storage/StorageFilterShaTest.pm @@ -72,6 +72,7 @@ sub run $self->testResult(sub {$oShaIo->read(\$tBuffer, 1)}, 0, ' read 0 bytes'); $self->testResult(sub {$oShaIo->close()}, true, ' close'); + $self->testResult(sub {$oShaIo->close()}, false, ' close again to make sure nothing bad happens'); $self->testResult($oShaIo->result(STORAGE_FILTER_SHA), '1c7e00fd09b9dd11fc2966590b3e3274645dd031', ' check hash'); $self->testResult(sha1_hex($tBuffer), '1c7e00fd09b9dd11fc2966590b3e3274645dd031', ' check content'); } diff --git a/test/lib/pgBackRestTest/Module/Storage/StorageS3Test.pm b/test/lib/pgBackRestTest/Module/Storage/StorageS3Test.pm index bdb3ffdff..6015cbc9d 100644 --- a/test/lib/pgBackRestTest/Module/Storage/StorageS3Test.pm +++ b/test/lib/pgBackRestTest/Module/Storage/StorageS3Test.pm @@ -185,6 +185,7 @@ sub run #--------------------------------------------------------------------------------------------------------------------------- my $oFileWrite = $self->testResult(sub {$oS3->openWrite("/path/to/${strFile}")}, '[object]', 'open write'); + $self->testResult(sub {$oFileWrite->name()}, "/path/to/${strFile}", ' check filename'); $self->testResult(sub {$oFileWrite->close()}, true, ' close without writing'); #---------------------------------------------------------------------------------------------------------------------------