17 #include "absl/debugging/failure_signal_handler.h"
25 #include "gtest/gtest.h"
26 #include "gmock/gmock.h"
27 #include "absl/base/internal/raw_logging.h"
28 #include "absl/debugging/stacktrace.h"
29 #include "absl/debugging/symbolize.h"
30 #include "absl/strings/match.h"
31 #include "absl/strings/str_cat.h"
37 #if GTEST_HAS_DEATH_TEST
43 void InstallHandlerAndRaise(
int signo) {
48 TEST_P(FailureSignalHandlerDeathTest, AbslFailureSignal) {
49 const int signo = GetParam();
52 " received at time=");
54 EXPECT_EXIT(InstallHandlerAndRaise(signo), testing::KilledBySignal(signo),
64 void WriteToErrorFile(
const char*
msg) {
74 static const char*
const kTmpEnvVars[] = {
"TEST_TMPDIR",
"TMPDIR",
"TEMP",
76 for (
const char*
const var : kTmpEnvVars) {
78 if (tmp_dir !=
nullptr) {
88 void InstallHandlerWithWriteToFileAndRaise(
const char*
file,
int signo) {
89 error_file = fopen(
file,
"w");
92 options.writerfn = WriteToErrorFile;
97 TEST_P(FailureSignalHandlerDeathTest, AbslFatalSignalsWithWriterFn) {
98 const int signo = GetParam();
104 " received at time=");
106 EXPECT_EXIT(InstallHandlerWithWriteToFileAndRaise(
file.c_str(), signo),
107 testing::KilledBySignal(signo), exit_regex);
111 InstallHandlerWithWriteToFileAndRaise(
file.c_str(), signo), exit_regex);
115 std::fstream error_output(
file);
118 std::getline(error_output, error_line);
127 #if defined(__linux__)
132 std::getline(error_output, error_line);
137 constexpr
int kFailureSignals[] = {
138 SIGSEGV, SIGILL, SIGFPE, SIGABRT, SIGTERM,
144 std::string SignalParamToString(const ::testing::TestParamInfo<int>& info) {
155 SignalParamToString);
157 #endif // GTEST_HAS_DEATH_TEST
161 int main(
int argc,
char** argv) {