xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/common/platform/api/quiche_stack_trace_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 #include "quiche/common/platform/api/quiche_stack_trace.h"
2 
3 #include <cstdint>
4 
5 #include "absl/base/attributes.h"
6 #include "absl/base/optimization.h"
7 #include "absl/strings/str_cat.h"
8 #include "quiche/common/platform/api/quiche_test.h"
9 
10 namespace quiche {
11 namespace test {
12 namespace {
13 
ShouldRunTest()14 bool ShouldRunTest() {
15 #if defined(ABSL_HAVE_ATTRIBUTE_NOINLINE)
16   return QuicheShouldRunStackTraceTest();
17 #else
18   // If QuicheDesignatedStackTraceTestFunction gets inlined, the test will
19   // inevitably fail, since the function won't be on the stack trace.  Disable
20   // the test in that scenario.
21   return false;
22 #endif
23 }
24 
QuicheDesignatedStackTraceTestFunction()25 ABSL_ATTRIBUTE_NOINLINE std::string QuicheDesignatedStackTraceTestFunction() {
26   std::string result = QuicheStackTrace();
27   ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
28   return result;
29 }
30 
31 ABSL_ATTRIBUTE_NOINLINE std::string
QuicheDesignatedTwoStepStackTraceTestFunction()32 QuicheDesignatedTwoStepStackTraceTestFunction() {
33   std::string result = SymbolizeStackTrace(CurrentStackTrace());
34   ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
35   return result;
36 }
37 
TEST(QuicheStackTraceTest,GetStackTrace)38 TEST(QuicheStackTraceTest, GetStackTrace) {
39   if (!ShouldRunTest()) {
40     return;
41   }
42 
43   std::string stacktrace = QuicheDesignatedStackTraceTestFunction();
44   EXPECT_THAT(stacktrace,
45               testing::HasSubstr("QuicheDesignatedStackTraceTestFunction"));
46 }
47 
TEST(QuicheStackTraceTest,GetStackTraceInTwoSteps)48 TEST(QuicheStackTraceTest, GetStackTraceInTwoSteps) {
49   if (!ShouldRunTest()) {
50     return;
51   }
52 
53   std::string stacktrace = QuicheDesignatedTwoStepStackTraceTestFunction();
54   EXPECT_THAT(stacktrace, testing::HasSubstr(
55                               "QuicheDesignatedTwoStepStackTraceTestFunction"));
56 }
57 
58 }  // namespace
59 }  // namespace test
60 }  // namespace quiche
61