Commit 8796f324 authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Commit Bot

Revert "[base] Cleanup StackTraceTest.OutputToStream #ifdef soup."

This reverts commit c5f7284b.

Reason for revert: 
suspect causing base_unittests failure on linux-chromeos-google-rel and chromeos-betty-google-rel:
- StackTraceTest.OutputToStream

Sample build: https://ci.chromium.org/p/chrome/builders/ci/linux-chromeos-google-rel/8635

Sample log: https://logs.chromium.org/logs/chrome/buildbucket/cr-buildbucket.appspot.com/8897671078839178960/+/steps/base_unittests/0/logs/Deterministic_failure:_StackTraceTest.OutputToStream__status_FAILURE_/0

Original change's description:
> [base] Cleanup StackTraceTest.OutputToStream #ifdef soup.
> 
> Change-Id: I7e43ea82867177c1aeab089f8f1e35abb802d1a1
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1780074
> Commit-Queue: Wez <wez@chromium.org>
> Reviewed-by: Albert J. Wong <ajwong@chromium.org>
> Auto-Submit: Wez <wez@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#712377}

TBR=ajwong@chromium.org,wez@chromium.org

Change-Id: I082cc38b748df06ce86324b13d2cd45dbdf1c7a6
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1898888Reviewed-by: default avatarTakashi Sakamoto <tasak@google.com>
Commit-Queue: Takashi Sakamoto <tasak@google.com>
Cr-Commit-Position: refs/heads/master@{#712413}
parent 8cfc412b
......@@ -31,11 +31,25 @@ typedef MultiProcessTest StackTraceTest;
typedef testing::Test StackTraceTest;
#endif
#if !defined(__UCLIBC__) && !defined(_AIX)
// StackTrace::OutputToStream() is not implemented under uclibc, nor AIX.
// See https://crbug.com/706728
// TODO(https://crbug.com/999737): Rewrite this test for better clarity and
// correctness.
// Note: On Linux, this test currently only fully works on Debug builds.
// See comments in the #ifdef soup if you intend to change this.
#if defined(OS_WIN)
// Always fails on Windows: crbug.com/32070
#define MAYBE_OutputToStream DISABLED_OutputToStream
#elif defined(OS_FUCHSIA) && defined(OFFICIAL_BUILD)
TEST_F(StackTraceTest, OutputToStream) {
// Backtraces aren't supported by Fuchsia release-optimized builds.
#define MAYBE_OutputToStream DISABLED_OutputToStream
#else
#define MAYBE_OutputToStream OutputToStream
#endif
#if !defined(__UCLIBC__) && !defined(_AIX)
TEST_F(StackTraceTest, MAYBE_OutputToStream) {
StackTrace trace;
// Dump the trace into a string.
......@@ -46,51 +60,76 @@ TEST_F(StackTraceTest, OutputToStream) {
// ToString() should produce the same output.
EXPECT_EQ(backtrace_message, trace.ToString());
size_t frames_found = 0;
trace.Addresses(&frames_found);
ASSERT_GE(frames_found, 5u) << "No stack frames found.";
#if defined(OFFICIAL_BUILD) && defined(OS_POSIX) && !defined(OS_MACOSX)
#if defined(OS_POSIX) && !defined(OS_MACOSX) && NDEBUG
// Stack traces require an extra data table that bloats our binaries,
// so they're turned off for official builds. We stop the test here,
// so they're turned off for release builds. We stop the test here,
// at least letting us verify that the calls don't crash.
return;
#endif // defined(OFFICIAL_BUILD) && defined(OS_POSIX) && !defined(OS_MACOSX)
#if defined(OS_FUCHSIA) || defined(OS_ANDROID)
// Under Fuchsia and Android, StackTrace emits executable build-Ids and
// address offsets which are symbolized on the test host system, rather than
// being symbolized in-process.
return;
#endif // defined(OS_FUCHSIA) || defined(OS_ANDROID)
#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && NDEBUG
#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER)
// Configurations such as ASAN and TSan emit unsymbolized stacks.
return;
#endif // defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER)
size_t frames_found = 0;
trace.Addresses(&frames_found);
ASSERT_GE(frames_found, 5u) <<
"No stack frames found. Skipping rest of test.";
// Check if the output has symbol initialization warning. If it does, fail.
ASSERT_EQ(backtrace_message.find("Dumping unresolved backtrace"),
std::string::npos)
<< "Unable to resolve symbols.";
std::string::npos) <<
"Unable to resolve symbols. Skipping rest of test.";
#if defined(OS_MACOSX)
#if 0
// Disabled due to -fvisibility=hidden in build config.
// Symbol resolution via the backtrace_symbol function does not work well
// in OS X.
// See this thread:
//
// http://lists.apple.com/archives/darwin-dev/2009/Mar/msg00111.html
//
// Just check instead that we find our way back to the "start" symbol
// which should be the first symbol in the trace.
//
// TODO(port): Find a more reliable way to resolve symbols.
// Expect to at least find main.
EXPECT_TRUE(backtrace_message.find("start") != std::string::npos)
<< "Expected to find start in backtrace:\n"
<< backtrace_message;
#endif
#elif defined(USE_SYMBOLIZE)
// This branch is for gcc-compiled code, but not Mac due to the
// above #if.
// Expect a demangled symbol.
// Note that Windows Release builds omit the fuction parameters from the
// demangled stack output, otherwise this could be "testing::Test::Run()".
EXPECT_TRUE(backtrace_message.find("testing::Test::Run") != std::string::npos)
EXPECT_TRUE(backtrace_message.find("testing::Test::Run()") !=
std::string::npos)
<< "Expected a demangled symbol in backtrace:\n"
<< backtrace_message;
#elif 0
// This is the fall-through case; it used to cover Windows.
// But it's disabled because of varying buildbot configs;
// some lack symbols.
// Expect to at least find main.
EXPECT_TRUE(backtrace_message.find("main") != std::string::npos)
<< "Expected to find main in backtrace:\n"
<< backtrace_message;
#if defined(OS_WIN)
// MSVC doesn't allow the use of C99's __func__ within C++, so we fake it with
// MSVC's __FUNCTION__ macro.
#define __func__ __FUNCTION__
#endif
// Expect to find this function as well.
// Note: This will fail if not linked with -rdynamic (aka -export_dynamic)
EXPECT_TRUE(backtrace_message.find(__func__) != std::string::npos)
<< "Expected to find " << __func__ << " in backtrace:\n"
<< backtrace_message;
#endif // define(OS_MACOSX)
}
#if !defined(OFFICIAL_BUILD) && !defined(NO_UNWIND_TABLES)
......@@ -107,7 +146,7 @@ TEST_F(StackTraceTest, TruncatedTrace) {
truncated.Addresses(&count);
EXPECT_EQ(2u, count);
}
#endif // !defined(OFFICIAL_BUILD) && !defined(NO_UNWIND_TABLES)
#endif // !defined(OFFICIAL_BUILD)
// The test is used for manual testing, e.g., to see the raw output.
TEST_F(StackTraceTest, DebugOutputToStream) {
......@@ -155,7 +194,7 @@ TEST_F(StackTraceTest, DebugOutputToStreamWithNullPrefix) {
trace.ToStringWithPrefix(nullptr);
}
#endif // !defined(__UCLIBC__) && !defined(_AIX)
#endif // !defined(__UCLIBC__)
#if defined(OS_POSIX) && !defined(OS_ANDROID)
#if !defined(OS_IOS)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment