2014-06-22 17:30:17 +03:00
|
|
|
#!/usr/bin/perl
|
|
|
|
####################################################################################################################################
|
|
|
|
# CommonTest.pm - Common globals used for testing
|
|
|
|
####################################################################################################################################
|
|
|
|
package BackRestTest::CommonTest;
|
|
|
|
|
|
|
|
####################################################################################################################################
|
|
|
|
# Perl includes
|
|
|
|
####################################################################################################################################
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use english;
|
|
|
|
use Carp;
|
|
|
|
|
|
|
|
use File::Basename;
|
|
|
|
use Cwd 'abs_path';
|
2014-06-22 21:51:28 +03:00
|
|
|
use Config::IniFiles;
|
2014-07-03 02:15:21 +03:00
|
|
|
use IPC::Open3;
|
2014-06-22 17:30:17 +03:00
|
|
|
|
2014-06-22 18:56:01 +03:00
|
|
|
use lib dirname($0) . "/../lib";
|
|
|
|
use BackRest::Utility;
|
2014-06-22 21:51:28 +03:00
|
|
|
use BackRest::File;
|
2014-06-22 18:56:01 +03:00
|
|
|
|
2014-06-22 17:30:17 +03:00
|
|
|
use Exporter qw(import);
|
2014-07-03 02:15:21 +03:00
|
|
|
our @EXPORT = qw(BackRestTestCommon_Setup BackRestTestCommon_Execute BackRestTestCommon_ExecuteBackRest
|
2014-07-16 05:32:41 +03:00
|
|
|
BackRestTestCommon_ConfigCreate BackRestTestCommon_Run BackRestTestCommon_Cleanup
|
2014-06-22 21:51:28 +03:00
|
|
|
BackRestTestCommon_StanzaGet BackRestTestCommon_CommandMainGet BackRestTestCommon_CommandRemoteGet
|
2014-06-22 17:54:31 +03:00
|
|
|
BackRestTestCommon_HostGet BackRestTestCommon_UserGet BackRestTestCommon_GroupGet
|
2014-07-13 16:13:19 +03:00
|
|
|
BackRestTestCommon_UserBackRestGet BackRestTestCommon_TestPathGet BackRestTestCommon_DataPathGet
|
|
|
|
BackRestTestCommon_BackupPathGet BackRestTestCommon_ArchivePathGet BackRestTestCommon_DbPathGet
|
|
|
|
BackRestTestCommon_DbCommonPathGet BackRestTestCommon_DbPortGet);
|
2014-06-22 17:30:17 +03:00
|
|
|
|
|
|
|
my $strCommonStanza;
|
2014-06-22 21:51:28 +03:00
|
|
|
my $strCommonCommandMain;
|
2014-06-22 17:30:17 +03:00
|
|
|
my $strCommonCommandRemote;
|
2014-06-22 21:51:28 +03:00
|
|
|
my $strCommonCommandPsql;
|
2014-06-22 17:30:17 +03:00
|
|
|
my $strCommonHost;
|
|
|
|
my $strCommonUser;
|
|
|
|
my $strCommonGroup;
|
|
|
|
my $strCommonUserBackRest;
|
|
|
|
my $strCommonTestPath;
|
2014-07-13 16:13:19 +03:00
|
|
|
my $strCommonDataPath;
|
2014-06-22 21:51:28 +03:00
|
|
|
my $strCommonBackupPath;
|
2014-06-29 17:53:39 +03:00
|
|
|
my $strCommonArchivePath;
|
2014-06-22 21:51:28 +03:00
|
|
|
my $strCommonDbPath;
|
|
|
|
my $strCommonDbCommonPath;
|
2014-06-22 18:56:01 +03:00
|
|
|
my $iCommonDbPort;
|
2014-07-16 05:32:41 +03:00
|
|
|
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;
|
|
|
|
}
|
2014-06-22 18:56:01 +03:00
|
|
|
|
|
|
|
####################################################################################################################################
|
|
|
|
# BackRestTestBackup_Execute
|
|
|
|
####################################################################################################################################
|
|
|
|
sub BackRestTestCommon_Execute
|
2014-07-03 01:58:38 +03:00
|
|
|
{
|
|
|
|
my $strCommand = shift;
|
|
|
|
my $bRemote = shift;
|
|
|
|
my $bSuppressError = shift;
|
|
|
|
|
|
|
|
# Set defaults
|
|
|
|
$bRemote = defined($bRemote) ? $bRemote : false;
|
|
|
|
$bSuppressError = defined($bSuppressError) ? $bSuppressError : false;
|
|
|
|
|
|
|
|
if ($bRemote)
|
|
|
|
{
|
|
|
|
$strCommand = "ssh ${strCommonUserBackRest}\@${strCommonHost} '${strCommand}'";
|
|
|
|
}
|
|
|
|
|
2014-07-13 02:03:39 +03:00
|
|
|
# system($strCommand);
|
2014-07-03 02:15:21 +03:00
|
|
|
my $strError;
|
2014-07-12 17:26:51 +03:00
|
|
|
my $hError;
|
|
|
|
open($hError, '>', \$strError) or confess "unable to open handle to stderr string: $!\n";
|
2014-07-16 05:32:41 +03:00
|
|
|
|
2014-07-12 17:26:51 +03:00
|
|
|
my $strOut;
|
|
|
|
my $hOut;
|
|
|
|
open($hOut, '>', \$strOut) or confess "unable to open handle to stdout string: $!\n";
|
|
|
|
|
|
|
|
my $pId = open3(undef, $hOut, $hError, $strCommand);
|
2014-07-03 02:15:21 +03:00
|
|
|
|
|
|
|
# Wait for the process to finish and report any errors
|
|
|
|
waitpid($pId, 0);
|
|
|
|
my $iExitStatus = ${^CHILD_ERROR_NATIVE} >> 8;
|
|
|
|
|
|
|
|
if ($iExitStatus != 0 && !$bSuppressError)
|
2014-07-03 01:58:38 +03:00
|
|
|
{
|
2014-07-12 17:26:51 +03:00
|
|
|
while (my $strLine = readline($hError))
|
|
|
|
{
|
|
|
|
print $strLine;
|
|
|
|
}
|
|
|
|
|
|
|
|
confess &log(ERROR, "command '${strCommand}' returned " . $iExitStatus);
|
2014-07-03 01:58:38 +03:00
|
|
|
}
|
2014-07-12 17:26:51 +03:00
|
|
|
|
|
|
|
close($hError);
|
|
|
|
close($hOut);
|
2014-07-13 02:03:39 +03:00
|
|
|
|
2014-07-12 17:26:51 +03:00
|
|
|
# while (my $strLine = readline($hOut))
|
|
|
|
# {
|
|
|
|
# print $strLine;
|
|
|
|
# }
|
2014-06-22 18:56:01 +03:00
|
|
|
}
|
|
|
|
|
2014-06-22 17:30:17 +03:00
|
|
|
####################################################################################################################################
|
2014-06-22 17:54:31 +03:00
|
|
|
# BackRestTestCommon_Setup
|
2014-06-22 17:30:17 +03:00
|
|
|
####################################################################################################################################
|
2014-06-22 17:54:31 +03:00
|
|
|
sub BackRestTestCommon_Setup
|
2014-06-22 17:30:17 +03:00
|
|
|
{
|
2014-07-16 05:32:41 +03:00
|
|
|
my $iModuleTestRunParam = shift;
|
|
|
|
my $bDryRunParam = shift;
|
|
|
|
my $bNoCleanupParam = shift;
|
|
|
|
|
2014-06-22 17:30:17 +03:00
|
|
|
$strCommonStanza = "db";
|
2014-06-22 21:51:28 +03:00
|
|
|
$strCommonCommandMain = '/Users/dsteele/pg_backrest/bin/pg_backrest.pl';
|
|
|
|
$strCommonCommandRemote = '/Users/dsteele/pg_backrest/bin/pg_backrest_remote.pl';
|
|
|
|
$strCommonCommandPsql = '/Library/PostgreSQL/9.3/bin/psql -X %option%';
|
|
|
|
$strCommonHost = '127.0.0.1';
|
2014-06-22 17:30:17 +03:00
|
|
|
$strCommonUser = getpwuid($<);
|
|
|
|
$strCommonGroup = getgrgid($();
|
|
|
|
$strCommonUserBackRest = 'backrest';
|
2014-06-22 21:51:28 +03:00
|
|
|
$strCommonTestPath = dirname(abs_path($0)) . '/test';
|
2014-07-13 16:13:19 +03:00
|
|
|
$strCommonDataPath = dirname(abs_path($0)) . '/data';
|
2014-06-22 21:51:28 +03:00
|
|
|
$strCommonBackupPath = "${strCommonTestPath}/backrest";
|
2014-06-29 17:53:39 +03:00
|
|
|
$strCommonArchivePath = "${strCommonTestPath}/archive";
|
2014-06-22 21:51:28 +03:00
|
|
|
$strCommonDbPath = "${strCommonTestPath}/db";
|
|
|
|
$strCommonDbCommonPath = "${strCommonTestPath}/db/common";
|
2014-06-22 18:56:01 +03:00
|
|
|
$iCommonDbPort = 6543;
|
2014-07-16 05:32:41 +03:00
|
|
|
$iModuleTestRun = $iModuleTestRunParam;
|
|
|
|
$bDryRun = $bDryRunParam;
|
|
|
|
$bNoCleanup = $bNoCleanupParam;
|
2014-06-22 17:30:17 +03:00
|
|
|
}
|
|
|
|
|
2014-06-22 21:51:28 +03:00
|
|
|
####################################################################################################################################
|
|
|
|
# BackRestTestCommon_ConfigCreate
|
|
|
|
####################################################################################################################################
|
|
|
|
sub BackRestTestCommon_ConfigCreate
|
|
|
|
{
|
2014-06-22 23:05:00 +03:00
|
|
|
my $strLocal = shift;
|
2014-06-22 21:51:28 +03:00
|
|
|
my $strRemote = shift;
|
2014-07-16 05:32:41 +03:00
|
|
|
my $bCompress = shift;
|
|
|
|
my $bChecksum = shift;
|
|
|
|
my $bHardlink = shift;
|
|
|
|
my $iThreadMax = shift;
|
2014-07-13 02:03:39 +03:00
|
|
|
my $bArchiveLocal = shift;
|
2014-07-16 05:32:41 +03:00
|
|
|
my $bCompressAsync = shift;
|
|
|
|
# my $oParamHashRef = shift;
|
2014-06-24 01:54:00 +03:00
|
|
|
|
2014-06-22 21:51:28 +03:00
|
|
|
my %oParamHash;
|
|
|
|
tie %oParamHash, 'Config::IniFiles';
|
|
|
|
|
2014-07-17 03:07:50 +03:00
|
|
|
if (defined($strRemote))
|
|
|
|
{
|
|
|
|
$oParamHash{'global:command'}{'remote'} = $strCommonCommandRemote;
|
|
|
|
}
|
|
|
|
|
2014-06-22 21:51:28 +03:00
|
|
|
$oParamHash{'global:command'}{'psql'} = $strCommonCommandPsql;
|
|
|
|
|
|
|
|
if (defined($strRemote) && $strRemote eq REMOTE_BACKUP)
|
|
|
|
{
|
|
|
|
$oParamHash{'global:backup'}{'host'} = $strCommonHost;
|
|
|
|
$oParamHash{'global:backup'}{'user'} = $strCommonUserBackRest;
|
|
|
|
}
|
|
|
|
elsif (defined($strRemote) && $strRemote eq REMOTE_DB)
|
|
|
|
{
|
|
|
|
$oParamHash{$strCommonStanza}{'host'} = $strCommonHost;
|
|
|
|
$oParamHash{$strCommonStanza}{'user'} = $strCommonUser;
|
2014-06-22 23:05:00 +03:00
|
|
|
}
|
2014-06-24 01:54:00 +03:00
|
|
|
|
2014-07-17 03:07:50 +03:00
|
|
|
$oParamHash{'global:log'}{'level-console'} = 'error';
|
|
|
|
$oParamHash{'global:log'}{'level-file'} = 'trace';
|
|
|
|
|
2014-06-22 23:05:00 +03:00
|
|
|
if ($strLocal eq REMOTE_BACKUP)
|
|
|
|
{
|
2014-07-16 05:32:41 +03:00
|
|
|
if (defined($bHardlink) && $bHardlink)
|
|
|
|
{
|
|
|
|
$oParamHash{'global:backup'}{'hardlink'} = 'y';
|
|
|
|
}
|
2014-06-22 21:51:28 +03:00
|
|
|
}
|
2014-06-22 23:05:00 +03:00
|
|
|
elsif ($strLocal eq REMOTE_DB)
|
|
|
|
{
|
2014-07-17 03:07:50 +03:00
|
|
|
if (defined($strRemote))
|
|
|
|
{
|
|
|
|
$oParamHash{'global:log'}{'level-console'} = 'trace';
|
|
|
|
}
|
2014-07-16 05:32:41 +03:00
|
|
|
|
|
|
|
if ($bArchiveLocal)
|
|
|
|
{
|
|
|
|
$oParamHash{'global:archive'}{path} = BackRestTestCommon_ArchivePathGet();
|
|
|
|
|
|
|
|
if (!$bCompressAsync)
|
|
|
|
{
|
|
|
|
$oParamHash{'global:archive'}{'compress_async'} = 'n';
|
|
|
|
}
|
|
|
|
}
|
2014-06-22 23:05:00 +03:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
confess "invalid local type ${strLocal}";
|
|
|
|
}
|
2014-06-22 21:51:28 +03:00
|
|
|
|
2014-07-17 03:07:50 +03:00
|
|
|
if (($strLocal eq REMOTE_BACKUP) || ($strLocal eq REMOTE_DB && !defined($strRemote)))
|
|
|
|
{
|
|
|
|
$oParamHash{'db:command:option'}{'psql'} = "--port=${iCommonDbPort}";
|
|
|
|
}
|
|
|
|
|
2014-07-16 05:32:41 +03:00
|
|
|
if (defined($bCompress) && !$bCompress)
|
|
|
|
{
|
|
|
|
$oParamHash{'global:backup'}{'compress'} = 'n';
|
|
|
|
}
|
|
|
|
|
|
|
|
if (defined($bChecksum) && !$bChecksum)
|
2014-07-13 02:03:39 +03:00
|
|
|
{
|
2014-07-16 05:32:41 +03:00
|
|
|
$oParamHash{'global:backup'}{'checksum'} = 'n';
|
2014-07-13 02:03:39 +03:00
|
|
|
}
|
|
|
|
|
2014-06-24 01:54:00 +03:00
|
|
|
$oParamHash{$strCommonStanza}{'path'} = $strCommonDbCommonPath;
|
2014-06-22 21:51:28 +03:00
|
|
|
$oParamHash{'global:backup'}{'path'} = $strCommonBackupPath;
|
2014-06-24 01:54:00 +03:00
|
|
|
|
2014-07-16 05:32:41 +03:00
|
|
|
if (defined($iThreadMax))
|
2014-06-28 21:32:34 +03:00
|
|
|
{
|
2014-07-16 05:32:41 +03:00
|
|
|
$oParamHash{'global:backup'}{'thread-max'} = $iThreadMax;
|
2014-06-28 21:32:34 +03:00
|
|
|
}
|
|
|
|
|
2014-07-16 05:32:41 +03:00
|
|
|
# foreach my $strSection (keys $oParamHashRef)
|
|
|
|
# {
|
|
|
|
# foreach my $strKey (keys ${$oParamHashRef}{$strSection})
|
|
|
|
# {
|
|
|
|
# $oParamHash{$strSection}{$strKey} = ${$oParamHashRef}{$strSection}{$strKey};
|
|
|
|
# }
|
|
|
|
# }
|
|
|
|
|
2014-06-29 17:53:39 +03:00
|
|
|
# Write out the configuration file
|
|
|
|
my $strFile = BackRestTestCommon_TestPathGet() . '/pg_backrest.conf';
|
|
|
|
|
2014-06-22 21:51:28 +03:00
|
|
|
tied(%oParamHash)->WriteConfig($strFile) or die "could not write config file ${strFile}";
|
2014-06-29 17:53:39 +03:00
|
|
|
chmod(0660, $strFile) or die "unable to set permissions for ${strFile}";
|
2014-06-24 01:54:00 +03:00
|
|
|
|
2014-06-29 17:53:39 +03:00
|
|
|
# Move the configuration file based on local
|
|
|
|
if ($strLocal eq 'db')
|
|
|
|
{
|
|
|
|
rename($strFile, BackRestTestCommon_DbPathGet() . '/pg_backrest.conf')
|
|
|
|
or die "unable to move ${strFile} to " . BackRestTestCommon_DbPathGet() . '/pg_backrest.conf path';
|
|
|
|
}
|
|
|
|
elsif ($strLocal eq 'backup' && !defined($strRemote))
|
|
|
|
{
|
|
|
|
rename($strFile, BackRestTestCommon_BackupPathGet() . '/pg_backrest.conf')
|
|
|
|
or die "unable to move ${strFile} to " . BackRestTestCommon_BackupPathGet() . '/pg_backrest.conf path';
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2014-07-03 02:15:21 +03:00
|
|
|
BackRestTestCommon_Execute("mv $strFile " . BackRestTestCommon_BackupPathGet() . '/pg_backrest.conf', true);
|
2014-06-29 17:53:39 +03:00
|
|
|
}
|
2014-06-22 21:51:28 +03:00
|
|
|
}
|
|
|
|
|
2014-06-22 17:30:17 +03:00
|
|
|
####################################################################################################################################
|
|
|
|
# Get Methods
|
|
|
|
####################################################################################################################################
|
2014-06-22 17:54:31 +03:00
|
|
|
sub BackRestTestCommon_StanzaGet
|
2014-06-22 17:30:17 +03:00
|
|
|
{
|
|
|
|
return $strCommonStanza;
|
|
|
|
}
|
|
|
|
|
2014-06-22 21:51:28 +03:00
|
|
|
sub BackRestTestCommon_CommandMainGet
|
|
|
|
{
|
|
|
|
return $strCommonCommandMain;
|
|
|
|
}
|
|
|
|
|
2014-06-22 17:54:31 +03:00
|
|
|
sub BackRestTestCommon_CommandRemoteGet
|
2014-06-22 17:30:17 +03:00
|
|
|
{
|
|
|
|
return $strCommonCommandRemote;
|
|
|
|
}
|
|
|
|
|
2014-06-22 17:54:31 +03:00
|
|
|
sub BackRestTestCommon_HostGet
|
2014-06-22 17:30:17 +03:00
|
|
|
{
|
|
|
|
return $strCommonHost;
|
|
|
|
}
|
|
|
|
|
2014-06-22 17:54:31 +03:00
|
|
|
sub BackRestTestCommon_UserGet
|
2014-06-22 17:30:17 +03:00
|
|
|
{
|
|
|
|
return $strCommonUser;
|
|
|
|
}
|
|
|
|
|
2014-06-22 17:54:31 +03:00
|
|
|
sub BackRestTestCommon_GroupGet
|
2014-06-22 17:30:17 +03:00
|
|
|
{
|
|
|
|
return $strCommonGroup;
|
|
|
|
}
|
|
|
|
|
2014-06-22 17:54:31 +03:00
|
|
|
sub BackRestTestCommon_UserBackRestGet
|
2014-06-22 17:30:17 +03:00
|
|
|
{
|
|
|
|
return $strCommonUserBackRest;
|
|
|
|
}
|
|
|
|
|
2014-06-22 17:54:31 +03:00
|
|
|
sub BackRestTestCommon_TestPathGet
|
2014-06-22 17:30:17 +03:00
|
|
|
{
|
|
|
|
return $strCommonTestPath;
|
|
|
|
}
|
|
|
|
|
2014-07-13 16:13:19 +03:00
|
|
|
sub BackRestTestCommon_DataPathGet
|
|
|
|
{
|
|
|
|
return $strCommonDataPath;
|
|
|
|
}
|
|
|
|
|
2014-06-22 21:51:28 +03:00
|
|
|
sub BackRestTestCommon_BackupPathGet
|
|
|
|
{
|
|
|
|
return $strCommonBackupPath;
|
|
|
|
}
|
|
|
|
|
2014-06-29 17:53:39 +03:00
|
|
|
sub BackRestTestCommon_ArchivePathGet
|
|
|
|
{
|
|
|
|
return $strCommonArchivePath;
|
|
|
|
}
|
|
|
|
|
2014-06-22 21:51:28 +03:00
|
|
|
sub BackRestTestCommon_DbPathGet
|
|
|
|
{
|
|
|
|
return $strCommonDbPath;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub BackRestTestCommon_DbCommonPathGet
|
|
|
|
{
|
|
|
|
return $strCommonDbCommonPath;
|
|
|
|
}
|
|
|
|
|
2014-06-22 18:56:01 +03:00
|
|
|
sub BackRestTestCommon_DbPortGet
|
|
|
|
{
|
|
|
|
return $iCommonDbPort;
|
|
|
|
}
|
|
|
|
|
2014-06-22 17:30:17 +03:00
|
|
|
1;
|