mirror of
https://github.com/KjellKod/g3log.git
synced 2025-03-04 07:27:25 +01:00
Added missing test for custom signal handling for SIGTERM
This commit is contained in:
parent
602e135f84
commit
fae01d5e92
@ -293,22 +293,6 @@ int main(int argc, char **argv)
|
||||
auto handle= worker->addDefaultLogger(argv[0], path_to_log_file);
|
||||
g3::initializeLogging(worker.get());
|
||||
g3::setFatalPreLoggingHook(&breakHere);
|
||||
|
||||
|
||||
// <sigh>: Not yet added example of fatal signals that can be overridden
|
||||
// Example: Running this with SIGTERM turned off, and choosing to "die by SIGTERM"
|
||||
// will exit the process without catching the signal
|
||||
//
|
||||
// Enable the code below will override the signal setup, all signals active except SIGTERM
|
||||
// g3::overrideSetupSignals({ {SIGABRT, "SIGABRT"}, {SIGFPE, "SIGFPE"},{SIGILL, "SIGILL"},
|
||||
// {SIGSEGV, "SIGSEGV"},});
|
||||
//
|
||||
// the code below.... can be used to restore the signal handler again
|
||||
// In truth: I don't really see how this can be used
|
||||
// ...... maybe a separate signal handler for sigterm.... and running this in a unit test?
|
||||
//g3::restoreSignalHandlerToDefault();
|
||||
don't compile on purpose
|
||||
|
||||
std::future<std::string> log_file_name = handle->call(&g3::FileSink::fileName);
|
||||
|
||||
std::cout << "**** G3LOG FATAL EXAMPLE ***\n\n"
|
||||
|
@ -312,6 +312,57 @@ TEST(LogTest, LOGF__FATAL) {
|
||||
}
|
||||
|
||||
|
||||
TEST(LogTest, FatalSIGTERM__UsingDefaultHandler) {
|
||||
RestoreFileLogger logger(log_directory);
|
||||
g_fatal_counter.store(0);
|
||||
g3::setFatalPreLoggingHook(fatalCounter);
|
||||
raise(SIGTERM);
|
||||
logger.reset();
|
||||
EXPECT_EQ(g_fatal_counter.load(), size_t{1});
|
||||
}
|
||||
|
||||
namespace {
|
||||
std::atomic<size_t> customFatalCounter = {0};
|
||||
std::atomic<int> lastEncounteredSignal = {0};
|
||||
void customSignalHandler(int signal_number, siginfo_t* info, void* unused_context) {
|
||||
lastEncounteredSignal.store(signal_number);
|
||||
++customFatalCounter;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void installCustomSIGTERM () {
|
||||
struct sigaction action;
|
||||
memset(&action, 0, sizeof (action));
|
||||
sigemptyset(&action.sa_mask);
|
||||
action.sa_sigaction = &customSignalHandler;
|
||||
action.sa_flags = SA_SIGINFO;
|
||||
sigaction(SIGTERM, &action, nullptr);
|
||||
}
|
||||
|
||||
} // anonymous
|
||||
|
||||
TEST(LogTest, FatalSIGTERM__UsingCustomHandler) {
|
||||
RestoreFileLogger logger(log_directory);
|
||||
g_fatal_counter.store(0);
|
||||
g3::setFatalPreLoggingHook(fatalCounter);
|
||||
installCustomSIGTERM();
|
||||
g3::overrideSetupSignals({ {SIGABRT, "SIGABRT"}, {SIGFPE, "SIGFPE"}, {SIGILL, "SIGILL"}});
|
||||
|
||||
installCustomSIGTERM();
|
||||
EXPECT_EQ(customFatalCounter, 0);
|
||||
EXPECT_EQ(lastEncounteredSignal.load(), 0);
|
||||
|
||||
|
||||
raise(SIGTERM);
|
||||
logger.reset();
|
||||
EXPECT_EQ(g_fatal_counter.load(), size_t{0});
|
||||
EXPECT_EQ(lastEncounteredSignal.load(), SIGTERM);
|
||||
EXPECT_EQ(customFatalCounter, 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
TEST(LogTest, LOG_preFatalLogging_hook) {
|
||||
{
|
||||
RestoreFileLogger logger(log_directory);
|
||||
|
Loading…
x
Reference in New Issue
Block a user