1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2026-06-20 01:17:49 +02:00
Files
pgbackrest/test/lib/pgBackRestTest/Module/Config/ConfigConfigPerlTest.pm
T

363 lines
16 KiB
Perl
Raw Normal View History

2016-12-23 08:22:59 -05:00
####################################################################################################################################
# ConfigConfigTest.pm - Tests for mixed command line and config file options in Config.pm
####################################################################################################################################
package pgBackRestTest::Module::Config::ConfigConfigPerlTest;
use parent 'pgBackRestTest::Env::ConfigEnvTest';
2016-12-23 08:22:59 -05:00
####################################################################################################################################
# Perl includes
####################################################################################################################################
use strict;
use warnings FATAL => qw(all);
use Carp qw(confess);
use pgBackRest::Common::Exception;
use pgBackRest::Common::Ini;
use pgBackRest::Common::Log;
use pgBackRest::Config::Config;
use pgBackRestTest::Common::RunTest;
####################################################################################################################################
# run
####################################################################################################################################
sub run
{
my $self = shift;
my $oConfig = {};
my $strConfigFile = $self->testPath() . '/pgbackrest.conf';
if ($self->begin('set and negate option ' . cfgOptionName(CFGOPT_CONFIG)))
2016-12-23 08:22:59 -05:00
{
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, '/dude/dude.conf');
$self->optionTestSetBool(CFGOPT_CONFIG, false);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP), ERROR_OPTION_NEGATE, cfgOptionName(CFGOPT_CONFIG));
2016-12-23 08:22:59 -05:00
}
if ($self->begin('option ' . cfgOptionName(CFGOPT_CONFIG)))
2016-12-23 08:22:59 -05:00
{
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSetBool(CFGOPT_CONFIG, false);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_CONFIG);
2016-12-23 08:22:59 -05:00
}
if ($self->begin('default option ' . cfgOptionName(CFGOPT_CONFIG)))
2016-12-23 08:22:59 -05:00
{
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_CONFIG, cfgDefOptionDefault(CFGCMD_BACKUP, CFGOPT_CONFIG));
2016-12-23 08:22:59 -05:00
}
if ($self->begin('config file is a path'))
{
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $self->testPath());
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP), ERROR_FILE_INVALID, $self->testPath());
2016-12-23 08:22:59 -05:00
}
if ($self->begin('load from config stanza command section - option ' . cfgOptionName(CFGOPT_PROCESS_MAX)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{$self->stanza() . ':' . cfgCommandName(CFGCMD_BACKUP)}{cfgOptionName(CFGOPT_PROCESS_MAX)} = 2;
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_PROCESS_MAX, 2);
2016-12-23 08:22:59 -05:00
}
if ($self->begin('load from config stanza section - option ' . cfgOptionName(CFGOPT_PROCESS_MAX)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{$self->stanza()}{cfgOptionName(CFGOPT_PROCESS_MAX)} = 3;
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_PROCESS_MAX, 3);
2016-12-23 08:22:59 -05:00
}
if ($self->begin('load from config global command section - option thread-max'))
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL . ':' . cfgCommandName(CFGCMD_BACKUP)}{'thread-max'} = 2;
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_PROCESS_MAX, 2);
2016-12-23 08:22:59 -05:00
}
if ($self->begin('load from config global section - option ' . cfgOptionName(CFGOPT_PROCESS_MAX)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_PROCESS_MAX)} = 5;
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_PROCESS_MAX, 5);
2016-12-23 08:22:59 -05:00
}
if ($self->begin('default - option ' . cfgOptionName(CFGOPT_PROCESS_MAX)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_PROCESS_MAX, 1);
2016-12-23 08:22:59 -05:00
}
if ($self->begin('command-line override - option ' . cfgOptionName(CFGOPT_PROCESS_MAX)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_PROCESS_MAX)} = 9;
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_PROCESS_MAX, 7);
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_PROCESS_MAX, 7);
2016-12-23 08:22:59 -05:00
}
if ($self->begin('invalid boolean - option ' . cfgOptionName(CFGOPT_HARDLINK)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL . ':' . cfgCommandName(CFGCMD_BACKUP)}{cfgOptionName(CFGOPT_HARDLINK)} = 'Y';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(
cfgCommandName(CFGCMD_BACKUP), ERROR_OPTION_INVALID_VALUE, 'Y', cfgOptionName(CFGOPT_HARDLINK));
2016-12-23 08:22:59 -05:00
}
if ($self->begin('invalid value - option ' . cfgOptionName(CFGOPT_LOG_LEVEL_CONSOLE)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_LOG_LEVEL_CONSOLE)} = BOGUS;
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(
cfgCommandName(CFGCMD_BACKUP), ERROR_OPTION_INVALID_VALUE, BOGUS, cfgOptionName(CFGOPT_LOG_LEVEL_CONSOLE));
2016-12-23 08:22:59 -05:00
}
if ($self->begin('valid value - option ' . cfgOptionName(CFGOPT_LOG_LEVEL_CONSOLE)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_LOG_LEVEL_CONSOLE)} = lc(INFO);
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_RESTORE));
2016-12-23 08:22:59 -05:00
}
if ($self->begin('archive-push - option ' . cfgOptionName(CFGOPT_LOG_LEVEL_CONSOLE)))
2016-12-23 08:22:59 -05:00
{
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_ARCHIVE_PUSH));
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_EXPIRE) . ' ' . cfgOptionName(CFGOPT_RETENTION_FULL)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{$self->stanza() . ':' . cfgCommandName(CFGCMD_EXPIRE)}{cfgOptionName(CFGOPT_RETENTION_FULL)} = 2;
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_EXPIRE));
$self->optionTestExpect(CFGOPT_RETENTION_FULL, 2);
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_BACKUP) . ' option ' . cfgOptionName(CFGOPT_COMPRESS)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL . ':' . cfgCommandName(CFGCMD_BACKUP)}{cfgOptionName(CFGOPT_COMPRESS)} = 'n';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_COMPRESS, false);
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_RESTORE) . ' global option ' . cfgOptionName(CFGOPT_RECOVERY_OPTION) . ' error'))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL . ':' . cfgCommandName(CFGCMD_RESTORE)}{cfgOptionName(CFGOPT_RECOVERY_OPTION)} = 'bogus=';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(
cfgCommandName(CFGCMD_RESTORE), ERROR_OPTION_INVALID_VALUE, 'bogus=', cfgOptionName(CFGOPT_RECOVERY_OPTION));
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_RESTORE) . ' global option ' . cfgOptionName(CFGOPT_RECOVERY_OPTION) . ' error'))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL . ':' . cfgCommandName(CFGCMD_RESTORE)}{cfgOptionName(CFGOPT_RECOVERY_OPTION)} = '=bogus';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(
cfgCommandName(CFGCMD_RESTORE), ERROR_OPTION_INVALID_VALUE, '=bogus', cfgOptionName(CFGOPT_RECOVERY_OPTION));
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_RESTORE) . ' global option ' . cfgOptionName(CFGOPT_RECOVERY_OPTION)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL . ':' . cfgCommandName(CFGCMD_RESTORE)}{cfgOptionName(CFGOPT_RECOVERY_OPTION)} =
2016-12-23 08:22:59 -05:00
'archive-command=/path/to/pgbackrest';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_RESTORE));
$self->optionTestExpect(CFGOPT_RECOVERY_OPTION, '/path/to/pgbackrest', 'archive-command');
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_RESTORE) . ' stanza option ' . cfgOptionName(CFGOPT_RECOVERY_OPTION)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{$self->stanza()}{cfgOptionName(CFGOPT_RECOVERY_OPTION)} = ['standby-mode=on', 'a=b'];
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_RESTORE));
$self->optionTestExpect(CFGOPT_RECOVERY_OPTION, 'b', 'a');
$self->optionTestExpect(CFGOPT_RECOVERY_OPTION, 'on', 'standby-mode');
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_BACKUP) . ' option ' . cfgOptionName(CFGOPT_DB_PATH)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{$self->stanza()}{cfgOptionName(CFGOPT_DB_PATH)} = '/path/to/db';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_DB_PATH, '/path/to/db');
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_BACKUP) . ' option ' . cfgOptionName(CFGOPT_ARCHIVE_CHECK)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{$self->stanza()}{cfgOptionName(CFGOPT_DB_PATH)} = '/path/to/db';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
$self->optionTestSetBool(CFGOPT_ARCHIVE_CHECK, false);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_ONLINE, true);
$self->optionTestExpect(CFGOPT_ARCHIVE_CHECK, false);
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_ARCHIVE_PUSH) . ' option ' . cfgOptionName(CFGOPT_DB_PATH)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{$self->stanza()}{cfgOptionName(CFGOPT_DB_PATH)} = '/path/to/db';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_ARCHIVE_PUSH));
$self->optionTestExpect(CFGOPT_DB_PATH, '/path/to/db');
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_BACKUP) . ' option ' . cfgOptionName(CFGOPT_REPO_PATH)))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_REPO_PATH)} = '/repo';
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP));
$self->optionTestExpect(CFGOPT_REPO_PATH, '/repo');
2016-12-23 08:22:59 -05:00
}
if ($self->begin(cfgCommandName(CFGCMD_BACKUP) . ' option ' . cfgOptionName(CFGOPT_REPO_PATH) . ' multiple times'))
2016-12-23 08:22:59 -05:00
{
$oConfig = {};
$$oConfig{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_REPO_PATH)} = ['/repo', '/repo2'];
2017-06-09 17:51:41 -04:00
storageTest()->put($strConfigFile, iniRender($oConfig, true));
2016-12-23 08:22:59 -05:00
$self->optionTestSet(CFGOPT_STANZA, $self->stanza());
$self->optionTestSet(CFGOPT_DB_PATH, '/db');
$self->optionTestSet(CFGOPT_CONFIG, $strConfigFile);
2016-12-23 08:22:59 -05:00
$self->configTestLoadExpect(cfgCommandName(CFGCMD_BACKUP), ERROR_OPTION_MULTIPLE_VALUE, cfgOptionName(CFGOPT_REPO_PATH));
2016-12-23 08:22:59 -05:00
}
}
2017-01-27 09:42:30 -05:00
####################################################################################################################################
# Getters
####################################################################################################################################
# Change this from the default so the same stanza is not used in all tests.
sub stanza {return 'main'};
2016-12-23 08:22:59 -05:00
1;