You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-07-15 01:04:37 +02:00
Allow default process id to be specified in logInit().
The default process id was previously always 0 but there are cases where it is useful to be able to set the default. Currently the only use case is for testing but the upcoming server code will also make use of it.
This commit is contained in:
@ -37,6 +37,9 @@ DEBUG_UNIT_EXTERN bool logFileBanner = false;
|
|||||||
// Is the timestamp printed in the log?
|
// Is the timestamp printed in the log?
|
||||||
static bool logTimestamp = false;
|
static bool logTimestamp = false;
|
||||||
|
|
||||||
|
// Default process id if none is specified
|
||||||
|
DEBUG_UNIT_EXTERN unsigned int logProcessId = 0;
|
||||||
|
|
||||||
// Size of the process id field
|
// Size of the process id field
|
||||||
static int logProcessSize = 2;
|
static int logProcessSize = 2;
|
||||||
|
|
||||||
@ -143,13 +146,14 @@ logAny(LogLevel logLevel)
|
|||||||
void
|
void
|
||||||
logInit(
|
logInit(
|
||||||
LogLevel logLevelStdOutParam, LogLevel logLevelStdErrParam, LogLevel logLevelFileParam, bool logTimestampParam,
|
LogLevel logLevelStdOutParam, LogLevel logLevelStdErrParam, LogLevel logLevelFileParam, bool logTimestampParam,
|
||||||
unsigned int logProcessMax, bool dryRunParam)
|
unsigned int processId, unsigned int logProcessMax, bool dryRunParam)
|
||||||
{
|
{
|
||||||
FUNCTION_TEST_BEGIN();
|
FUNCTION_TEST_BEGIN();
|
||||||
FUNCTION_TEST_PARAM(ENUM, logLevelStdOutParam);
|
FUNCTION_TEST_PARAM(ENUM, logLevelStdOutParam);
|
||||||
FUNCTION_TEST_PARAM(ENUM, logLevelStdErrParam);
|
FUNCTION_TEST_PARAM(ENUM, logLevelStdErrParam);
|
||||||
FUNCTION_TEST_PARAM(ENUM, logLevelFileParam);
|
FUNCTION_TEST_PARAM(ENUM, logLevelFileParam);
|
||||||
FUNCTION_TEST_PARAM(BOOL, logTimestampParam);
|
FUNCTION_TEST_PARAM(BOOL, logTimestampParam);
|
||||||
|
FUNCTION_TEST_PARAM(UINT, processId);
|
||||||
FUNCTION_TEST_PARAM(UINT, logProcessMax);
|
FUNCTION_TEST_PARAM(UINT, logProcessMax);
|
||||||
FUNCTION_TEST_PARAM(BOOL, dryRunParam);
|
FUNCTION_TEST_PARAM(BOOL, dryRunParam);
|
||||||
FUNCTION_TEST_END();
|
FUNCTION_TEST_END();
|
||||||
@ -157,12 +161,14 @@ logInit(
|
|||||||
ASSERT(logLevelStdOutParam <= LOG_LEVEL_MAX);
|
ASSERT(logLevelStdOutParam <= LOG_LEVEL_MAX);
|
||||||
ASSERT(logLevelStdErrParam <= LOG_LEVEL_MAX);
|
ASSERT(logLevelStdErrParam <= LOG_LEVEL_MAX);
|
||||||
ASSERT(logLevelFileParam <= LOG_LEVEL_MAX);
|
ASSERT(logLevelFileParam <= LOG_LEVEL_MAX);
|
||||||
|
ASSERT(processId <= 999);
|
||||||
ASSERT(logProcessMax <= 999);
|
ASSERT(logProcessMax <= 999);
|
||||||
|
|
||||||
logLevelStdOut = logLevelStdOutParam;
|
logLevelStdOut = logLevelStdOutParam;
|
||||||
logLevelStdErr = logLevelStdErrParam;
|
logLevelStdErr = logLevelStdErrParam;
|
||||||
logLevelFile = logLevelFileParam;
|
logLevelFile = logLevelFileParam;
|
||||||
logTimestamp = logTimestampParam;
|
logTimestamp = logTimestampParam;
|
||||||
|
logProcessId = processId;
|
||||||
logProcessSize = logProcessMax > 99 ? 3 : 2;
|
logProcessSize = logProcessMax > 99 ? 3 : 2;
|
||||||
logDryRun = dryRunParam;
|
logDryRun = dryRunParam;
|
||||||
|
|
||||||
@ -238,7 +244,7 @@ logClose(void)
|
|||||||
FUNCTION_TEST_VOID();
|
FUNCTION_TEST_VOID();
|
||||||
|
|
||||||
// Disable all logging
|
// Disable all logging
|
||||||
logInit(logLevelOff, logLevelOff, logLevelOff, false, 1, false);
|
logInit(logLevelOff, logLevelOff, logLevelOff, false, 0, 1, false);
|
||||||
|
|
||||||
// Close the log file if it is open
|
// Close the log file if it is open
|
||||||
logFileClose();
|
logFileClose();
|
||||||
@ -376,8 +382,8 @@ logPre(LogLevel logLevel, unsigned int processId, const char *fileName, const ch
|
|||||||
|
|
||||||
// Add process and aligned log level
|
// Add process and aligned log level
|
||||||
result.bufferPos += (size_t)snprintf(
|
result.bufferPos += (size_t)snprintf(
|
||||||
logBuffer + result.bufferPos, sizeof(logBuffer) - result.bufferPos, "P%0*u %*s: ", logProcessSize, processId, 6,
|
logBuffer + result.bufferPos, sizeof(logBuffer) - result.bufferPos, "P%0*u %*s: ", logProcessSize,
|
||||||
logLevelStr(logLevel));
|
processId == (unsigned int)-1 ? logProcessId : processId, 6, logLevelStr(logLevel));
|
||||||
|
|
||||||
// When writing to stderr the timestamp, process, and log level alignment will be skipped
|
// When writing to stderr the timestamp, process, and log level alignment will be skipped
|
||||||
result.logBufferStdErr = logBuffer + result.bufferPos - strlen(logLevelStr(logLevel)) - 2;
|
result.logBufferStdErr = logBuffer + result.bufferPos - strlen(logLevelStr(logLevel)) - 2;
|
||||||
|
@ -4,6 +4,7 @@ Log Handler
|
|||||||
#ifndef COMMON_LOG_H
|
#ifndef COMMON_LOG_H
|
||||||
#define COMMON_LOG_H
|
#define COMMON_LOG_H
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "common/logLevel.h"
|
#include "common/logLevel.h"
|
||||||
@ -21,7 +22,7 @@ Functions
|
|||||||
// Initialize the log system
|
// Initialize the log system
|
||||||
void logInit(
|
void logInit(
|
||||||
LogLevel logLevelStdOutParam, LogLevel logLevelStdErrParam, LogLevel logLevelFileParam, bool logTimestampParam,
|
LogLevel logLevelStdOutParam, LogLevel logLevelStdErrParam, LogLevel logLevelFileParam, bool logTimestampParam,
|
||||||
unsigned int logProcessMax, bool dryRun);
|
unsigned int processId, unsigned int logProcessMax, bool dryRun);
|
||||||
|
|
||||||
// Close the log system
|
// Close the log system
|
||||||
void logClose(void);
|
void logClose(void);
|
||||||
@ -111,7 +112,7 @@ do
|
|||||||
LOG_PID_FMT(logLevelTrace, processId, 0, __VA_ARGS__)
|
LOG_PID_FMT(logLevelTrace, processId, 0, __VA_ARGS__)
|
||||||
|
|
||||||
#define LOG(logLevel, code, message) \
|
#define LOG(logLevel, code, message) \
|
||||||
LOG_PID(logLevel, 0, code, message)
|
LOG_PID(logLevel, UINT_MAX, code, message)
|
||||||
|
|
||||||
#define LOG_ASSERT(message) \
|
#define LOG_ASSERT(message) \
|
||||||
LOG(logLevelAssert, errorTypeCode(&AssertError), message)
|
LOG(logLevelAssert, errorTypeCode(&AssertError), message)
|
||||||
@ -129,7 +130,7 @@ do
|
|||||||
LOG(logLevelTrace, 0, message)
|
LOG(logLevelTrace, 0, message)
|
||||||
|
|
||||||
#define LOG_FMT(logLevel, code, ...) \
|
#define LOG_FMT(logLevel, code, ...) \
|
||||||
LOG_PID_FMT(logLevel, 0, code, __VA_ARGS__)
|
LOG_PID_FMT(logLevel, UINT_MAX, code, __VA_ARGS__)
|
||||||
|
|
||||||
#define LOG_ASSERT_FMT(...) \
|
#define LOG_ASSERT_FMT(...) \
|
||||||
LOG_FMT(logLevelAssert, errorTypeCode(&AssertError), __VA_ARGS__)
|
LOG_FMT(logLevelAssert, errorTypeCode(&AssertError), __VA_ARGS__)
|
||||||
|
@ -52,7 +52,7 @@ cfgLoadLogSetting(void)
|
|||||||
logProcessMax = cfgOptionUInt(cfgOptProcessMax);
|
logProcessMax = cfgOptionUInt(cfgOptProcessMax);
|
||||||
|
|
||||||
logInit(
|
logInit(
|
||||||
logLevelConsole, logLevelStdErr, logLevelFile, logTimestamp, logProcessMax,
|
logLevelConsole, logLevelStdErr, logLevelFile, logTimestamp, 0, logProcessMax,
|
||||||
cfgOptionValid(cfgOptDryRun) && cfgOptionBool(cfgOptDryRun));
|
cfgOptionValid(cfgOptDryRun) && cfgOptionBool(cfgOptDryRun));
|
||||||
|
|
||||||
FUNCTION_LOG_RETURN_VOID();
|
FUNCTION_LOG_RETURN_VOID();
|
||||||
|
@ -613,7 +613,7 @@ configParse(unsigned int argListSize, const char *argList[], bool resetLogLevel)
|
|||||||
|
|
||||||
// Enable logging (except for local and remote commands) so config file warnings will be output
|
// Enable logging (except for local and remote commands) so config file warnings will be output
|
||||||
if (cfgCommandRole() != cfgCmdRoleLocal && cfgCommandRole() != cfgCmdRoleRemote && resetLogLevel)
|
if (cfgCommandRole() != cfgCmdRoleLocal && cfgCommandRole() != cfgCmdRoleRemote && resetLogLevel)
|
||||||
logInit(logLevelWarn, logLevelWarn, logLevelOff, false, 1, false);
|
logInit(logLevelWarn, logLevelWarn, logLevelOff, false, 0, 1, false);
|
||||||
|
|
||||||
// Only continue if command options need to be validated, i.e. a real command is running or we are getting help for a
|
// Only continue if command options need to be validated, i.e. a real command is running or we are getting help for a
|
||||||
// specific command and would like to display actual option values in the help.
|
// specific command and would like to display actual option values in the help.
|
||||||
|
@ -40,6 +40,8 @@ There should not be any code outside the HARNESS_FORK_CHILD_BEGIN/END() and HARN
|
|||||||
|
|
||||||
#include <common/fork.h>
|
#include <common/fork.h>
|
||||||
|
|
||||||
|
#include <common/harnessLog.h>
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
Define the max number of child processes allowed
|
Define the max number of child processes allowed
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
@ -141,6 +143,9 @@ Create a child process
|
|||||||
{ \
|
{ \
|
||||||
unsigned int HARNESS_FORK_PROCESS_IDX() = HARNESS_FORK_PROCESS_TOTAL(); \
|
unsigned int HARNESS_FORK_PROCESS_IDX() = HARNESS_FORK_PROCESS_TOTAL(); \
|
||||||
\
|
\
|
||||||
|
/* Change log process id to aid in debugging */ \
|
||||||
|
hrnLogProcessIdSet(HARNESS_FORK_PROCESS_IDX() + 1); \
|
||||||
|
\
|
||||||
if (pipeRequired) \
|
if (pipeRequired) \
|
||||||
{ \
|
{ \
|
||||||
close(HARNESS_FORK_PARENT_READ_PROCESS(HARNESS_FORK_PROCESS_IDX())); \
|
close(HARNESS_FORK_PARENT_READ_PROCESS(HARNESS_FORK_PROCESS_IDX())); \
|
||||||
|
@ -23,6 +23,7 @@ Expose log internal data for unit testing/debugging
|
|||||||
extern LogLevel logLevelFile;
|
extern LogLevel logLevelFile;
|
||||||
extern int logHandleFile;
|
extern int logHandleFile;
|
||||||
extern bool logFileBanner;
|
extern bool logFileBanner;
|
||||||
|
extern unsigned int logProcessId;
|
||||||
extern void logAnySet(void);
|
extern void logAnySet(void);
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
@ -72,7 +73,7 @@ harnessLogInit(void)
|
|||||||
{
|
{
|
||||||
FUNCTION_HARNESS_VOID();
|
FUNCTION_HARNESS_VOID();
|
||||||
|
|
||||||
logInit(logLevelTestDefault, logLevelOff, logLevelInfo, false, 99, false);
|
logInit(logLevelTestDefault, logLevelOff, logLevelInfo, false, logProcessId, 99, false);
|
||||||
logFileBanner = true;
|
logFileBanner = true;
|
||||||
|
|
||||||
snprintf(logFile, sizeof(logFile), "%s/expect.log", testDataPath());
|
snprintf(logFile, sizeof(logFile), "%s/expect.log", testDataPath());
|
||||||
@ -88,7 +89,7 @@ harnessLogDryRunSet(bool dryRun)
|
|||||||
{
|
{
|
||||||
logDryRunTest = dryRun;
|
logDryRunTest = dryRun;
|
||||||
|
|
||||||
logInit(logLevelTestDefault, logLevelOff, logLevelTest, false, 99, logDryRunTest);
|
logInit(logLevelTestDefault, logLevelOff, logLevelTest, false, logProcessId, 99, logDryRunTest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
@ -101,7 +102,7 @@ harnessLogLevelSet(LogLevel logLevel)
|
|||||||
{
|
{
|
||||||
logLevelTest = logLevel;
|
logLevelTest = logLevel;
|
||||||
|
|
||||||
logInit(logLevelTestDefault, logLevelOff, logLevelTest, false, 99, logDryRunTest);
|
logInit(logLevelTestDefault, logLevelOff, logLevelTest, false, logProcessId, 99, logDryRunTest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
@ -114,7 +115,7 @@ harnessLogLevelReset(void)
|
|||||||
{
|
{
|
||||||
logLevelTest = logLevelInfo;
|
logLevelTest = logLevelInfo;
|
||||||
|
|
||||||
logInit(logLevelTestDefault, logLevelOff, logLevelTest, false, 99, logDryRunTest);
|
logInit(logLevelTestDefault, logLevelOff, logLevelTest, false, logProcessId, 99, logDryRunTest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
@ -128,6 +129,12 @@ harnessLogLevelDefaultSet(LogLevel logLevel)
|
|||||||
logLevelTestDefault = logLevel;
|
logLevelTestDefault = logLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**********************************************************************************************************************************/
|
||||||
|
void hrnLogProcessIdSet(unsigned int processId)
|
||||||
|
{
|
||||||
|
logProcessId = processId;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
Load log result from file into the log buffer
|
Load log result from file into the log buffer
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
|
@ -26,6 +26,13 @@ Getters/Setters
|
|||||||
void harnessLogLevelReset(void);
|
void harnessLogLevelReset(void);
|
||||||
void harnessLogLevelSet(LogLevel logLevel);
|
void harnessLogLevelSet(LogLevel logLevel);
|
||||||
|
|
||||||
|
// Set the process id used for logging. Ignore the request if the logging module is not active yet.
|
||||||
|
#ifndef NO_LOG
|
||||||
|
void hrnLogProcessIdSet(unsigned int processId);
|
||||||
|
#else
|
||||||
|
#define hrnLogProcessIdSet(processId)
|
||||||
|
#endif
|
||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
Internal Setters
|
Internal Setters
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
|
@ -627,7 +627,7 @@ testRun(void)
|
|||||||
}
|
}
|
||||||
HARNESS_FORK_END();
|
HARNESS_FORK_END();
|
||||||
|
|
||||||
harnessLogResult("P00 INFO: unable to find 000000010000000100000001 in the archive");
|
harnessLogResult("P01 INFO: unable to find 000000010000000100000001 in the archive");
|
||||||
|
|
||||||
// Check for missing WAL
|
// Check for missing WAL
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
@ -644,7 +644,7 @@ testRun(void)
|
|||||||
}
|
}
|
||||||
HARNESS_FORK_END();
|
HARNESS_FORK_END();
|
||||||
|
|
||||||
harnessLogResult("P00 INFO: unable to find 000000010000000100000001 in the archive");
|
harnessLogResult("P01 INFO: unable to find 000000010000000100000001 in the archive");
|
||||||
|
|
||||||
TEST_RESULT_BOOL(
|
TEST_RESULT_BOOL(
|
||||||
storageExistsP(storageSpool(), strNewFmt(STORAGE_SPOOL_ARCHIVE_IN "/%s.ok", strPtr(walSegment))), false,
|
storageExistsP(storageSpool(), strNewFmt(STORAGE_SPOOL_ARCHIVE_IN "/%s.ok", strPtr(walSegment))), false,
|
||||||
@ -666,7 +666,7 @@ testRun(void)
|
|||||||
}
|
}
|
||||||
HARNESS_FORK_END();
|
HARNESS_FORK_END();
|
||||||
|
|
||||||
TEST_RESULT_VOID(harnessLogResult("P00 INFO: found 000000010000000100000001 in the archive"), "check log");
|
TEST_RESULT_VOID(harnessLogResult("P01 INFO: found 000000010000000100000001 in the archive"), "check log");
|
||||||
|
|
||||||
TEST_RESULT_BOOL(
|
TEST_RESULT_BOOL(
|
||||||
storageExistsP(storageSpoolWrite(), strNewFmt(STORAGE_SPOOL_ARCHIVE_IN "/%s", strPtr(walSegment))), false,
|
storageExistsP(storageSpoolWrite(), strNewFmt(STORAGE_SPOOL_ARCHIVE_IN "/%s", strPtr(walSegment))), false,
|
||||||
@ -698,7 +698,7 @@ testRun(void)
|
|||||||
}
|
}
|
||||||
HARNESS_FORK_END();
|
HARNESS_FORK_END();
|
||||||
|
|
||||||
TEST_RESULT_VOID(harnessLogResult("P00 INFO: found 000000010000000100000001 in the archive"), "check log");
|
TEST_RESULT_VOID(harnessLogResult("P01 INFO: found 000000010000000100000001 in the archive"), "check log");
|
||||||
|
|
||||||
TEST_RESULT_BOOL(storageExistsP(storageTest, walFile), true, "check WAL segment was moved");
|
TEST_RESULT_BOOL(storageExistsP(storageTest, walFile), true, "check WAL segment was moved");
|
||||||
|
|
||||||
@ -718,7 +718,7 @@ testRun(void)
|
|||||||
}
|
}
|
||||||
HARNESS_FORK_END();
|
HARNESS_FORK_END();
|
||||||
|
|
||||||
harnessLogResult("P00 INFO: unable to find 000000010000000100000001 in the archive");
|
harnessLogResult("P01 INFO: unable to find 000000010000000100000001 in the archive");
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
strLstAddZ(argList, BOGUS_STR);
|
strLstAddZ(argList, BOGUS_STR);
|
||||||
|
@ -14,6 +14,9 @@ testHttpServer(void)
|
|||||||
{
|
{
|
||||||
if (fork() == 0)
|
if (fork() == 0)
|
||||||
{
|
{
|
||||||
|
// Change log process id to aid in debugging
|
||||||
|
hrnLogProcessIdSet(1);
|
||||||
|
|
||||||
harnessTlsServerInitDefault();
|
harnessTlsServerInitDefault();
|
||||||
|
|
||||||
// Test no output from server
|
// Test no output from server
|
||||||
|
@ -16,6 +16,9 @@ testTlsServerAltName(void)
|
|||||||
{
|
{
|
||||||
if (fork() == 0)
|
if (fork() == 0)
|
||||||
{
|
{
|
||||||
|
// Change log process id to aid in debugging
|
||||||
|
hrnLogProcessIdSet(1);
|
||||||
|
|
||||||
harnessTlsServerInit(
|
harnessTlsServerInit(
|
||||||
harnessTlsTestPort(),
|
harnessTlsTestPort(),
|
||||||
strPtr(strNewFmt("%s/" TEST_CERTIFICATE_PREFIX "-alt-name.crt", testRepoPath())),
|
strPtr(strNewFmt("%s/" TEST_CERTIFICATE_PREFIX "-alt-name.crt", testRepoPath())),
|
||||||
@ -60,6 +63,9 @@ testTlsServer(void)
|
|||||||
{
|
{
|
||||||
if (fork() == 0)
|
if (fork() == 0)
|
||||||
{
|
{
|
||||||
|
// Change log process id to aid in debugging
|
||||||
|
hrnLogProcessIdSet(1);
|
||||||
|
|
||||||
harnessTlsServerInitDefault();
|
harnessTlsServerInitDefault();
|
||||||
|
|
||||||
// First protocol exchange
|
// First protocol exchange
|
||||||
|
@ -120,14 +120,14 @@ testRun(void)
|
|||||||
TEST_RESULT_INT(logLevelStdErr, logLevelError, "stderr logging is error");
|
TEST_RESULT_INT(logLevelStdErr, logLevelError, "stderr logging is error");
|
||||||
TEST_RESULT_INT(logLevelFile, logLevelOff, "file logging is off");
|
TEST_RESULT_INT(logLevelFile, logLevelOff, "file logging is off");
|
||||||
|
|
||||||
TEST_RESULT_VOID(logInit(logLevelInfo, logLevelWarn, logLevelError, true, 99, true), "init logging");
|
TEST_RESULT_VOID(logInit(logLevelInfo, logLevelWarn, logLevelError, true, 0, 99, true), "init logging");
|
||||||
TEST_RESULT_INT(logLevelStdOut, logLevelInfo, "console logging is info");
|
TEST_RESULT_INT(logLevelStdOut, logLevelInfo, "console logging is info");
|
||||||
TEST_RESULT_INT(logLevelStdErr, logLevelWarn, "stderr logging is warn");
|
TEST_RESULT_INT(logLevelStdErr, logLevelWarn, "stderr logging is warn");
|
||||||
TEST_RESULT_INT(logLevelFile, logLevelError, "file logging is error");
|
TEST_RESULT_INT(logLevelFile, logLevelError, "file logging is error");
|
||||||
TEST_RESULT_INT(logProcessSize, 2, "process field size is 2");
|
TEST_RESULT_INT(logProcessSize, 2, "process field size is 2");
|
||||||
TEST_RESULT_BOOL(logDryRun, true, "dry run is true");
|
TEST_RESULT_BOOL(logDryRun, true, "dry run is true");
|
||||||
|
|
||||||
TEST_RESULT_VOID(logInit(logLevelInfo, logLevelWarn, logLevelError, true, 100, false), "init logging");
|
TEST_RESULT_VOID(logInit(logLevelInfo, logLevelWarn, logLevelError, true, 0, 100, false), "init logging");
|
||||||
TEST_RESULT_INT(logProcessSize, 3, "process field size is 3");
|
TEST_RESULT_INT(logProcessSize, 3, "process field size is 3");
|
||||||
TEST_RESULT_BOOL(logDryRun, false, "dry run is false");
|
TEST_RESULT_BOOL(logDryRun, false, "dry run is false");
|
||||||
}
|
}
|
||||||
@ -168,12 +168,12 @@ testRun(void)
|
|||||||
// *****************************************************************************************************************************
|
// *****************************************************************************************************************************
|
||||||
if (testBegin("logInternal() and logInternalFmt()"))
|
if (testBegin("logInternal() and logInternalFmt()"))
|
||||||
{
|
{
|
||||||
TEST_RESULT_VOID(logInit(logLevelOff, logLevelOff, logLevelOff, false, 1, false), "init logging to off");
|
TEST_RESULT_VOID(logInit(logLevelOff, logLevelOff, logLevelOff, false, 0, 1, false), "init logging to off");
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInternal(logLevelWarn, LOG_LEVEL_MIN, LOG_LEVEL_MAX, 0, "file", "function", 0, "format"),
|
logInternal(logLevelWarn, LOG_LEVEL_MIN, LOG_LEVEL_MAX, 0, "file", "function", 0, "format"),
|
||||||
"message not logged anywhere");
|
"message not logged anywhere");
|
||||||
|
|
||||||
TEST_RESULT_VOID(logInit(logLevelWarn, logLevelOff, logLevelOff, true, 1, false), "init logging to warn (timestamp on)");
|
TEST_RESULT_VOID(logInit(logLevelWarn, logLevelOff, logLevelOff, true, 0, 1, false), "init logging to warn (timestamp on)");
|
||||||
TEST_RESULT_VOID(logFileSet(BOGUS_STR), "ignore bogus filename because file logging is off");
|
TEST_RESULT_VOID(logFileSet(BOGUS_STR), "ignore bogus filename because file logging is off");
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInternal(logLevelWarn, LOG_LEVEL_MIN, LOG_LEVEL_MAX, 0, "file", "function", 0, "TEST"), "log timestamp");
|
logInternal(logLevelWarn, LOG_LEVEL_MIN, LOG_LEVEL_MAX, 0, "file", "function", 0, "TEST"), "log timestamp");
|
||||||
@ -193,29 +193,31 @@ testRun(void)
|
|||||||
snprintf(stderrFile, sizeof(stderrFile), "%s/stderr.log", testPath());
|
snprintf(stderrFile, sizeof(stderrFile), "%s/stderr.log", testPath());
|
||||||
logHandleStdErr = testLogOpen(stderrFile, O_WRONLY | O_CREAT | O_TRUNC, 0640);
|
logHandleStdErr = testLogOpen(stderrFile, O_WRONLY | O_CREAT | O_TRUNC, 0640);
|
||||||
|
|
||||||
TEST_RESULT_VOID(logInit(logLevelWarn, logLevelOff, logLevelOff, false, 1, false), "init logging to warn (timestamp off)");
|
TEST_RESULT_VOID(
|
||||||
|
logInit(logLevelWarn, logLevelOff, logLevelOff, false, 44, 1, false), "init logging to warn (timestamp off)");
|
||||||
|
|
||||||
logBuffer[0] = 0;
|
logBuffer[0] = 0;
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInternalFmt(logLevelWarn, LOG_LEVEL_MIN, LOG_LEVEL_MAX, 0, "file", "function", 0, "format %d", 99), "log warn");
|
logInternalFmt(logLevelWarn, LOG_LEVEL_MIN, LOG_LEVEL_MAX, UINT_MAX, "file", "function", 0, "format %d", 99),
|
||||||
TEST_RESULT_Z(logBuffer, "P00 WARN: format 99\n", " check log");
|
"log warn");
|
||||||
|
TEST_RESULT_Z(logBuffer, "P44 WARN: format 99\n", " check log");
|
||||||
|
|
||||||
// This won't be logged due to the range
|
// This won't be logged due to the range
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInternal(logLevelWarn, logLevelError, logLevelError, 0, "file", "function", 0, "NOT OUTPUT"), "out of range");
|
logInternal(logLevelWarn, logLevelError, logLevelError, UINT_MAX, "file", "function", 0, "NOT OUTPUT"), "out of range");
|
||||||
|
|
||||||
logBuffer[0] = 0;
|
logBuffer[0] = 0;
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInternal(logLevelError, LOG_LEVEL_MIN, LOG_LEVEL_MAX, 0, "file", "function", 26, "message"), "log error");
|
logInternal(logLevelError, LOG_LEVEL_MIN, LOG_LEVEL_MAX, UINT_MAX, "file", "function", 26, "message"), "log error");
|
||||||
TEST_RESULT_Z(logBuffer, "P00 ERROR: [026]: message\n", " check log");
|
TEST_RESULT_Z(logBuffer, "P44 ERROR: [026]: message\n", " check log");
|
||||||
|
|
||||||
logBuffer[0] = 0;
|
logBuffer[0] = 0;
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInternal(logLevelError, LOG_LEVEL_MIN, LOG_LEVEL_MAX, 0, "file", "function", 26, "message1\nmessage2"),
|
logInternal(logLevelError, LOG_LEVEL_MIN, LOG_LEVEL_MAX, UINT_MAX, "file", "function", 26, "message1\nmessage2"),
|
||||||
"log error with multiple lines");
|
"log error with multiple lines");
|
||||||
TEST_RESULT_Z(logBuffer, "P00 ERROR: [026]: message1\nmessage2\n", " check log");
|
TEST_RESULT_Z(logBuffer, "P44 ERROR: [026]: message1\nmessage2\n", " check log");
|
||||||
|
|
||||||
TEST_RESULT_VOID(logInit(logLevelDebug, logLevelDebug, logLevelDebug, false, 999, false), "init logging to debug");
|
TEST_RESULT_VOID(logInit(logLevelDebug, logLevelDebug, logLevelDebug, false, 0, 999, false), "init logging to debug");
|
||||||
|
|
||||||
// Log to file
|
// Log to file
|
||||||
char fileFile[1024];
|
char fileFile[1024];
|
||||||
@ -230,16 +232,17 @@ testRun(void)
|
|||||||
|
|
||||||
// This won't be logged due to the range
|
// This won't be logged due to the range
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInternal(logLevelDebug, logLevelTrace, logLevelTrace, 0, "test.c", "test_func", 0, "NOT OUTPUT"), "out of range");
|
logInternal(logLevelDebug, logLevelTrace, logLevelTrace, UINT_MAX, "test.c", "test_func", 0, "NOT OUTPUT"),
|
||||||
|
"out of range");
|
||||||
|
|
||||||
logBuffer[0] = 0;
|
logBuffer[0] = 0;
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInternal(logLevelTrace, LOG_LEVEL_MIN, LOG_LEVEL_MAX, 0, "test.c", "test_func", 0, "message"), "log debug");
|
logInternal(logLevelTrace, LOG_LEVEL_MIN, LOG_LEVEL_MAX, UINT_MAX, "test.c", "test_func", 0, "message"), "log debug");
|
||||||
TEST_RESULT_Z(logBuffer, "P000 TRACE: test::test_func: message\n", " check log");
|
TEST_RESULT_Z(logBuffer, "P000 TRACE: test::test_func: message\n", " check log");
|
||||||
|
|
||||||
// Reopen the log file
|
// Reopen the log file
|
||||||
TEST_RESULT_VOID(
|
TEST_RESULT_VOID(
|
||||||
logInit(logLevelDebug, logLevelDebug, logLevelDebug, false, 99, true), "reduce process-id size and dry-run");
|
logInit(logLevelDebug, logLevelDebug, logLevelDebug, false, 0, 99, true), "reduce process-id size and dry-run");
|
||||||
TEST_RESULT_BOOL(logFileSet(fileFile), true, "open valid file");
|
TEST_RESULT_BOOL(logFileSet(fileFile), true, "open valid file");
|
||||||
|
|
||||||
logBuffer[0] = 0;
|
logBuffer[0] = 0;
|
||||||
@ -255,7 +258,7 @@ testRun(void)
|
|||||||
TEST_RESULT_INT(logHandleFile, -1, "log file is closed");
|
TEST_RESULT_INT(logHandleFile, -1, "log file is closed");
|
||||||
|
|
||||||
// Close logging again
|
// Close logging again
|
||||||
TEST_RESULT_VOID(logInit(logLevelDebug, logLevelDebug, logLevelDebug, false, 99, false), "reduce log size");
|
TEST_RESULT_VOID(logInit(logLevelDebug, logLevelDebug, logLevelDebug, false, 0, 99, false), "reduce log size");
|
||||||
TEST_RESULT_BOOL(logFileSet(fileFile), true, "open valid file");
|
TEST_RESULT_BOOL(logFileSet(fileFile), true, "open valid file");
|
||||||
TEST_RESULT_BOOL(logHandleFile != -1, true, "log file is open");
|
TEST_RESULT_BOOL(logHandleFile != -1, true, "log file is open");
|
||||||
|
|
||||||
@ -268,9 +271,9 @@ testRun(void)
|
|||||||
// Check stdout
|
// Check stdout
|
||||||
testLogResult(
|
testLogResult(
|
||||||
stdoutFile,
|
stdoutFile,
|
||||||
"P00 WARN: format 99\n"
|
"P44 WARN: format 99\n"
|
||||||
"P00 ERROR: [026]: message\n"
|
"P44 ERROR: [026]: message\n"
|
||||||
"P00 ERROR: [026]: message1\n"
|
"P44 ERROR: [026]: message1\n"
|
||||||
" message2");
|
" message2");
|
||||||
|
|
||||||
// Check stderr
|
// Check stderr
|
||||||
|
@ -87,6 +87,9 @@ testS3Server(void)
|
|||||||
{
|
{
|
||||||
if (fork() == 0)
|
if (fork() == 0)
|
||||||
{
|
{
|
||||||
|
// Change log process id to aid in debugging
|
||||||
|
hrnLogProcessIdSet(1);
|
||||||
|
|
||||||
harnessTlsServerInitDefault();
|
harnessTlsServerInitDefault();
|
||||||
harnessTlsServerAccept();
|
harnessTlsServerAccept();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user