You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-11-09 14:40:55 +03:00
Full branch coverage for config module.
This commit is contained in:
@@ -339,7 +339,7 @@ helpRender()
|
|||||||
|
|
||||||
strCat(result, ": ");
|
strCat(result, ": ");
|
||||||
|
|
||||||
for (int nameAltIdx = 0; nameAltIdx < cfgDefOptionHelpNameAltValueTotal(optionDefId); nameAltIdx++)
|
for (uint nameAltIdx = 0; nameAltIdx < cfgDefOptionHelpNameAltValueTotal(optionDefId); nameAltIdx++)
|
||||||
{
|
{
|
||||||
if (nameAltIdx != 0)
|
if (nameAltIdx != 0)
|
||||||
strCat(result, ", "); // {uncovered - no option has more than one alt name}
|
strCat(result, ", "); // {uncovered - no option has more than one alt name}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ DEBUG_UNIT_EXTERN int logHandleFile = -1;
|
|||||||
static bool logFileBanner = false;
|
static bool logFileBanner = false;
|
||||||
|
|
||||||
// Is the timestamp printed in the log?
|
// Is the timestamp printed in the log?
|
||||||
static bool logTimestamp = false;
|
DEBUG_UNIT_EXTERN bool logTimestamp = false;
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
Debug Asserts
|
Debug Asserts
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ Expose internal data for unit testing/debugging
|
|||||||
extern int logHandleStdOut;
|
extern int logHandleStdOut;
|
||||||
extern int logHandleStdErr;
|
extern int logHandleStdErr;
|
||||||
extern int logHandleFile;
|
extern int logHandleFile;
|
||||||
|
|
||||||
|
extern bool logTimestamp;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ Command and Option Configuration Definition
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "common/assert.h"
|
||||||
#include "common/error.h"
|
#include "common/error.h"
|
||||||
#include "config/define.h"
|
#include "config/define.h"
|
||||||
|
|
||||||
@@ -177,7 +178,7 @@ Find optional data for a command and option.
|
|||||||
static void
|
static void
|
||||||
cfgDefDataFind(
|
cfgDefDataFind(
|
||||||
ConfigDefineDataType typeFind, ConfigDefineCommand commandDefId, const void **dataList, bool *dataDefFound, int *dataDef,
|
ConfigDefineDataType typeFind, ConfigDefineCommand commandDefId, const void **dataList, bool *dataDefFound, int *dataDef,
|
||||||
const void ***dataDefList, int *dataDefListSize)
|
const void ***dataDefList, unsigned int *dataDefListSize)
|
||||||
{
|
{
|
||||||
*dataDefFound = false;
|
*dataDefFound = false;
|
||||||
|
|
||||||
@@ -185,8 +186,8 @@ cfgDefDataFind(
|
|||||||
if (dataList != NULL)
|
if (dataList != NULL)
|
||||||
{
|
{
|
||||||
ConfigDefineDataType type;
|
ConfigDefineDataType type;
|
||||||
int offset = 0;
|
unsigned int offset = 0;
|
||||||
int size;
|
unsigned int size;
|
||||||
int data;
|
int data;
|
||||||
unsigned int commandCurrent = UINT_MAX;
|
unsigned int commandCurrent = UINT_MAX;
|
||||||
|
|
||||||
@@ -231,7 +232,7 @@ cfgDefDataFind(
|
|||||||
#define CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, type) \
|
#define CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, type) \
|
||||||
bool dataDefFound = false; \
|
bool dataDefFound = false; \
|
||||||
int dataDef = 0; \
|
int dataDef = 0; \
|
||||||
int dataDefListSize = 0; \
|
unsigned int dataDefListSize = 0; \
|
||||||
const void **dataDefList = NULL; \
|
const void **dataDefList = NULL; \
|
||||||
\
|
\
|
||||||
cfgDefDataFind( \
|
cfgDefDataFind( \
|
||||||
@@ -310,19 +311,19 @@ cfgDefOptionAllowList(ConfigDefineCommand commandDefId, ConfigDefineOption optio
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
cfgDefOptionAllowListValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, int valueId)
|
cfgDefOptionAllowListValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, unsigned int valueId)
|
||||||
{
|
{
|
||||||
cfgDefCommandOptionCheck(commandDefId, optionDefId);
|
cfgDefCommandOptionCheck(commandDefId, optionDefId);
|
||||||
|
|
||||||
CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeAllowList);
|
CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeAllowList);
|
||||||
|
|
||||||
if (valueId < 0 || valueId >= dataDefListSize)
|
if (valueId >= dataDefListSize)
|
||||||
THROW_FMT(AssertError, "value id %d invalid - must be >= 0 and < %d", valueId, dataDefListSize);
|
THROW_FMT(AssertError, "value id %u invalid - must be >= 0 and < %u", valueId, dataDefListSize);
|
||||||
|
|
||||||
return (char *)dataDefList[valueId];
|
return (char *)dataDefList[valueId];
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
unsigned int
|
||||||
cfgDefOptionAllowListValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId)
|
cfgDefOptionAllowListValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId)
|
||||||
{
|
{
|
||||||
cfgDefCommandOptionCheck(commandDefId, optionDefId);
|
cfgDefCommandOptionCheck(commandDefId, optionDefId);
|
||||||
@@ -336,12 +337,11 @@ cfgDefOptionAllowListValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOp
|
|||||||
bool
|
bool
|
||||||
cfgDefOptionAllowListValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value)
|
cfgDefOptionAllowListValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value)
|
||||||
{
|
{
|
||||||
if (value != NULL)
|
ASSERT_DEBUG(value != NULL);
|
||||||
{
|
|
||||||
for (int valueIdx = 0; valueIdx < cfgDefOptionAllowListValueTotal(commandDefId, optionDefId); valueIdx++)
|
for (unsigned int valueIdx = 0; valueIdx < cfgDefOptionAllowListValueTotal(commandDefId, optionDefId); valueIdx++)
|
||||||
if (strcmp(value, cfgDefOptionAllowListValue(commandDefId, optionDefId, valueIdx)) == 0)
|
if (strcmp(value, cfgDefOptionAllowListValue(commandDefId, optionDefId, valueIdx)) == 0)
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -419,19 +419,19 @@ cfgDefOptionDependOption(ConfigDefineCommand commandDefId, ConfigDefineOption op
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
cfgDefOptionDependValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, int valueId)
|
cfgDefOptionDependValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, unsigned int valueId)
|
||||||
{
|
{
|
||||||
cfgDefCommandOptionCheck(commandDefId, optionDefId);
|
cfgDefCommandOptionCheck(commandDefId, optionDefId);
|
||||||
|
|
||||||
CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeDepend);
|
CONFIG_DEFINE_DATA_FIND(commandDefId, optionDefId, configDefDataTypeDepend);
|
||||||
|
|
||||||
if (valueId < 0 || valueId >= dataDefListSize)
|
if (valueId >= dataDefListSize)
|
||||||
THROW_FMT(AssertError, "value id %d invalid - must be >= 0 and < %d", valueId, dataDefListSize);
|
THROW_FMT(AssertError, "value id %u invalid - must be >= 0 and < %u", valueId, dataDefListSize);
|
||||||
|
|
||||||
return (char *)dataDefList[valueId];
|
return (char *)dataDefList[valueId];
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
unsigned int
|
||||||
cfgDefOptionDependValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId)
|
cfgDefOptionDependValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId)
|
||||||
{
|
{
|
||||||
cfgDefCommandOptionCheck(commandDefId, optionDefId);
|
cfgDefCommandOptionCheck(commandDefId, optionDefId);
|
||||||
@@ -445,12 +445,11 @@ cfgDefOptionDependValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOptio
|
|||||||
bool
|
bool
|
||||||
cfgDefOptionDependValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value)
|
cfgDefOptionDependValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value)
|
||||||
{
|
{
|
||||||
if (value != NULL)
|
ASSERT_DEBUG(value != NULL);
|
||||||
{
|
|
||||||
for (int valueIdx = 0; valueIdx < cfgDefOptionDependValueTotal(commandDefId, optionDefId); valueIdx++)
|
for (unsigned int valueIdx = 0; valueIdx < cfgDefOptionDependValueTotal(commandDefId, optionDefId); valueIdx++)
|
||||||
if (strcmp(value, cfgDefOptionDependValue(commandDefId, optionDefId, valueIdx)) == 0)
|
if (strcmp(value, cfgDefOptionDependValue(commandDefId, optionDefId, valueIdx)) == 0)
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -485,19 +484,19 @@ cfgDefOptionHelpNameAlt(ConfigDefineOption optionDefId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
cfgDefOptionHelpNameAltValue(ConfigDefineOption optionDefId, int valueId)
|
cfgDefOptionHelpNameAltValue(ConfigDefineOption optionDefId, unsigned int valueId)
|
||||||
{
|
{
|
||||||
cfgDefOptionCheck(optionDefId);
|
cfgDefOptionCheck(optionDefId);
|
||||||
|
|
||||||
CONFIG_DEFINE_DATA_FIND(-1, optionDefId, configDefDataTypeHelpNameAlt);
|
CONFIG_DEFINE_DATA_FIND(-1, optionDefId, configDefDataTypeHelpNameAlt);
|
||||||
|
|
||||||
if (valueId < 0 || valueId >= dataDefListSize)
|
if (valueId >= dataDefListSize)
|
||||||
THROW_FMT(AssertError, "value id %d invalid - must be >= 0 and < %d", valueId, dataDefListSize);
|
THROW_FMT(AssertError, "value id %u invalid - must be >= 0 and < %u", valueId, dataDefListSize);
|
||||||
|
|
||||||
return (char *)dataDefList[valueId];
|
return (char *)dataDefList[valueId];
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
unsigned int
|
||||||
cfgDefOptionHelpNameAltValueTotal(ConfigDefineOption optionDefId)
|
cfgDefOptionHelpNameAltValueTotal(ConfigDefineOption optionDefId)
|
||||||
{
|
{
|
||||||
cfgDefOptionCheck(optionDefId);
|
cfgDefOptionCheck(optionDefId);
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ Command and Option Configuration Definition
|
|||||||
#ifndef CONFIG_DEFINE_H
|
#ifndef CONFIG_DEFINE_H
|
||||||
#define CONFIG_DEFINE_H
|
#define CONFIG_DEFINE_H
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
Section enum - defines which sections of the config an option can appear in
|
Section enum - defines which sections of the config an option can appear in
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
@@ -30,9 +32,9 @@ const char *cfgDefCommandHelpDescription(ConfigDefineCommand commandDefId);
|
|||||||
const char *cfgDefCommandHelpSummary(ConfigDefineCommand commandDefId);
|
const char *cfgDefCommandHelpSummary(ConfigDefineCommand commandDefId);
|
||||||
|
|
||||||
bool cfgDefOptionAllowList(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
bool cfgDefOptionAllowList(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
int cfgDefOptionAllowListValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
unsigned int cfgDefOptionAllowListValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
bool cfgDefOptionAllowListValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value);
|
bool cfgDefOptionAllowListValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value);
|
||||||
const char *cfgDefOptionAllowListValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, int valueId);
|
const char *cfgDefOptionAllowListValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, unsigned int valueId);
|
||||||
bool cfgDefOptionAllowRange(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
bool cfgDefOptionAllowRange(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
double cfgDefOptionAllowRangeMax(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
double cfgDefOptionAllowRangeMax(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
double cfgDefOptionAllowRangeMin(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
double cfgDefOptionAllowRangeMin(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
@@ -40,13 +42,13 @@ void cfgDefOptionCheck(ConfigDefineOption optionDefId);
|
|||||||
const char *cfgDefOptionDefault(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
const char *cfgDefOptionDefault(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
bool cfgDefOptionDepend(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
bool cfgDefOptionDepend(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
ConfigDefineOption cfgDefOptionDependOption(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
ConfigDefineOption cfgDefOptionDependOption(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
int cfgDefOptionDependValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
unsigned int cfgDefOptionDependValueTotal(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
bool cfgDefOptionDependValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value);
|
bool cfgDefOptionDependValueValid(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, const char *value);
|
||||||
const char *cfgDefOptionDependValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, int valueId);
|
const char *cfgDefOptionDependValue(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId, unsigned int valueId);
|
||||||
const char *cfgDefOptionHelpDescription(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
const char *cfgDefOptionHelpDescription(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
bool cfgDefOptionHelpNameAlt(ConfigDefineOption optionDefId);
|
bool cfgDefOptionHelpNameAlt(ConfigDefineOption optionDefId);
|
||||||
const char *cfgDefOptionHelpNameAltValue(ConfigDefineOption optionDefId, int valueId);
|
const char *cfgDefOptionHelpNameAltValue(ConfigDefineOption optionDefId, unsigned int valueId);
|
||||||
int cfgDefOptionHelpNameAltValueTotal(ConfigDefineOption optionDefId);
|
unsigned int cfgDefOptionHelpNameAltValueTotal(ConfigDefineOption optionDefId);
|
||||||
const char *cfgDefOptionHelpSection(ConfigDefineOption optionDefId);
|
const char *cfgDefOptionHelpSection(ConfigDefineOption optionDefId);
|
||||||
const char *cfgDefOptionHelpSummary(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
const char *cfgDefOptionHelpSummary(ConfigDefineCommand commandDefId, ConfigDefineOption optionDefId);
|
||||||
int cfgDefOptionId(const char *optionName);
|
int cfgDefOptionId(const char *optionName);
|
||||||
|
|||||||
@@ -52,11 +52,8 @@ void
|
|||||||
cfgLoadUpdateOption()
|
cfgLoadUpdateOption()
|
||||||
{
|
{
|
||||||
// Set default for repo-host-cmd
|
// Set default for repo-host-cmd
|
||||||
if (cfgOptionValid(cfgOptRepoHost) && cfgOptionTest(cfgOptRepoHost) &&
|
if (cfgOptionTest(cfgOptRepoHost) && cfgOptionSource(cfgOptRepoHostCmd) == cfgSourceDefault)
|
||||||
cfgOptionSource(cfgOptRepoHostCmd) == cfgSourceDefault)
|
|
||||||
{
|
|
||||||
cfgOptionDefaultSet(cfgOptRepoHostCmd, varNewStr(cfgExe()));
|
cfgOptionDefaultSet(cfgOptRepoHostCmd, varNewStr(cfgExe()));
|
||||||
}
|
|
||||||
|
|
||||||
// Set default for pg-host-cmd
|
// Set default for pg-host-cmd
|
||||||
if (cfgOptionValid(cfgOptPgHostCmd))
|
if (cfgOptionValid(cfgOptPgHostCmd))
|
||||||
@@ -78,10 +75,10 @@ cfgLoadUpdateOption()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
THROW_FMT(OptionInvalidValueError,
|
THROW_FMT(OptionInvalidValueError,
|
||||||
"'%f' is not valid for '%s' option\nHINT '%s' option (%f) should be greater than '%s' option (%f).",
|
"'%s' is not valid for '%s' option\nHINT '%s' option (%s) should be greater than '%s' option (%s).",
|
||||||
cfgOptionDbl(cfgOptProtocolTimeout), cfgOptionName(cfgOptProtocolTimeout),
|
strPtr(varStrForce(cfgOption(cfgOptProtocolTimeout))), cfgOptionName(cfgOptProtocolTimeout),
|
||||||
cfgOptionName(cfgOptProtocolTimeout), cfgOptionDbl(cfgOptProtocolTimeout), cfgOptionName(cfgOptDbTimeout),
|
cfgOptionName(cfgOptProtocolTimeout), strPtr(varStrForce(cfgOption(cfgOptProtocolTimeout))),
|
||||||
cfgOptionDbl(cfgOptDbTimeout));
|
cfgOptionName(cfgOptDbTimeout), strPtr(varStrForce(cfgOption(cfgOptDbTimeout))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +135,6 @@ cfgLoadUpdateOption()
|
|||||||
cfgOptionName(cfgOptRepoRetentionArchiveType), strPtr(archiveRetentionType));
|
cfgOptionName(cfgOptRepoRetentionArchiveType), strPtr(archiveRetentionType));
|
||||||
|
|
||||||
// If the archive retention is not explicitly set then determine what it should be defaulted to
|
// If the archive retention is not explicitly set then determine what it should be defaulted to
|
||||||
// to.
|
|
||||||
if (!cfgOptionTest(cfgOptRepoRetentionArchive + optionIdx))
|
if (!cfgOptionTest(cfgOptRepoRetentionArchive + optionIdx))
|
||||||
{
|
{
|
||||||
// If repo-retention-archive-type is default, then if repo-retention-full is set, set the repo-retention-archive
|
// If repo-retention-archive-type is default, then if repo-retention-full is set, set the repo-retention-archive
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ Configuration Load
|
|||||||
#ifndef CONFIG_LOAD_H
|
#ifndef CONFIG_LOAD_H
|
||||||
#define CONFIG_LOAD_H
|
#define CONFIG_LOAD_H
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
Functions
|
Functions
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
|
|||||||
@@ -784,7 +784,8 @@ configParse(unsigned int argListSize, const char *argList[])
|
|||||||
// Build the list of possible depend values
|
// Build the list of possible depend values
|
||||||
StringList *dependValueList = strLstNew();
|
StringList *dependValueList = strLstNew();
|
||||||
|
|
||||||
for (int listIdx = 0; listIdx < cfgDefOptionDependValueTotal(commandDefId, optionDefId); listIdx++)
|
for (unsigned int listIdx = 0;
|
||||||
|
listIdx < cfgDefOptionDependValueTotal(commandDefId, optionDefId); listIdx++)
|
||||||
{
|
{
|
||||||
const char *dependValue = cfgDefOptionDependValue(commandDefId, optionDefId, listIdx);
|
const char *dependValue = cfgDefOptionDependValue(commandDefId, optionDefId, listIdx);
|
||||||
|
|
||||||
|
|||||||
@@ -348,7 +348,7 @@ unit:
|
|||||||
|
|
||||||
# ----------------------------------------------------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------------------------------
|
||||||
- name: load
|
- name: load
|
||||||
total: 1
|
total: 3
|
||||||
|
|
||||||
coverage:
|
coverage:
|
||||||
config/load: full
|
config/load: full
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ testRun()
|
|||||||
TEST_RESULT_BOOL(cfgDefOptionAllowList(cfgDefCmdBackup, cfgDefOptPgHost), false, "allow list not valid");
|
TEST_RESULT_BOOL(cfgDefOptionAllowList(cfgDefCmdBackup, cfgDefOptPgHost), false, "allow list not valid");
|
||||||
TEST_RESULT_BOOL(cfgDefOptionAllowList(cfgDefCmdBackup, cfgDefOptType), true, "command allow list valid");
|
TEST_RESULT_BOOL(cfgDefOptionAllowList(cfgDefCmdBackup, cfgDefOptType), true, "command allow list valid");
|
||||||
|
|
||||||
|
TEST_RESULT_INT(cfgDefOptionAllowListValueTotal(cfgDefCmdBackup, cfgDefOptChecksumPage), 0, "allow list total = 0");
|
||||||
|
|
||||||
TEST_RESULT_INT(cfgDefOptionAllowListValueTotal(cfgDefCmdBackup, cfgDefOptType), 3, "allow list total");
|
TEST_RESULT_INT(cfgDefOptionAllowListValueTotal(cfgDefCmdBackup, cfgDefOptType), 3, "allow list total");
|
||||||
|
|
||||||
TEST_RESULT_STR(cfgDefOptionAllowListValue(cfgDefCmdBackup, cfgDefOptType, 0), "full", "allow list value 0");
|
TEST_RESULT_STR(cfgDefOptionAllowListValue(cfgDefCmdBackup, cfgDefOptType, 0), "full", "allow list value 0");
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ Test Configuration Load
|
|||||||
#include "common/log.h"
|
#include "common/log.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
|
#include "common/harnessConfig.h"
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
Test run
|
Test run
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
@@ -11,89 +13,228 @@ void
|
|||||||
testRun()
|
testRun()
|
||||||
{
|
{
|
||||||
// *****************************************************************************************************************************
|
// *****************************************************************************************************************************
|
||||||
if (testBegin("cfgLoad()"))
|
if (testBegin("cfgLoadLogSetting()"))
|
||||||
{
|
{
|
||||||
|
cfgInit();
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoadLogSetting(), "load log settings all defaults");
|
||||||
|
|
||||||
|
TEST_RESULT_INT(logLevelStdOut, logLevelOff, "console logging is off");
|
||||||
|
TEST_RESULT_INT(logLevelStdErr, logLevelOff, "stderr logging is off");
|
||||||
|
TEST_RESULT_INT(logLevelFile, logLevelOff, "file logging is off");
|
||||||
|
TEST_RESULT_BOOL(logTimestamp, true, "timestamp logging is on");
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
|
cfgInit();
|
||||||
|
cfgCommandSet(cfgCmdLocal);
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptLogLevelConsole, true);
|
||||||
|
cfgOptionSet(cfgOptLogLevelConsole, cfgSourceParam, varNewStrZ("info"));
|
||||||
|
cfgOptionValidSet(cfgOptLogLevelStderr, true);
|
||||||
|
cfgOptionSet(cfgOptLogLevelStderr, cfgSourceParam, varNewStrZ("error"));
|
||||||
|
cfgOptionValidSet(cfgOptLogLevelFile, true);
|
||||||
|
cfgOptionSet(cfgOptLogLevelFile, cfgSourceParam, varNewStrZ("debug"));
|
||||||
|
cfgOptionValidSet(cfgOptLogTimestamp, true);
|
||||||
|
cfgOptionSet(cfgOptLogTimestamp, cfgSourceParam, varNewBool(false));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoadLogSetting(), "load log settings no defaults");
|
||||||
|
TEST_RESULT_INT(logLevelStdOut, logLevelInfo, "console logging is info");
|
||||||
|
TEST_RESULT_INT(logLevelStdErr, logLevelError, "stderr logging is error");
|
||||||
|
TEST_RESULT_INT(logLevelFile, logLevelDebug, "file logging is debugging");
|
||||||
|
TEST_RESULT_BOOL(logTimestamp, false, "timestamp logging is off");
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
|
cfgInit();
|
||||||
|
cfgCommandSet(cfgCmdLocal);
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptLogLevelStderr, true);
|
||||||
|
cfgOptionSet(cfgOptLogLevelStderr, cfgSourceParam, varNewStrZ("info"));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoadLogSetting(), "load log settings reset stderr");
|
||||||
|
|
||||||
|
TEST_RESULT_INT(logLevelStdErr, logLevelError, "stderr logging is error");
|
||||||
|
}
|
||||||
|
|
||||||
|
// *****************************************************************************************************************************
|
||||||
|
if (testBegin("cfgLoadUpdateOption()"))
|
||||||
|
{
|
||||||
|
String *exe = strNew("/path/to/pgbackrest");
|
||||||
|
String *exeOther = strNew("/other/path/to/pgbackrest");
|
||||||
|
|
||||||
|
cfgInit();
|
||||||
|
cfgCommandSet(cfgCmdBackup);
|
||||||
|
cfgExeSet(exe);
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptRepoHost, true);
|
||||||
|
cfgOptionValidSet(cfgOptPgHost, true);
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "hosts are not set so don't update commands");
|
||||||
|
|
||||||
|
cfgOptionSet(cfgOptRepoHost, cfgSourceParam, varNewStrZ("repo-host"));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "repo remote command is updated");
|
||||||
|
TEST_RESULT_STR(strPtr(cfgOptionStr(cfgOptRepoHostCmd)), strPtr(exe), " check repo1-host-cmd");
|
||||||
|
|
||||||
|
cfgOptionSet(cfgOptRepoHostCmd, cfgSourceParam, varNewStr(exeOther));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "repo remote command was already set");
|
||||||
|
TEST_RESULT_STR(strPtr(cfgOptionStr(cfgOptRepoHostCmd)), strPtr(exeOther), " check repo1-host-cmd");
|
||||||
|
|
||||||
|
cfgOptionSet(cfgOptRepoHost, cfgSourceParam, NULL);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
|
cfgOptionValidSet(cfgOptPgHostCmd, true);
|
||||||
|
cfgOptionSet(cfgOptPgHost, cfgSourceParam, varNewStrZ("pg1-host"));
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptPgHost + 1, true);
|
||||||
|
cfgOptionSet(cfgOptPgHost + 1, cfgSourceParam, varNewStrZ("pg2-host"));
|
||||||
|
cfgOptionValidSet(cfgOptPgHostCmd + 1, true);
|
||||||
|
cfgOptionSet(cfgOptPgHostCmd + 1, cfgSourceParam, varNewStr(exeOther));
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptPgHost + cfgOptionIndexTotal(cfgOptPgHost) - 1, true);
|
||||||
|
cfgOptionSet(cfgOptPgHost + cfgOptionIndexTotal(cfgOptPgHost) - 1, cfgSourceParam, varNewStrZ("pgX-host"));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "pg remote command is updated");
|
||||||
|
TEST_RESULT_STR(strPtr(cfgOptionStr(cfgOptPgHostCmd)), strPtr(exe), " check pg1-host-cmd");
|
||||||
|
TEST_RESULT_STR(strPtr(cfgOptionStr(cfgOptPgHostCmd + 1)), strPtr(exeOther), " check pg2-host-cmd is already set");
|
||||||
|
TEST_RESULT_STR(strPtr(cfgOptionStr(cfgOptPgHostCmd + 2)), NULL, " check pg3-host-cmd is not set");
|
||||||
|
TEST_RESULT_STR(
|
||||||
|
strPtr(cfgOptionStr(cfgOptPgHostCmd + cfgOptionIndexTotal(cfgOptPgHost) - 1)), strPtr(exe), " check pgX-host-cmd");
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
|
cfgInit();
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptDbTimeout, true);
|
||||||
|
cfgOptionSet(cfgOptDbTimeout, cfgSourceParam, varNewDbl(100));
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "pg timeout set but not protocol timeout");
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptProtocolTimeout, true);
|
||||||
|
cfgOptionSet(cfgOptProtocolTimeout, cfgSourceDefault, varNewDbl(101));
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "protocol timeout > pg timeout");
|
||||||
|
|
||||||
|
cfgOptionSet(cfgOptDbTimeout, cfgSourceParam, varNewDbl(100000));
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "protocol timeout set automatically");
|
||||||
|
TEST_RESULT_DOUBLE(cfgOptionDbl(cfgOptProtocolTimeout), 100030, " check protocol timeout");
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptProtocolTimeout, true);
|
||||||
|
cfgOptionSet(cfgOptProtocolTimeout, cfgSourceParam, varNewDbl(50.5));
|
||||||
|
TEST_ERROR(
|
||||||
|
cfgLoadUpdateOption(), OptionInvalidValueError,
|
||||||
|
"'50.5' is not valid for 'protocol-timeout' option\n"
|
||||||
|
"HINT 'protocol-timeout' option (50.5) should be greater than 'db-timeout' option (100000).");
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
|
cfgInit();
|
||||||
|
cfgCommandSet(cfgCmdBackup);
|
||||||
|
cfgExeSet(exe);
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptPgHost, true);
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "only repo-host is valid");
|
||||||
|
|
||||||
|
cfgOptionValidSet(cfgOptRepoHost, true);
|
||||||
|
cfgOptionSet(cfgOptRepoHost, cfgSourceParam, varNewStrZ("repo-host"));
|
||||||
|
cfgOptionValidSet(cfgOptPgHost + 4, true);
|
||||||
|
cfgOptionSet(cfgOptPgHost + 4, cfgSourceParam, varNewStrZ("pg5-host"));
|
||||||
|
TEST_ERROR(cfgLoadUpdateOption(), ConfigError, "pg and repo hosts cannot both be configured as remote");
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
StringList *argList = strLstNew();
|
StringList *argList = strLstNew();
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
strLstAdd(argList, strNew("pgbackrest"));
|
||||||
strLstAdd(argList, strNew("archive-get"));
|
|
||||||
|
|
||||||
TEST_ERROR(
|
|
||||||
cfgLoad(strLstSize(argList), strLstPtr(argList)), OptionRequiredError,
|
|
||||||
"archive-get command requires option: stanza");
|
|
||||||
|
|
||||||
TEST_RESULT_INT(logLevelStdOut, logLevelWarn, "console logging is error");
|
|
||||||
TEST_RESULT_INT(logLevelStdErr, logLevelWarn, "stderr logging is error");
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--host-id=1"));
|
|
||||||
strLstAdd(argList, strNew("--process=1"));
|
|
||||||
strLstAdd(argList, strNew("--command=backup"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
strLstAdd(argList, strNew("--stanza=db"));
|
||||||
strLstAdd(argList, strNew("--type=backup"));
|
strLstAdd(argList, strNew("--log-level-console=info"));
|
||||||
strLstAdd(argList, strNew("--log-level-stderr=info"));
|
strLstAdd(argList, strNew("--log-level-stderr=off"));
|
||||||
strLstAdd(argList, strNew("local"));
|
strLstAdd(argList, strNew("--no-log-timestamp"));
|
||||||
|
strLstAdd(argList, strNew("expire"));
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load local config");
|
TEST_RESULT_VOID(harnessCfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
||||||
|
testLogResult(
|
||||||
|
"P00 WARN: option repo1-retention-full is not set, the repository may run out of space\n"
|
||||||
|
" HINT: to retain full backups indefinitely (without warning), set option"
|
||||||
|
" 'repo1-retention-full' to the maximum.");
|
||||||
|
TEST_RESULT_BOOL(cfgOptionTest(cfgOptRepoRetentionArchive), false, " repo1-retention-archive not set");
|
||||||
|
|
||||||
TEST_RESULT_STR(strPtr(cfgExe()), "pgbackrest", "check exe");
|
|
||||||
TEST_RESULT_INT(logLevelStdOut, logLevelOff, "console logging is off");
|
|
||||||
TEST_RESULT_INT(logLevelStdErr, logLevelError, "stderr logging is error");
|
|
||||||
TEST_RESULT_INT(logLevelFile, logLevelOff, "file logging is off");
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
|
||||||
strLstAdd(argList, strNew("archive-push"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load archive-push config");
|
|
||||||
TEST_RESULT_PTR(cfgOptionDefault(cfgOptRepoHostCmd), NULL, " command archive-push, option repo1-host-cmd default");
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
|
||||||
strLstAdd(argList, strNew("--repo1-host=backup"));
|
|
||||||
strLstAdd(argList, strNew("archive-push"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load archive-push config");
|
|
||||||
TEST_RESULT_STR(
|
|
||||||
strPtr(varStr(cfgOptionDefault(cfgOptRepoHostCmd))), strPtr(cfgExe()),
|
|
||||||
" command archive-push, option repo1-host-cmd default");
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--pg1-path=/path/to/db"));
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-full=1"));
|
strLstAdd(argList, strNew("--repo1-retention-full=1"));
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
|
||||||
strLstAdd(argList, strNew("backup"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load backup config");
|
TEST_RESULT_VOID(harnessCfgLoad(strLstSize(argList), strLstPtr(argList)), "load config no retention warning");
|
||||||
TEST_RESULT_PTR(cfgOptionDefault(cfgOptPgHostCmd), NULL, " command backup, option pg1-host-cmd default");
|
TEST_RESULT_INT(cfgOptionInt(cfgOptRepoRetentionArchive), 1, " repo1-retention-archive set");
|
||||||
TEST_RESULT_BOOL(lockRelease(true), true, "release backup lock");
|
|
||||||
|
// Munge repo-type for coverage. This will go away when there are multiple repos.
|
||||||
|
cfgOptionSet(cfgOptRepoType, cfgSourceParam, NULL);
|
||||||
|
TEST_RESULT_VOID(cfgLoadUpdateOption(), "load config no repo-type");
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
|
||||||
argList = strLstNew();
|
argList = strLstNew();
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
strLstAdd(argList, strNew("pgbackrest"));
|
||||||
strLstAdd(argList, strNew("--pg1-host=db"));
|
|
||||||
strLstAdd(argList, strNew("--pg1-path=/path/to/db"));
|
|
||||||
strLstAdd(argList, strNew("--pg3-host=db"));
|
|
||||||
strLstAdd(argList, strNew("--pg3-path=/path/to/db"));
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-full=1"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
strLstAdd(argList, strNew("--stanza=db"));
|
||||||
strLstAdd(argList, strNew("backup"));
|
strLstAdd(argList, strNew("--log-level-console=info"));
|
||||||
|
strLstAdd(argList, strNew("--log-level-stderr=off"));
|
||||||
|
strLstAdd(argList, strNew("--no-log-timestamp"));
|
||||||
|
strLstAdd(argList, strNew("--repo1-retention-archive-type=incr"));
|
||||||
|
strLstAdd(argList, strNew("expire"));
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load backup config");
|
TEST_RESULT_VOID(harnessCfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
||||||
TEST_RESULT_STR(
|
testLogResult(
|
||||||
strPtr(varStr(cfgOptionDefault(cfgOptPgHostCmd))), strPtr(cfgExe()), " command backup, option pg1-host-cmd default");
|
"P00 WARN: option repo1-retention-full is not set, the repository may run out of space\n"
|
||||||
TEST_RESULT_PTR(cfgOptionDefault(cfgOptPgHostCmd + 1), NULL, " command backup, option pg2-host-cmd default");
|
" HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full'"
|
||||||
TEST_RESULT_STR(
|
" to the maximum.\n"
|
||||||
strPtr(varStr(cfgOptionDefault(cfgOptPgHostCmd + 2))), strPtr(cfgExe()),
|
"P00 WARN: WAL segments will not be expired: option 'repo1-retention-archive-type=incr' but option"
|
||||||
" command backup, option pg3-host-cmd default");
|
" 'repo1-retention-archive' is not set");
|
||||||
TEST_RESULT_BOOL(lockRelease(true), true, "release backup lock");
|
TEST_RESULT_BOOL(cfgOptionTest(cfgOptRepoRetentionArchive), false, " repo1-retention-archive not set");
|
||||||
|
|
||||||
|
argList = strLstNew();
|
||||||
|
strLstAdd(argList, strNew("pgbackrest"));
|
||||||
|
strLstAdd(argList, strNew("--stanza=db"));
|
||||||
|
strLstAdd(argList, strNew("--log-level-console=info"));
|
||||||
|
strLstAdd(argList, strNew("--log-level-stderr=off"));
|
||||||
|
strLstAdd(argList, strNew("--no-log-timestamp"));
|
||||||
|
strLstAdd(argList, strNew("--repo1-retention-archive-type=diff"));
|
||||||
|
strLstAdd(argList, strNew("expire"));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(harnessCfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
||||||
|
testLogResult(
|
||||||
|
"P00 WARN: option repo1-retention-full is not set, the repository may run out of space\n"
|
||||||
|
" HINT: to retain full backups indefinitely (without warning), set option"
|
||||||
|
" 'repo1-retention-full' to the maximum.\n"
|
||||||
|
"P00 WARN: WAL segments will not be expired: option 'repo1-retention-archive-type=diff' but neither option"
|
||||||
|
" 'repo1-retention-archive' nor option 'repo1-retention-diff' is set");
|
||||||
|
TEST_RESULT_BOOL(cfgOptionTest(cfgOptRepoRetentionArchive), false, " repo1-retention-archive not set");
|
||||||
|
|
||||||
|
strLstAdd(argList, strNew("--repo1-retention-diff=2"));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(harnessCfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
||||||
|
testLogResult(
|
||||||
|
"P00 WARN: option repo1-retention-full is not set, the repository may run out of space\n"
|
||||||
|
" HINT: to retain full backups indefinitely (without warning), set option"
|
||||||
|
" 'repo1-retention-full' to the maximum.");
|
||||||
|
TEST_RESULT_INT(cfgOptionInt(cfgOptRepoRetentionArchive), 2, " repo1-retention-archive set to retention-diff");
|
||||||
|
|
||||||
|
argList = strLstNew();
|
||||||
|
strLstAdd(argList, strNew("pgbackrest"));
|
||||||
|
strLstAdd(argList, strNew("--stanza=db"));
|
||||||
|
strLstAdd(argList, strNew("--log-level-console=info"));
|
||||||
|
strLstAdd(argList, strNew("--log-level-stderr=off"));
|
||||||
|
strLstAdd(argList, strNew("--no-log-timestamp"));
|
||||||
|
strLstAdd(argList, strNew("--repo1-retention-archive-type=diff"));
|
||||||
|
strLstAdd(argList, strNew("--repo1-retention-archive=3"));
|
||||||
|
strLstAdd(argList, strNew("--repo1-retention-full=1"));
|
||||||
|
strLstAdd(argList, strNew("expire"));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(harnessCfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
||||||
|
testLogResult(
|
||||||
|
"P00 WARN: option 'repo1-retention-diff' is not set for 'repo1-retention-archive-type=diff'\n"
|
||||||
|
" HINT: to retain differential backups indefinitely (without warning), set option 'repo1-retention-diff'"
|
||||||
|
" to the maximum.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// *****************************************************************************************************************************
|
||||||
|
if (testBegin("cfgLoad()"))
|
||||||
|
{
|
||||||
|
// Command does not have umask
|
||||||
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
|
StringList *argList = strLstNew();
|
||||||
|
strLstAdd(argList, strNew("pgbackrest"));
|
||||||
|
strLstAdd(argList, strNew("info"));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config and don't set umask");
|
||||||
|
|
||||||
// Set a distinct umask value and test that the umask is reset by configLoad since default for neutral-umask=y
|
// Set a distinct umask value and test that the umask is reset by configLoad since default for neutral-umask=y
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -118,164 +259,23 @@ testRun()
|
|||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for no-neutral-umask");
|
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for no-neutral-umask");
|
||||||
TEST_RESULT_INT(umask(0), 0111, " umask was not reset");
|
TEST_RESULT_INT(umask(0), 0111, " umask was not reset");
|
||||||
|
|
||||||
// db-timeout / protocol-timeout tests
|
// No command
|
||||||
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
|
argList = strLstNew();
|
||||||
|
strLstAdd(argList, strNew("pgbackrest"));
|
||||||
|
|
||||||
|
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "no command");
|
||||||
|
|
||||||
|
// Command takes lock and opens log file
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
argList = strLstNew();
|
argList = strLstNew();
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
strLstAdd(argList, strNew("pgbackrest"));
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
strLstAdd(argList, strNew("--stanza=db"));
|
||||||
strLstAdd(argList, strNew("--db-timeout=1830"));
|
strLstAdd(argList, strNew("--pg1-path=/path"));
|
||||||
strLstAdd(argList, strNew("archive-get"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for protocol-timeout reset");
|
|
||||||
TEST_RESULT_DOUBLE(cfgOptionDbl(cfgOptDbTimeout), 1830, " db-timeout set");
|
|
||||||
TEST_RESULT_DOUBLE(cfgOptionDbl(cfgOptProtocolTimeout), 1860, " protocol-timeout set greater than db-timeout");
|
|
||||||
|
|
||||||
// Set the protocol-timeout so the source is the command line and not the default
|
|
||||||
strLstAdd(argList, strNew("--protocol-timeout=1820"));
|
|
||||||
TEST_ERROR(
|
|
||||||
cfgLoad(strLstSize(argList), strLstPtr(argList)), OptionInvalidValueError,
|
|
||||||
strPtr(strNewFmt("'%f' is not valid for '%s' option\n"
|
|
||||||
"HINT '%s' option (%f) should be greater than '%s' option (%f).",
|
|
||||||
cfgOptionDbl(cfgOptProtocolTimeout), cfgOptionName(cfgOptProtocolTimeout),
|
|
||||||
cfgOptionName(cfgOptProtocolTimeout), cfgOptionDbl(cfgOptProtocolTimeout), cfgOptionName(cfgOptDbTimeout),
|
|
||||||
cfgOptionDbl(cfgOptDbTimeout))));
|
|
||||||
|
|
||||||
// pg-host and repo-host tests
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
|
||||||
strLstAdd(argList, strNew("--pg2-host=pg2"));
|
|
||||||
strLstAdd(argList, strNew("archive-get"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for pg and repo host test");
|
|
||||||
|
|
||||||
strLstAdd(argList, strNew("--repo1-host=repo1"));
|
|
||||||
|
|
||||||
TEST_ERROR(
|
|
||||||
cfgLoad(strLstSize(argList), strLstPtr(argList)), ConfigError,
|
|
||||||
"pg and repo hosts cannot both be configured as remote");
|
|
||||||
|
|
||||||
// retention
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
|
||||||
strLstAdd(argList, strNew("--log-level-console=info"));
|
|
||||||
strLstAdd(argList, strNew("--log-level-stderr=off"));
|
|
||||||
strLstAdd(argList, strNew("--no-log-timestamp"));
|
|
||||||
strLstAdd(argList, strNew("expire"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
|
||||||
testLogResult(
|
|
||||||
"P00 WARN: unable to open log file '/var/log/pgbackrest/db-expire.log': No such file or directory\n"
|
|
||||||
" NOTE: process will continue without log file.\n"
|
|
||||||
"P00 INFO: expire command begin " PGBACKREST_VERSION ": --log-level-console=info --log-level-stderr=off"
|
|
||||||
" --no-log-timestamp --stanza=db\n"
|
|
||||||
"P00 WARN: option repo1-retention-full is not set, the repository may run out of space\n"
|
|
||||||
" HINT: to retain full backups indefinitely (without warning), set option"
|
|
||||||
" 'repo1-retention-full' to the maximum.");
|
|
||||||
TEST_RESULT_BOOL(cfgOptionTest(cfgOptRepoRetentionArchive), false, " repo1-retention-archive not set");
|
|
||||||
TEST_RESULT_BOOL(lockRelease(true), true, "release expire lock");
|
|
||||||
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-full=1"));
|
strLstAdd(argList, strNew("--repo1-retention-full=1"));
|
||||||
|
strLstAdd(argList, strNewFmt("--log-path=%s", testPath()));
|
||||||
|
strLstAdd(argList, strNew("backup"));
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config no retention warning");
|
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "lock and open log file");
|
||||||
testLogResult(
|
|
||||||
"P00 WARN: unable to open log file '/var/log/pgbackrest/db-expire.log': No such file or directory\n"
|
|
||||||
" NOTE: process will continue without log file.\n"
|
|
||||||
"P00 INFO: expire command begin " PGBACKREST_VERSION ": --log-level-console=info --log-level-stderr=off"
|
|
||||||
" --no-log-timestamp --repo1-retention-full=1 --stanza=db");
|
|
||||||
TEST_RESULT_INT(cfgOptionInt(cfgOptRepoRetentionArchive), 1, " repo1-retention-archive set");
|
|
||||||
TEST_RESULT_BOOL(lockRelease(true), true, "release expire lock");
|
|
||||||
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
|
||||||
strLstAdd(argList, strNew("--log-level-console=info"));
|
|
||||||
strLstAdd(argList, strNew("--log-level-stderr=off"));
|
|
||||||
strLstAdd(argList, strNew("--no-log-timestamp"));
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-archive-type=incr"));
|
|
||||||
strLstAdd(argList, strNew("expire"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
|
||||||
testLogResult(
|
|
||||||
"P00 WARN: unable to open log file '/var/log/pgbackrest/db-expire.log': No such file or directory\n"
|
|
||||||
" NOTE: process will continue without log file.\n"
|
|
||||||
"P00 INFO: expire command begin " PGBACKREST_VERSION ": --log-level-console=info --log-level-stderr=off"
|
|
||||||
" --no-log-timestamp --repo1-retention-archive-type=incr --stanza=db\n"
|
|
||||||
"P00 WARN: option repo1-retention-full is not set, the repository may run out of space\n"
|
|
||||||
" HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full'"
|
|
||||||
" to the maximum.\n"
|
|
||||||
"P00 WARN: WAL segments will not be expired: option 'repo1-retention-archive-type=incr' but option"
|
|
||||||
" 'repo1-retention-archive' is not set");
|
|
||||||
TEST_RESULT_BOOL(cfgOptionTest(cfgOptRepoRetentionArchive), false, " repo1-retention-archive not set");
|
|
||||||
TEST_RESULT_BOOL(lockRelease(true), true, "release expire lock");
|
|
||||||
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
|
||||||
strLstAdd(argList, strNew("--log-level-console=info"));
|
|
||||||
strLstAdd(argList, strNew("--log-level-stderr=off"));
|
|
||||||
strLstAdd(argList, strNew("--no-log-timestamp"));
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-archive-type=diff"));
|
|
||||||
strLstAdd(argList, strNew("expire"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
|
||||||
testLogResult(
|
|
||||||
"P00 WARN: unable to open log file '/var/log/pgbackrest/db-expire.log': No such file or directory\n"
|
|
||||||
" NOTE: process will continue without log file.\n"
|
|
||||||
"P00 INFO: expire command begin " PGBACKREST_VERSION ": --log-level-console=info --log-level-stderr=off"
|
|
||||||
" --no-log-timestamp --repo1-retention-archive-type=diff --stanza=db\n"
|
|
||||||
"P00 WARN: option repo1-retention-full is not set, the repository may run out of space\n"
|
|
||||||
" HINT: to retain full backups indefinitely (without warning), set option"
|
|
||||||
" 'repo1-retention-full' to the maximum.\n"
|
|
||||||
"P00 WARN: WAL segments will not be expired: option 'repo1-retention-archive-type=diff' but neither option"
|
|
||||||
" 'repo1-retention-archive' nor option 'repo1-retention-diff' is set");
|
|
||||||
TEST_RESULT_BOOL(cfgOptionTest(cfgOptRepoRetentionArchive), false, " repo1-retention-archive not set");
|
|
||||||
TEST_RESULT_BOOL(lockRelease(true), true, "release expire lock");
|
|
||||||
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-diff=2"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
|
||||||
testLogResult(
|
|
||||||
"P00 WARN: unable to open log file '/var/log/pgbackrest/db-expire.log': No such file or directory\n"
|
|
||||||
" NOTE: process will continue without log file.\n"
|
|
||||||
"P00 INFO: expire command begin " PGBACKREST_VERSION ": --log-level-console=info --log-level-stderr=off"
|
|
||||||
" --no-log-timestamp --repo1-retention-archive-type=diff --repo1-retention-diff=2 --stanza=db\n"
|
|
||||||
"P00 WARN: option repo1-retention-full is not set, the repository may run out of space\n"
|
|
||||||
" HINT: to retain full backups indefinitely (without warning), set option"
|
|
||||||
" 'repo1-retention-full' to the maximum.");
|
|
||||||
TEST_RESULT_INT(cfgOptionInt(cfgOptRepoRetentionArchive), 2, " repo1-retention-archive set to retention-diff");
|
|
||||||
TEST_RESULT_BOOL(lockRelease(true), true, "release expire lock");
|
|
||||||
|
|
||||||
argList = strLstNew();
|
|
||||||
strLstAdd(argList, strNew("pgbackrest"));
|
|
||||||
strLstAdd(argList, strNew("--stanza=db"));
|
|
||||||
strLstAdd(argList, strNew("--log-level-console=info"));
|
|
||||||
strLstAdd(argList, strNew("--log-level-stderr=off"));
|
|
||||||
strLstAdd(argList, strNew("--no-log-timestamp"));
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-archive-type=diff"));
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-archive=3"));
|
|
||||||
strLstAdd(argList, strNew("--repo1-retention-full=1"));
|
|
||||||
strLstAdd(argList, strNew("expire"));
|
|
||||||
|
|
||||||
TEST_RESULT_VOID(cfgLoad(strLstSize(argList), strLstPtr(argList)), "load config for retention warning");
|
|
||||||
testLogResult(
|
|
||||||
"P00 WARN: unable to open log file '/var/log/pgbackrest/db-expire.log': No such file or directory\n"
|
|
||||||
" NOTE: process will continue without log file.\n"
|
|
||||||
"P00 INFO: expire command begin " PGBACKREST_VERSION ": --log-level-console=info --log-level-stderr=off"
|
|
||||||
" --no-log-timestamp --repo1-retention-archive=3 --repo1-retention-archive-type=diff --repo1-retention-full=1"
|
|
||||||
" --stanza=db\n"
|
|
||||||
"P00 WARN: option 'repo1-retention-diff' is not set for 'repo1-retention-archive-type=diff'\n"
|
|
||||||
" HINT: to retain differential backups indefinitely (without warning), set option 'repo1-retention-diff'"
|
|
||||||
" to the maximum.");
|
|
||||||
TEST_RESULT_BOOL(lockRelease(true), true, "release expire lock");
|
|
||||||
|
|
||||||
testLogErrResult(
|
|
||||||
"WARN: unable to open log file '/var/log/pgbackrest/db-backup.log': No such file or directory\n"
|
|
||||||
"NOTE: process will continue without log file.\n"
|
|
||||||
"WARN: unable to open log file '/var/log/pgbackrest/db-backup.log': No such file or directory\n"
|
|
||||||
"NOTE: process will continue without log file.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user