1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-11-06 08:49:29 +02:00

Added archive-put unit tests.

Lots of other unit test improvements.
This commit is contained in:
David Steele
2014-07-15 22:32:41 -04:00
parent 8d398e4bff
commit 9d9dae418b
6 changed files with 314 additions and 279 deletions

View File

@@ -18,7 +18,7 @@ Simple Postgres Backup and Restore
* Database restore. * Database restore.
* --version param (with VERSION file written to directory). * --version param (with with version written into backup.manifest).
* Threading for archive-get and archive-put. * Threading for archive-get and archive-put.
@@ -30,6 +30,8 @@ Simple Postgres Backup and Restore
* Able to set timeout on ssh connection in config file. * Able to set timeout on ssh connection in config file.
* File->wait() function. Waits for a file or directory to exist with configurable retry and timeout.
## required perl modules ## required perl modules
* IPC::Run * IPC::Run

View File

@@ -289,6 +289,9 @@ if ($strOperation eq OP_ARCHIVE_PUSH)
my $strSection = $bArchiveLocal ? CONFIG_SECTION_ARCHIVE : CONFIG_SECTION_BACKUP; my $strSection = $bArchiveLocal ? CONFIG_SECTION_ARCHIVE : CONFIG_SECTION_BACKUP;
my $strArchivePath = config_load($strSection, CONFIG_KEY_PATH); my $strArchivePath = config_load($strSection, CONFIG_KEY_PATH);
# Get checksum flag
my $bChecksum = config_load(CONFIG_SECTION_BACKUP, CONFIG_KEY_CHECKSUM, true, "y") eq "y" ? true : false;
# Get the async compress flag. If compress_async=y then compression is off for the initial push when archiving locally # Get the async compress flag. If compress_async=y then compression is off for the initial push when archiving locally
my $bCompressAsync = false; my $bCompressAsync = false;
@@ -321,9 +324,6 @@ if ($strOperation eq OP_ARCHIVE_PUSH)
# Get the compress flag # Get the compress flag
my $bCompress = $bCompressAsync ? false : config_load($strSection, CONFIG_KEY_COMPRESS, true, "y") eq "y" ? true : false; my $bCompress = $bCompressAsync ? false : config_load($strSection, CONFIG_KEY_COMPRESS, true, "y") eq "y" ? true : false;
# Get the checksum flag
my $bChecksum = config_load($strSection, CONFIG_KEY_CHECKSUM, true, "y") eq "y" ? true : false;
# Create the file object # Create the file object
my $oFile = BackRest::File->new my $oFile = BackRest::File->new
( (
@@ -391,7 +391,6 @@ if ($strOperation eq OP_ARCHIVE_PUSH)
# Get the new operational flags # Get the new operational flags
my $bCompress = config_load(CONFIG_SECTION_BACKUP, CONFIG_KEY_COMPRESS, true, "y") eq "y" ? true : false; my $bCompress = config_load(CONFIG_SECTION_BACKUP, CONFIG_KEY_COMPRESS, true, "y") eq "y" ? true : false;
my $bChecksum = config_load(CONFIG_SECTION_BACKUP, CONFIG_KEY_CHECKSUM, true, "y") eq "y" ? true : false;
my $iArchiveMaxMB = config_load(CONFIG_SECTION_ARCHIVE, CONFIG_KEY_ARCHIVE_MAX_MB); my $iArchiveMaxMB = config_load(CONFIG_SECTION_ARCHIVE, CONFIG_KEY_ARCHIVE_MAX_MB);
# eval # eval

View File

@@ -13,6 +13,7 @@ use english;
use Carp; use Carp;
use File::Basename; use File::Basename;
use File::Copy "cp";
use lib dirname($0) . "/../lib"; use lib dirname($0) . "/../lib";
use BackRest::Utility; use BackRest::Utility;
@@ -147,7 +148,6 @@ sub BackRestTestBackup_Create
sub BackRestTestBackup_Test sub BackRestTestBackup_Test
{ {
my $strTest = shift; my $strTest = shift;
my $iTestRun = shift;
# If no test was specified, then run them all # If no test was specified, then run them all
if (!defined($strTest)) if (!defined($strTest))
@@ -157,9 +157,10 @@ sub BackRestTestBackup_Test
# Setup test variables # Setup test variables
my $iRun; my $iRun;
my $bCreate;
$strTestPath = BackRestTestCommon_TestPathGet(); $strTestPath = BackRestTestCommon_TestPathGet();
my $strStanza = BackRestTestCommon_StanzaGet(); my $strStanza = BackRestTestCommon_StanzaGet();
my $strUser = BackRestTestCommon_UserGet(); my $strUserBackRest = BackRestTestCommon_UserBackRestGet();
my $strGroup = BackRestTestCommon_GroupGet(); my $strGroup = BackRestTestCommon_GroupGet();
$strHost = BackRestTestCommon_HostGet(); $strHost = BackRestTestCommon_HostGet();
$strUserBackRest = BackRestTestCommon_UserBackRestGet(); $strUserBackRest = BackRestTestCommon_UserBackRestGet();
@@ -167,31 +168,153 @@ sub BackRestTestBackup_Test
# Print test banner # Print test banner
&log(INFO, "BACKUP MODULE ******************************************************************"); &log(INFO, "BACKUP MODULE ******************************************************************");
if ($strTest eq 'all' || $strTest eq 'archive') #-------------------------------------------------------------------------------------------------------------------------------
# Create remote
#-------------------------------------------------------------------------------------------------------------------------------
my $oRemote = BackRest::Remote->new
(
strHost => $strHost,
strUser => $strUserBackRest,
strCommand => BackRestTestCommon_CommandRemoteGet()
);
#-------------------------------------------------------------------------------------------------------------------------------
# Test archive
#-------------------------------------------------------------------------------------------------------------------------------
if ($strTest eq 'all' || $strTest eq 'archive-push')
{ {
$iRun = 0; $iRun = 0;
$bCreate = true;
my $strXlogPath = BackRestTestCommon_DbCommonPathGet() . '/pg_xlog';
my $strArchiveChecksum = '1c7e00fd09b9dd11fc2966590b3e3274645dd031';
my $iArchiveMax = 3;
my $oFile;
&log(INFO, "Test Full Backup\n"); &log(INFO, "Test Archiving\n");
for (my $bRemote = false; $bRemote <= true; $bRemote++) for (my $bRemote = false; $bRemote <= true; $bRemote++)
{ {
for (my $bCompress = false; $bCompress <= true; $bCompress++)
{
for (my $bChecksum = false; $bChecksum <= true; $bChecksum++)
{
for (my $bArchiveAsync = false; $bArchiveAsync <= $bRemote; $bArchiveAsync++)
{
for (my $bCompressAsync = false; $bCompressAsync <= true; $bCompressAsync++)
{
# Increment the run, log, and decide whether this unit test should be run
if (!BackRestTestCommon_Run(++$iRun,
"rmt ${bRemote}, cmp ${bCompress}, chk ${bChecksum}, " .
"arc_async ${bArchiveAsync}, cmp_async ${bCompressAsync}")) {next}
# Create the test directory
if ($bCreate)
{
# Create the file object
$oFile = (BackRest::File->new
(
strStanza => $strStanza,
strBackupPath => BackRestTestCommon_BackupPathGet(),
strRemote => $bRemote ? 'backup' : undef,
oRemote => $bRemote ? $oRemote : undef
))->clone();
BackRestTestBackup_Create($bRemote, false); BackRestTestBackup_Create($bRemote, false);
for (my $bArchiveLocal = false; $bArchiveLocal <= $bRemote; $bArchiveLocal++) # Create the db/common/pg_xlog directory
mkdir($strXlogPath)
or confess 'Unable to create ${strXlogPath} path';
$bCreate = false;
}
BackRestTestCommon_ConfigCreate('db',
($bRemote ? REMOTE_BACKUP : undef),
$bCompress,
$bChecksum, # checksum
undef, # hardlink
undef, # thread-max
$bArchiveAsync,
$bCompressAsync);
my $strCommand = BackRestTestCommon_CommandMainGet() . ' --config=' . BackRestTestCommon_DbPathGet() .
"/pg_backrest.conf --stanza=db archive-push";
# Loop through backups
for (my $iBackup = 1; $iBackup <= 3; $iBackup++)
{ {
$iRun++; my $strArchiveFile;
# &log(INFO, "run ${iRun} - " . # Loop through archive files
# "remote ${bRemote}, archive_local ${bArchiveLocal}, full ${iFull}"); for (my $iArchive = 1; $iArchive <= $iArchiveMax; $iArchive++)
{
# Construct the archive filename
my $iArchiveNo = (($iBackup - 1) * $iArchiveMax + ($iArchive - 1)) + 1;
if ($iArchiveNo > 255)
{
confess "backup total * archive total cannot be greater than 255";
} }
# BackRestTestBackup_Drop(); $strArchiveFile = uc(sprintf("0000000100000001%08x", $iArchiveNo));
&log(INFO, " backup " . sprintf("%02d", $iBackup) .
", archive " .sprintf("%02x", $iArchive) .
" - ${strArchiveFile}");
cp(BackRestTestCommon_DataPathGet() . '/test.archive.bin', "${strXlogPath}/${strArchiveFile}");
BackRestTestCommon_Execute($strCommand . " ${strXlogPath}/${strArchiveFile}");
# Build the archive name to check for at the destination
my $strArchiveCheck = $strArchiveFile;
if ($bChecksum)
{
$strArchiveCheck .= "-${strArchiveChecksum}";
}
if ($bCompress)
{
$strArchiveCheck .= ".gz";
}
if (!$oFile->exists(PATH_BACKUP_ARCHIVE, $strArchiveCheck))
{
sleep(1);
if (!$oFile->exists(PATH_BACKUP_ARCHIVE, $strArchiveCheck))
{
confess "unable to find " . $oFile->path_get(PATH_BACKUP_ARCHIVE, $strArchiveCheck);
}
} }
} }
# !!! Need to put in tests for .backup files here
}
}
}
}
}
$bCreate = true;
}
if (BackRestTestCommon_Cleanup())
{
&log(INFO, 'cleanup');
BackRestTestBackup_Drop();
}
}
#-------------------------------------------------------------------------------------------------------------------------------
# Test full
#-------------------------------------------------------------------------------------------------------------------------------
if ($strTest eq 'all' || $strTest eq 'full') if ($strTest eq 'all' || $strTest eq 'full')
{ {
$iRun = 0; $iRun = 0;
$bCreate = true;
&log(INFO, "Test Full Backup\n"); &log(INFO, "Test Full Backup\n");
@@ -199,37 +322,47 @@ sub BackRestTestBackup_Test
{ {
for (my $bLarge = false; $bLarge <= false; $bLarge++) for (my $bLarge = false; $bLarge <= false; $bLarge++)
{ {
BackRestTestBackup_Create($bRemote); for (my $bArchiveAsync = false; $bArchiveAsync <= $bRemote; $bArchiveAsync++)
for (my $bArchiveLocal = false; $bArchiveLocal <= $bRemote; $bArchiveLocal++)
{ {
for (my $bHardlink = false; $bHardlink <= true; $bHardlink++) for (my $bHardlink = false; $bHardlink <= true; $bHardlink++)
{ {
my %oDbConfigHash; # Increment the run, log, and decide whether this unit test should be run
my %oBackupConfigHash; if (!BackRestTestCommon_Run(++$iRun,
"rmt ${bRemote}, lrg ${bLarge}, arc_async ${bArchiveAsync}, " .
"hardlink ${bHardlink}")) {next}
# Confgure hard-linking # Create the test directory
if ($bHardlink) if ($bCreate)
{ {
$oBackupConfigHash{'global:backup'}{hardlink} = 'y'; BackRestTestBackup_Create($bRemote);
$bCreate = false;
} }
# if (!$bArchiveLocal) # Create db config
# {
# next;
# }
BackRestTestCommon_ConfigCreate('db', BackRestTestCommon_ConfigCreate('db',
($bRemote ? REMOTE_BACKUP : undef), $bArchiveLocal, \%oDbConfigHash); ($bRemote ? REMOTE_BACKUP : undef),
undef, # compress
undef, # checksum
undef, # hardlink
undef, # thread-max
$bArchiveAsync, # archive-async
undef # compressasync
);
# Create backup config
BackRestTestCommon_ConfigCreate('backup', BackRestTestCommon_ConfigCreate('backup',
($bRemote ? REMOTE_DB : undef), $bArchiveLocal, \%oBackupConfigHash); ($bRemote ? REMOTE_DB : undef),
undef, # compress
undef, # checksum
$bHardlink, # hardlink
8, # thread-max
undef, # archive-async
undef, # compress-async
);
for (my $iFull = 1; $iFull <= 1; $iFull++) for (my $iFull = 1; $iFull <= 1; $iFull++)
{ {
$iRun++; &log(INFO, " full " . sprintf("%02d", $iFull));
&log(INFO, "run ${iRun} - " .
"remote ${bRemote}, large ${bLarge}, archive_local ${bArchiveLocal}, full ${iFull}");
my $strCommand = BackRestTestCommon_CommandMainGet() . ' --config=' . BackRestTestCommon_BackupPathGet() . my $strCommand = BackRestTestCommon_CommandMainGet() . ' --config=' . BackRestTestCommon_BackupPathGet() .
"/pg_backrest.conf --type=incr --stanza=${strStanza} backup"; "/pg_backrest.conf --type=incr --stanza=${strStanza} backup";
@@ -241,9 +374,7 @@ sub BackRestTestBackup_Test
{ {
$iRun++; $iRun++;
&log(INFO, "run ${iRun} - " . &log(INFO, " incr " . sprintf("%02d", $iIncr));
"remote ${bRemote}, large ${bLarge}, archive_local ${bArchiveLocal}, hardlink ${bHardlink}, " .
"full ${iFull}, incr ${iIncr}");
BackRestTestCommon_Execute($strCommand, $bRemote); BackRestTestCommon_Execute($strCommand, $bRemote);
} }
@@ -251,134 +382,16 @@ sub BackRestTestBackup_Test
} }
} }
$bCreate = true;
}
}
if (BackRestTestCommon_Cleanup())
{
&log(INFO, 'cleanup');
BackRestTestBackup_Drop(); BackRestTestBackup_Drop();
} }
} }
}
#-------------------------------------------------------------------------------------------------------------------------------
# Test path_create()
#-------------------------------------------------------------------------------------------------------------------------------
# if ($strTest eq 'all' || $strTest eq 'path_create')
# {
# $iRun = 0;
#
# &log(INFO, "Test File->path_create()\n");
#
# # Loop through local/remote
# for (my $bRemote = 0; $bRemote <= 1; $bRemote++)
# {
# # Create the file object
# my $oFile = (BackRest::File->new
# (
# strStanza => $strStanza,
# strBackupPath => $strTestPath,
# strRemote => $bRemote ? 'backup' : undef,
# oRemote => $bRemote ? $oRemote : undef
# ))->clone();
#
# # Loop through exists (does the paren path exist?)
# for (my $bExists = 0; $bExists <= 1; $bExists++)
# {
# # Loop through exists (does the paren path exist?)
# for (my $bError = 0; $bError <= 1; $bError++)
# {
# # Loop through permission (permission will be set on true)
# for (my $bPermission = 0; $bPermission <= $bExists; $bPermission++)
# {
# my $strPathType = PATH_BACKUP_CLUSTER;
#
# $iRun++;
#
# if (defined($iTestRun) && $iTestRun != $iRun)
# {
# next;
# }
#
# &log(INFO, "run ${iRun} - " .
# "remote ${bRemote}, exists ${bExists}, error ${bError}, permission ${bPermission}");
#
# # Setup test directory
# BackRestTestFile_Setup($bError);
#
# mkdir("$strTestPath/backup") or confess "Unable to create test/backup directory";
# mkdir("$strTestPath/backup/db") or confess "Unable to create test/backup/db directory";
#
# my $strPath = "path";
# my $strPermission;
#
# # If permission then set one (other than the default)
# if ($bPermission)
# {
# $strPermission = "0700";
# }
#
# # If not exists then set the path to something bogus
# if ($bError)
# {
# $strPath = "${strTestPath}/private/path";
# $strPathType = PATH_BACKUP_ABSOLUTE;
# }
# elsif (!$bExists)
# {
# $strPath = "error/path";
# }
#
# # Execute in eval to catch errors
# my $bErrorExpected = !$bExists || $bError;
#
# eval
# {
# $oFile->path_create($strPathType, $strPath, $strPermission);
# };
#
# # Check for errors
# if ($@)
# {
# # Ignore errors if the path did not exist
# if ($bErrorExpected)
# {
# next;
# }
#
# confess "error raised: " . $@ . "\n";
# }
#
# if ($bErrorExpected)
# {
# confess 'error was expected';
# }
#
# # Make sure the path was actually created
# my $strPathCheck = $oFile->path_get($strPathType, $strPath);
#
# unless (-e $strPathCheck)
# {
# confess "path was not created";
# }
#
# # Check that the permissions were set correctly
# my $oStat = lstat($strPathCheck);
#
# if (!defined($oStat))
# {
# confess "unable to stat ${strPathCheck}";
# }
#
# if ($bPermission)
# {
# if ($strPermission ne sprintf("%04o", S_IMODE($oStat->mode)))
# {
# confess "permissions were not set to {$strPermission}";
# }
# }
# }
# }
# }
# }
# }
# BackRestTestBackup_Setup(true);
} }
1; 1;

View File

@@ -23,7 +23,7 @@ use BackRest::File;
use Exporter qw(import); use Exporter qw(import);
our @EXPORT = qw(BackRestTestCommon_Setup BackRestTestCommon_Execute BackRestTestCommon_ExecuteBackRest our @EXPORT = qw(BackRestTestCommon_Setup BackRestTestCommon_Execute BackRestTestCommon_ExecuteBackRest
BackRestTestCommon_ConfigCreate BackRestTestCommon_ConfigCreate BackRestTestCommon_Run BackRestTestCommon_Cleanup
BackRestTestCommon_StanzaGet BackRestTestCommon_CommandMainGet BackRestTestCommon_CommandRemoteGet BackRestTestCommon_StanzaGet BackRestTestCommon_CommandMainGet BackRestTestCommon_CommandRemoteGet
BackRestTestCommon_HostGet BackRestTestCommon_UserGet BackRestTestCommon_GroupGet BackRestTestCommon_HostGet BackRestTestCommon_UserGet BackRestTestCommon_GroupGet
BackRestTestCommon_UserBackRestGet BackRestTestCommon_TestPathGet BackRestTestCommon_DataPathGet BackRestTestCommon_UserBackRestGet BackRestTestCommon_TestPathGet BackRestTestCommon_DataPathGet
@@ -45,6 +45,40 @@ my $strCommonArchivePath;
my $strCommonDbPath; my $strCommonDbPath;
my $strCommonDbCommonPath; my $strCommonDbCommonPath;
my $iCommonDbPort; my $iCommonDbPort;
my $iModuleTestRun;
my $bDryRun;
my $bNoCleanup;
####################################################################################################################################
# BackRestTestBackup_Run
####################################################################################################################################
sub BackRestTestCommon_Run
{
my $iRun = shift;
my $strLog = shift;
if (defined($iModuleTestRun) && $iModuleTestRun != $iRun)
{
return false;
}
&log(INFO, "run " . sprintf("%03d", $iRun) . " - " . $strLog);
if ($bDryRun)
{
return false;
}
return true;
}
####################################################################################################################################
# BackRestTestBackup_Cleanup
####################################################################################################################################
sub BackRestTestCommon_Cleanup
{
return !$bNoCleanup && !$bDryRun;
}
#################################################################################################################################### ####################################################################################################################################
# BackRestTestBackup_Execute # BackRestTestBackup_Execute
@@ -68,7 +102,7 @@ sub BackRestTestCommon_Execute
my $strError; my $strError;
my $hError; my $hError;
open($hError, '>', \$strError) or confess "unable to open handle to stderr string: $!\n"; open($hError, '>', \$strError) or confess "unable to open handle to stderr string: $!\n";
# #
my $strOut; my $strOut;
my $hOut; my $hOut;
open($hOut, '>', \$strOut) or confess "unable to open handle to stdout string: $!\n"; open($hOut, '>', \$strOut) or confess "unable to open handle to stdout string: $!\n";
@@ -103,6 +137,10 @@ sub BackRestTestCommon_Execute
#################################################################################################################################### ####################################################################################################################################
sub BackRestTestCommon_Setup sub BackRestTestCommon_Setup
{ {
my $iModuleTestRunParam = shift;
my $bDryRunParam = shift;
my $bNoCleanupParam = shift;
$strCommonStanza = "db"; $strCommonStanza = "db";
$strCommonCommandMain = '/Users/dsteele/pg_backrest/bin/pg_backrest.pl'; $strCommonCommandMain = '/Users/dsteele/pg_backrest/bin/pg_backrest.pl';
$strCommonCommandRemote = '/Users/dsteele/pg_backrest/bin/pg_backrest_remote.pl'; $strCommonCommandRemote = '/Users/dsteele/pg_backrest/bin/pg_backrest_remote.pl';
@@ -118,6 +156,9 @@ sub BackRestTestCommon_Setup
$strCommonDbPath = "${strCommonTestPath}/db"; $strCommonDbPath = "${strCommonTestPath}/db";
$strCommonDbCommonPath = "${strCommonTestPath}/db/common"; $strCommonDbCommonPath = "${strCommonTestPath}/db/common";
$iCommonDbPort = 6543; $iCommonDbPort = 6543;
$iModuleTestRun = $iModuleTestRunParam;
$bDryRun = $bDryRunParam;
$bNoCleanup = $bNoCleanupParam;
} }
#################################################################################################################################### ####################################################################################################################################
@@ -127,8 +168,13 @@ sub BackRestTestCommon_ConfigCreate
{ {
my $strLocal = shift; my $strLocal = shift;
my $strRemote = shift; my $strRemote = shift;
my $bCompress = shift;
my $bChecksum = shift;
my $bHardlink = shift;
my $iThreadMax = shift;
my $bArchiveLocal = shift; my $bArchiveLocal = shift;
my $oParamHashRef = shift; my $bCompressAsync = shift;
# my $oParamHashRef = shift;
my %oParamHash; my %oParamHash;
tie %oParamHash, 'Config::IniFiles'; tie %oParamHash, 'Config::IniFiles';
@@ -151,36 +197,58 @@ sub BackRestTestCommon_ConfigCreate
{ {
$oParamHash{'db:command:option'}{'psql'} = "--port=${iCommonDbPort}"; $oParamHash{'db:command:option'}{'psql'} = "--port=${iCommonDbPort}";
$oParamHash{'global:log'}{'level-console'} = 'error'; $oParamHash{'global:log'}{'level-console'} = 'error';
if (defined($bHardlink) && $bHardlink)
{
$oParamHash{'global:backup'}{'hardlink'} = 'y';
}
} }
elsif ($strLocal eq REMOTE_DB) elsif ($strLocal eq REMOTE_DB)
{ {
$oParamHash{'global:log'}{'level-console'} = 'trace'; $oParamHash{'global:log'}{'level-console'} = 'trace';
# $oParamHash{'global:backup'}{compress} = 'n';
if ($bArchiveLocal)
{
$oParamHash{'global:archive'}{path} = BackRestTestCommon_ArchivePathGet();
if (!$bCompressAsync)
{
$oParamHash{'global:archive'}{'compress_async'} = 'n';
}
}
} }
else else
{ {
confess "invalid local type ${strLocal}"; confess "invalid local type ${strLocal}";
} }
if ($bArchiveLocal) if (defined($bCompress) && !$bCompress)
{ {
$oParamHash{'global:archive'}{path} = BackRestTestCommon_ArchivePathGet(); $oParamHash{'global:backup'}{'compress'} = 'n';
# $oParamHash{'global:archive'}{compress} = 'n'; }
if (defined($bChecksum) && !$bChecksum)
{
$oParamHash{'global:backup'}{'checksum'} = 'n';
} }
$oParamHash{$strCommonStanza}{'path'} = $strCommonDbCommonPath; $oParamHash{$strCommonStanza}{'path'} = $strCommonDbCommonPath;
$oParamHash{'global:backup'}{'path'} = $strCommonBackupPath; $oParamHash{'global:backup'}{'path'} = $strCommonBackupPath;
$oParamHash{'global:backup'}{'thread-max'} = '8';
if (defined($iThreadMax))
{
$oParamHash{'global:backup'}{'thread-max'} = $iThreadMax;
}
$oParamHash{'global:log'}{'level-file'} = 'trace'; $oParamHash{'global:log'}{'level-file'} = 'trace';
foreach my $strSection (keys $oParamHashRef) # foreach my $strSection (keys $oParamHashRef)
{ # {
foreach my $strKey (keys ${$oParamHashRef}{$strSection}) # foreach my $strKey (keys ${$oParamHashRef}{$strSection})
{ # {
$oParamHash{$strSection}{$strKey} = ${$oParamHashRef}{$strSection}{$strKey}; # $oParamHash{$strSection}{$strKey} = ${$oParamHashRef}{$strSection}{$strKey};
} # }
} # }
# Write out the configuration file # Write out the configuration file
my $strFile = BackRestTestCommon_TestPathGet() . '/pg_backrest.conf'; my $strFile = BackRestTestCommon_TestPathGet() . '/pg_backrest.conf';

View File

@@ -68,7 +68,6 @@ sub BackRestTestFile_Setup
sub BackRestTestFile_Test sub BackRestTestFile_Test
{ {
my $strTest = shift; my $strTest = shift;
my $iTestRun = shift;
# If no test was specified, then run them all # If no test was specified, then run them all
if (!defined($strTest)) if (!defined($strTest))
@@ -127,15 +126,9 @@ sub BackRestTestFile_Test
{ {
my $strPathType = PATH_BACKUP_CLUSTER; my $strPathType = PATH_BACKUP_CLUSTER;
$iRun++; # Increment the run, log, and decide whether this unit test should be run
if (!BackRestTestCommon_Run(++$iRun,
if (defined($iTestRun) && $iTestRun != $iRun) "rmt ${bRemote}, err ${bError}, prm ${bPermission}")) {next}
{
next;
}
&log(INFO, "run ${iRun} - " .
"remote ${bRemote}, error ${bError}, permission ${bPermission}");
# Setup test directory # Setup test directory
BackRestTestFile_Setup($bError); BackRestTestFile_Setup($bError);
@@ -248,17 +241,11 @@ sub BackRestTestFile_Test
# Loop through create # Loop through create
for (my $bCreate = 0; $bCreate <= $bDestinationExists; $bCreate++) for (my $bCreate = 0; $bCreate <= $bDestinationExists; $bCreate++)
{ {
$iRun++; # Increment the run, log, and decide whether this unit test should be run
if (!BackRestTestCommon_Run(++$iRun,
if (defined($iTestRun) && $iTestRun != $iRun) "src_exists $bSourceExists, src_error $bSourceError, " .
{ ", dst_exists $bDestinationExists, dst_error $bDestinationError, " .
next; "dst_create $bCreate")) {next}
}
&log(INFO, "run ${iRun} - " .
"remote $bRemote" .
", src_exists $bSourceExists, src_error $bSourceError" .
", dst_exists $bDestinationExists, dst_error $bDestinationError, dst_create $bCreate");
# Setup test directory # Setup test directory
BackRestTestFile_Setup($bSourceError || $bDestinationError); BackRestTestFile_Setup($bSourceError || $bDestinationError);
@@ -343,15 +330,8 @@ sub BackRestTestFile_Test
{ {
for (my $bError = 0; $bError <= 1; $bError++) for (my $bError = 0; $bError <= 1; $bError++)
{ {
$iRun++; if (!BackRestTestCommon_Run(++$iRun,
"rmt $bRemote, exists $bExists, err $bError")) {next}
if (defined($iTestRun) && $iTestRun != $iRun)
{
next;
}
&log(INFO, "run ${iRun} - " .
"remote $bRemote, exists $bExists, error $bError");
# Setup test directory # Setup test directory
BackRestTestFile_Setup($bError); BackRestTestFile_Setup($bError);
@@ -452,15 +432,8 @@ sub BackRestTestFile_Test
{ {
for (my $bExists = 0; $bExists <= 1; $bExists++) for (my $bExists = 0; $bExists <= 1; $bExists++)
{ {
$iRun++; if (!BackRestTestCommon_Run(++$iRun,
"rmt $bRemote, exists $bExists, err $bError")) {next}
if (defined($iTestRun) && $iTestRun != $iRun)
{
next;
}
&log(INFO, "run ${iRun} - " .
"remote $bRemote, error $bError, exists $bExists");
# Setup test directory # Setup test directory
BackRestTestFile_Setup($bError); BackRestTestFile_Setup($bError);
@@ -625,17 +598,10 @@ sub BackRestTestFile_Test
# Loop through error # Loop through error
for (my $bError = 0; $bError <= 1; $bError++) for (my $bError = 0; $bError <= 1; $bError++)
{ {
$iRun++; if (!BackRestTestCommon_Run(++$iRun,
"rmt $bRemote, err $bError, exists $bExists, " .
if (defined($iTestRun) && $iTestRun != $iRun)
{
next;
}
&log(INFO, "run ${iRun} - " .
"remote $bRemote, error $bError, exists $bExists, " .
"expression " . (defined($strExpression) ? $strExpression : "[undef]") . ", " . "expression " . (defined($strExpression) ? $strExpression : "[undef]") . ", " .
"sort " . (defined($strSort) ? $strSort : "[undef]")); "sort " . (defined($strSort) ? $strSort : "[undef]"))) {next}
# Setup test directory # Setup test directory
BackRestTestFile_Setup($bError); BackRestTestFile_Setup($bError);
@@ -740,16 +706,9 @@ sub BackRestTestFile_Test
# Loop through ignore missing # Loop through ignore missing
for (my $bIgnoreMissing = 0; $bIgnoreMissing <= 1; $bIgnoreMissing++) for (my $bIgnoreMissing = 0; $bIgnoreMissing <= 1; $bIgnoreMissing++)
{ {
$iRun++; if (!BackRestTestCommon_Run(++$iRun,
"rmt ${bRemote}, err = $bError, exists ${bExists}, tmp ${bTemp}, " .
if (defined($iTestRun) && $iTestRun != $iRun) "ignore missing ${bIgnoreMissing}")) {next}
{
next;
}
&log(INFO, "run ${iRun} - " .
"remote ${bRemote}, error = $bError, exists ${bExists}, temp ${bTemp} " .
", ignore missing ${bIgnoreMissing}");
# Setup test directory # Setup test directory
BackRestTestFile_Setup($bError); BackRestTestFile_Setup($bError);
@@ -844,15 +803,8 @@ sub BackRestTestFile_Test
# Loop through exists # Loop through exists
for (my $bExists = 0; $bExists <= 1; $bExists++) for (my $bExists = 0; $bExists <= 1; $bExists++)
{ {
$iRun++; if (!BackRestTestCommon_Run(++$iRun,
"rmt $bRemote, err $bError, exists $bExists")) {next}
if (defined($iTestRun) && $iTestRun != $iRun)
{
next;
}
&log(INFO, "run ${iRun} - " .
"remote $bRemote, error $bError, exists $bExists");
# Setup test directory # Setup test directory
BackRestTestFile_Setup($bError); BackRestTestFile_Setup($bError);
@@ -931,15 +883,8 @@ sub BackRestTestFile_Test
# Loop through exists # Loop through exists
for (my $bError = 0; $bError <= $bExists; $bError++) for (my $bError = 0; $bError <= $bExists; $bError++)
{ {
$iRun++; if (!BackRestTestCommon_Run(++$iRun,
"rmt $bRemote, err $bError, exists $bExists")) {next}
if (defined($iTestRun) && $iTestRun != $iRun)
{
next;
}
&log(INFO, "run ${iRun} - " .
"remote $bRemote, exists $bExists, error ${bError}");
# Setup test directory # Setup test directory
BackRestTestFile_Setup($bError); BackRestTestFile_Setup($bError);
@@ -1057,21 +1002,17 @@ sub BackRestTestFile_Test
my $strDestinationPathType = $bDestinationPathType ? PATH_DB_ABSOLUTE : PATH_BACKUP_ABSOLUTE; my $strDestinationPathType = $bDestinationPathType ? PATH_DB_ABSOLUTE : PATH_BACKUP_ABSOLUTE;
my $strDestinationPath = $bDestinationPathType ? "db" : "backup"; my $strDestinationPath = $bDestinationPathType ? "db" : "backup";
$iRun++; if (!BackRestTestCommon_Run(++$iRun,
"rmt " .
if (defined($iTestRun) && $iTestRun != $iRun) (defined($strRemote) && ($strRemote eq $strSourcePath ||
{ $strRemote eq $strDestinationPath) ? 1 : 0) .
next;
}
&log(INFO, "run ${iRun} - rmt " .
(defined($strRemote) && ($strRemote eq $strSourcePath || $strRemote eq $strDestinationPath) ? 1 : 0) .
", lrg ${bLarge}, " . ", lrg ${bLarge}, " .
"srcpth " . (defined($strRemote) && $strRemote eq $strSourcePath ? "remote" : "local") . "srcpth " . (defined($strRemote) && $strRemote eq $strSourcePath ? "rmt" : "lcl") .
":${strSourcePath}, srccmp $bSourceCompressed, srcmiss ${bSourceMissing}, " . ":${strSourcePath}, srccmp $bSourceCompressed, srcmiss ${bSourceMissing}, " .
"srcignmiss ${bSourceIgnoreMissing}, " . "srcignmiss ${bSourceIgnoreMissing}, " .
"dstpth " . (defined($strRemote) && $strRemote eq $strDestinationPath ? "remote" : "local") . "dstpth " .
":${strDestinationPath}, dstcmp $bDestinationCompress"); (defined($strRemote) && $strRemote eq $strDestinationPath ? "rmt" : "lcl") .
":${strDestinationPath}, dstcmp $bDestinationCompress")) {next}
# Setup test directory # Setup test directory
BackRestTestFile_Setup(false); BackRestTestFile_Setup(false);
@@ -1198,6 +1139,11 @@ sub BackRestTestFile_Test
} }
} }
} }
if (BackRestTestCommon_Cleanup())
{
BackRestTestFile_Setup(undef, true);
}
} }
1; 1;

View File

@@ -29,11 +29,15 @@ my $strLogLevel = 'off'; # Log level for tests
my $strModule = 'all'; my $strModule = 'all';
my $strModuleTest = 'all'; my $strModuleTest = 'all';
my $iModuleTestRun = undef; my $iModuleTestRun = undef;
my $bDryRun = false;
my $bNoCleanup = false;
GetOptions ("log-level=s" => \$strLogLevel, GetOptions ("log-level=s" => \$strLogLevel,
"module=s" => \$strModule, "module=s" => \$strModule,
"module-test=s" => \$strModuleTest, "module-test=s" => \$strModuleTest,
"module-test-run=s" => \$iModuleTestRun) "module-test-run=s" => \$iModuleTestRun,
"dry-run" => \$bDryRun,
"no-cleanup" => \$bNoCleanup)
or die("Error in command line arguments\n"); or die("Error in command line arguments\n");
#################################################################################################################################### ####################################################################################################################################
@@ -55,9 +59,6 @@ if (defined($iModuleTestRun) && $strModuleTest eq 'all')
confess "--module-test must be provided for run \"${iModuleTestRun}\""; confess "--module-test must be provided for run \"${iModuleTestRun}\"";
} }
BackRestTestCommon_Setup();
#################################################################################################################################### ####################################################################################################################################
# Clean whitespace # Clean whitespace
#################################################################################################################################### ####################################################################################################################################
@@ -96,16 +97,22 @@ if (!$bMatch)
#################################################################################################################################### ####################################################################################################################################
# Runs tests # Runs tests
#################################################################################################################################### ####################################################################################################################################
&log(INFO, "Testing with test_path = " . BackRestTestCommon_TestPathGet() . ", host = {strHost}, user = {strUser}, group = {strGroup}"); BackRestTestCommon_Setup($iModuleTestRun, $bDryRun, $bNoCleanup);
# &log(INFO, "Testing with test_path = " . BackRestTestCommon_TestPathGet() . ", host = {strHost}, user = {strUser}, " .
# "group = {strGroup}");
if ($strModule eq 'all' || $strModule eq "file") if ($strModule eq 'all' || $strModule eq "file")
{ {
BackRestTestFile_Test($strModuleTest, $iModuleTestRun); BackRestTestFile_Test($strModuleTest);
} }
if ($strModule eq 'all' || $strModule eq "backup") if ($strModule eq 'all' || $strModule eq "backup")
{ {
BackRestTestBackup_Test($strModuleTest, $iModuleTestRun); BackRestTestBackup_Test($strModuleTest);
} }
&log(ASSERT, "TESTS COMPLETED SUCCESSFULLY (DESPITE ANY ERROR MESSAGES YOU SAW)"); if (!$bDryRun)
{
&log(ASSERT, "TESTS COMPLETED SUCCESSFULLY (DESPITE ANY ERROR MESSAGES YOU SAW)");
}