mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-14 10:13:05 +02:00
Allow multiple --module, --test, and --run options to be used for test.pl.
This commit is contained in:
parent
be337c951a
commit
e3d63c0252
@ -206,6 +206,10 @@
|
||||
<p>Split test modules into separate files to make the code more maintainable. Tests are dynamically loaded by name rather than requiring an if-else block.</p>
|
||||
</release-item>
|
||||
|
||||
<release-item>
|
||||
<p>Allow multiple <setting>--module</setting>, <setting>--test</setting>, and <setting>--run</setting> options to be used for <file>test.pl</file>.</p>
|
||||
</release-item>
|
||||
|
||||
<release-item>
|
||||
<p>Added expect log expression to replace year subdirectories in <path>backup.history</path>.</p>
|
||||
</release-item>
|
||||
|
@ -46,9 +46,9 @@ use constant TEST_PERL_ARCH_PATH => VMDEF_PER
|
||||
sub testListGet
|
||||
{
|
||||
my $strVm = shift;
|
||||
my $strModule = shift;
|
||||
my $strModuleTest = shift;
|
||||
my $iModuleTestRun = shift;
|
||||
my $stryModule = shift;
|
||||
my $stryModuleTest = shift;
|
||||
my $iyModuleTestRun = shift;
|
||||
my $strDbVersion = shift;
|
||||
my $iProcessMax = shift;
|
||||
|
||||
@ -76,11 +76,11 @@ sub testListGet
|
||||
{
|
||||
foreach my $oModule (@{$$oTestDef{&TESTDEF_MODULE}})
|
||||
{
|
||||
if ($strModule eq $$oModule{&TESTDEF_MODULE_NAME} || $strModule eq 'all')
|
||||
if (@{$stryModule} == 0 || grep(/^$$oModule{&TESTDEF_MODULE_NAME}$/i, @{$stryModule}))
|
||||
{
|
||||
foreach my $oTest (@{$$oModule{test}})
|
||||
{
|
||||
if ($strModuleTest eq $$oTest{&TESTDEF_TEST_NAME} || $strModuleTest eq 'all')
|
||||
if (@{$stryModuleTest} == 0 || grep(/^$$oTest{&TESTDEF_TEST_NAME}$/i, @{$stryModuleTest}))
|
||||
{
|
||||
my $iDbVersionMin = -1;
|
||||
my $iDbVersionMax = -1;
|
||||
@ -112,18 +112,16 @@ sub testListGet
|
||||
my $bTestIndividual =
|
||||
!defined($$oTest{&TESTDEF_TEST_INDIVIDUAL}) || $$oTest{&TESTDEF_TEST_INDIVIDUAL} ? true : false;
|
||||
|
||||
my $iTestRunMin = defined($iModuleTestRun) ? $iModuleTestRun : ($bTestIndividual ? 1 : -1);
|
||||
my $iTestRunMax =
|
||||
defined($iModuleTestRun) ? $iModuleTestRun :
|
||||
($bTestIndividual ? $$oTest{&TESTDEF_TEST_TOTAL} : -1);
|
||||
|
||||
if (defined($$oTest{total}) && $iTestRunMax > $$oTest{total})
|
||||
{
|
||||
confess &log(ERROR, "invalid run - must be >= 1 and <= $$oTest{total}")
|
||||
}
|
||||
my $iTestRunMin = $bTestIndividual ? 1 : -1;
|
||||
my $iTestRunMax = $bTestIndividual ? $$oTest{&TESTDEF_TEST_TOTAL} : -1;
|
||||
|
||||
for (my $iTestRunIdx = $iTestRunMin; $iTestRunIdx <= $iTestRunMax; $iTestRunIdx++)
|
||||
{
|
||||
# Skip this run if a list was provided and this test is not in the list
|
||||
next if (
|
||||
$bTestIndividual && @{$iyModuleTestRun} != 0 &&
|
||||
!grep(/^$iTestRunIdx$/i, @{$iyModuleTestRun}));
|
||||
|
||||
my $iyProcessMax = [defined($iProcessMax) ? $iProcessMax : 1];
|
||||
|
||||
if (defined($$oTest{&TESTDEF_TEST_PROCESS}) && $$oTest{&TESTDEF_TEST_PROCESS} &&
|
||||
@ -156,7 +154,9 @@ sub testListGet
|
||||
&TEST_PERL_ARCH_PATH => $$oyVm{$strTestOS}{&VMDEF_PERL_ARCH_PATH},
|
||||
&TEST_MODULE => $$oModule{&TESTDEF_MODULE_NAME},
|
||||
&TEST_NAME => $$oTest{&TESTDEF_TEST_NAME},
|
||||
&TEST_RUN => $iTestRunIdx == -1 ? undef : $iTestRunIdx,
|
||||
&TEST_RUN =>
|
||||
$iTestRunIdx == -1 ? (@{$iyModuleTestRun} == 0 ? undef : $iyModuleTestRun) :
|
||||
[$iTestRunIdx],
|
||||
&TEST_PROCESS => $iProcessTestMax,
|
||||
&TEST_DB => $strDbVersion
|
||||
};
|
||||
|
@ -91,7 +91,7 @@ sub process
|
||||
$self->{strPgVersion},
|
||||
$self->{strModule},
|
||||
$self->{strModuleTest},
|
||||
$self->{iModuleTestRun},
|
||||
$self->{iyModuleTestRun},
|
||||
$self->{iProcessMax},
|
||||
$self->{bOutput},
|
||||
$self->{bDryRun},
|
||||
@ -193,7 +193,7 @@ sub begin
|
||||
$self->{iRun}++;
|
||||
|
||||
# Return if this test should not be run
|
||||
if (defined($self->moduleTestRun()) && $self->moduleTestRun() != $self->runCurrent())
|
||||
if (@{$self->{iyModuleTestRun}} != 0 && !grep(/^$self->{iRun}$/i, @{$self->{iyModuleTestRun}}))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -379,7 +379,6 @@ sub isDryRun {return shift->{bDryRun}}
|
||||
sub expect {return shift->{oExpect}}
|
||||
sub module {return shift->{strModule}}
|
||||
sub moduleTest {return shift->{strModuleTest}}
|
||||
sub moduleTestRun {return shift->{iModuleTestRun}}
|
||||
sub pgBinPath {return shift->{strPgBinPath}}
|
||||
sub pgUser {return shift->{strPgUser}}
|
||||
sub pgVersion {return shift->{strPgVersion}}
|
||||
|
41
test/test.pl
41
test/test.pl
@ -91,9 +91,9 @@ test.pl [options]
|
||||
####################################################################################################################################
|
||||
my $strLogLevel = 'info';
|
||||
my $bVmOut = false;
|
||||
my $strModule = 'all';
|
||||
my $strModuleTest = 'all';
|
||||
my $iModuleTestRun = undef;
|
||||
my @stryModule;
|
||||
my @stryModuleTest;
|
||||
my @iyModuleTestRun;
|
||||
my $iProcessMax = undef;
|
||||
my $iVmMax = 1;
|
||||
my $iVmId = undef;
|
||||
@ -122,9 +122,9 @@ GetOptions ('q|quiet' => \$bQuiet,
|
||||
'vm-out' => \$bVmOut,
|
||||
'vm-build' => \$bVmBuild,
|
||||
'vm-force' => \$bVmForce,
|
||||
'module=s' => \$strModule,
|
||||
'test=s' => \$strModuleTest,
|
||||
'run=s' => \$iModuleTestRun,
|
||||
'module=s@' => \@stryModule,
|
||||
'test=s@' => \@stryModuleTest,
|
||||
'run=s@' => \@iyModuleTestRun,
|
||||
'process-max=s' => \$iProcessMax,
|
||||
'vm-id=s' => \$iVmId,
|
||||
'vm-max=s' => \$iVmMax,
|
||||
@ -175,14 +175,14 @@ eval
|
||||
|
||||
logLevelSet(uc($strLogLevel), uc($strLogLevel), OFF);
|
||||
|
||||
if ($strModuleTest ne 'all' && $strModule eq 'all')
|
||||
if (@stryModuleTest != 0 && @stryModule != 1)
|
||||
{
|
||||
confess "--module must be provided for --test=\"${strModuleTest}\"";
|
||||
confess "Only one --module can be provided when --test is specified";
|
||||
}
|
||||
|
||||
if (defined($iModuleTestRun) && $strModuleTest eq 'all')
|
||||
if (@iyModuleTestRun != 0 && @stryModuleTest != 1)
|
||||
{
|
||||
confess "--test must be provided for --run=\"${iModuleTestRun}\"";
|
||||
confess "Only one --test can be provided when --run is specified";
|
||||
}
|
||||
|
||||
# Check process total
|
||||
@ -267,6 +267,7 @@ eval
|
||||
|
||||
# Build the C Library in host
|
||||
#-----------------------------------------------------------------------------------------------------------------------
|
||||
if (!$bDryRun)
|
||||
{
|
||||
my $bLogDetail = $strLogLevel eq 'detail';
|
||||
my $strBuildPath = "${strBackRestBase}/test/.vagrant/libc/host";
|
||||
@ -309,7 +310,7 @@ eval
|
||||
|
||||
# Determine which tests to run
|
||||
#-----------------------------------------------------------------------------------------------------------------------
|
||||
my $oyTestRun = testListGet($strVm, $strModule, $strModuleTest, $iModuleTestRun, $strDbVersion, $iProcessMax);
|
||||
my $oyTestRun = testListGet($strVm, \@stryModule, \@stryModuleTest, \@iyModuleTestRun, $strDbVersion, $iProcessMax);
|
||||
|
||||
if (@{$oyTestRun} == 0)
|
||||
{
|
||||
@ -343,6 +344,7 @@ eval
|
||||
|
||||
# Build the C Library in container
|
||||
#-----------------------------------------------------------------------------------------------------------------------
|
||||
if (!$bDryRun)
|
||||
{
|
||||
my $bLogDetail = $strLogLevel eq 'detail';
|
||||
my @stryBuildVm = $strVm eq 'all' ? (VM_CO6, VM_U16, VM_D8, VM_CO7, VM_U14, VM_U12) : ($strVm);
|
||||
@ -463,7 +465,7 @@ eval
|
||||
'vm=' . $$oTest{&TEST_VM} .
|
||||
', module=' . $$oTest{&TEST_MODULE} .
|
||||
', test=' . $$oTest{&TEST_NAME} .
|
||||
(defined($$oTest{&TEST_RUN}) ? ', run=' . $$oTest{&TEST_RUN} : '') .
|
||||
(defined($$oTest{&TEST_RUN}) ? ', run=' . join(',', @{$$oTest{&TEST_RUN}}) : '') .
|
||||
(defined($$oTest{&TEST_PROCESS}) ? ', process-max=' . $$oTest{&TEST_PROCESS} : '') .
|
||||
(defined($$oTest{&TEST_DB}) ? ', db=' . $$oTest{&TEST_DB} : '');
|
||||
|
||||
@ -494,6 +496,15 @@ eval
|
||||
}
|
||||
}
|
||||
|
||||
# Create run parameters
|
||||
my $strCommandRunParam = '';
|
||||
|
||||
foreach my $iRunIdx (@{$$oTest{&TEST_RUN}})
|
||||
{
|
||||
$strCommandRunParam .= ' --run=' . $iRunIdx;
|
||||
}
|
||||
|
||||
# Create command
|
||||
my $strCommand =
|
||||
($$oTest{&TEST_CONTAINER} ? 'docker exec -i -u ' . TEST_USER . " ${strImage} " : '') . abs_path($0) .
|
||||
" --test-path=${strVmTestPath}" .
|
||||
@ -501,7 +512,7 @@ eval
|
||||
" --vm-id=${iVmIdx}" .
|
||||
" --module=" . $$oTest{&TEST_MODULE} .
|
||||
' --test=' . $$oTest{&TEST_NAME} .
|
||||
(defined($$oTest{&TEST_RUN}) ? ' --run=' . $$oTest{&TEST_RUN} : '') .
|
||||
$strCommandRunParam .
|
||||
(defined($$oTest{&TEST_DB}) ? ' --db-version=' . $$oTest{&TEST_DB} : '') .
|
||||
(defined($$oTest{&TEST_PROCESS}) ? ' --process-max=' . $$oTest{&TEST_PROCESS} : '') .
|
||||
($strLogLevel ne lc(INFO) ? " --log-level=${strLogLevel}" : '') .
|
||||
@ -572,14 +583,14 @@ eval
|
||||
my $oHostGroup = hostGroupGet();
|
||||
|
||||
# Run the test
|
||||
testRun($strModule, $strModuleTest)->process(
|
||||
testRun($stryModule[0], $stryModuleTest[0])->process(
|
||||
$strVm, $iVmId, # Vm info
|
||||
$strBackRestBase, # Base backrest directory
|
||||
$strTestPath, # Path where the tests will run
|
||||
"${strBackRestBase}/bin/" . BACKREST_EXE, # Path to the backrest executable
|
||||
$strDbVersion ne 'minimal' ? $strPgSqlBin: undef, # Db bin path
|
||||
$strDbVersion ne 'minimal' ? $strDbVersion: undef, # Db version
|
||||
$strModule, $strModuleTest, $iModuleTestRun, # Module info
|
||||
$stryModule[0], $stryModuleTest[0], \@iyModuleTestRun, # Module info
|
||||
$iProcessMax, $bVmOut, $bDryRun, $bNoCleanup, $bLogForce, # Test options
|
||||
TEST_USER, BACKREST_USER, TEST_GROUP); # User/group info
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user