Abseil Common Libraries (C++) (grcp 依赖)
https://abseil.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.8 KiB
105 lines
2.8 KiB
// |
|
// Copyright 2022 The Abseil Authors. |
|
// |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// https://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
|
|
#include <stdlib.h> |
|
|
|
#include <string> |
|
|
|
#include "gmock/gmock.h" |
|
#include "gtest/gtest.h" |
|
#include "absl/base/attributes.h" |
|
#include "absl/base/log_severity.h" |
|
#include "absl/log/globals.h" |
|
#include "absl/log/internal/test_helpers.h" |
|
#include "absl/log/log.h" |
|
|
|
namespace { |
|
using ::testing::AllOf; |
|
using ::testing::HasSubstr; |
|
|
|
auto* test_env ABSL_ATTRIBUTE_UNUSED = ::testing::AddGlobalTestEnvironment( |
|
new absl::log_internal::LogTestEnvironment); |
|
|
|
MATCHER_P2(HasSubstrTimes, substr, expected_count, "") { |
|
int count = 0; |
|
std::string::size_type pos = 0; |
|
std::string needle(substr); |
|
while ((pos = arg.find(needle, pos)) != std::string::npos) { |
|
++count; |
|
pos += needle.size(); |
|
} |
|
|
|
return count == expected_count; |
|
} |
|
|
|
TEST(StderrLogSinkDeathTest, InfoMessagesInStderr) { |
|
EXPECT_DEATH_IF_SUPPORTED( |
|
{ |
|
absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo); |
|
LOG(INFO) << "INFO message"; |
|
exit(1); |
|
}, |
|
"INFO message"); |
|
} |
|
|
|
TEST(StderrLogSinkDeathTest, WarningMessagesInStderr) { |
|
EXPECT_DEATH_IF_SUPPORTED( |
|
{ |
|
absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo); |
|
LOG(WARNING) << "WARNING message"; |
|
exit(1); |
|
}, |
|
"WARNING message"); |
|
} |
|
|
|
TEST(StderrLogSinkDeathTest, ErrorMessagesInStderr) { |
|
EXPECT_DEATH_IF_SUPPORTED( |
|
{ |
|
absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo); |
|
LOG(ERROR) << "ERROR message"; |
|
exit(1); |
|
}, |
|
"ERROR message"); |
|
} |
|
|
|
TEST(StderrLogSinkDeathTest, FatalMessagesInStderr) { |
|
char message[] = "FATAL message"; |
|
char stacktrace[] = "*** Check failure stack trace: ***"; |
|
|
|
int expected_count = 1; |
|
|
|
EXPECT_DEATH_IF_SUPPORTED( |
|
{ |
|
absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo); |
|
LOG(FATAL) << message; |
|
}, |
|
AllOf(HasSubstrTimes(message, expected_count), HasSubstr(stacktrace))); |
|
} |
|
|
|
TEST(StderrLogSinkDeathTest, SecondaryFatalMessagesInStderr) { |
|
auto MessageGen = []() -> std::string { |
|
LOG(FATAL) << "Internal failure"; |
|
return "External failure"; |
|
}; |
|
|
|
EXPECT_DEATH_IF_SUPPORTED( |
|
{ |
|
absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo); |
|
LOG(FATAL) << MessageGen(); |
|
}, |
|
"Internal failure"); |
|
} |
|
|
|
} // namespace
|
|
|