tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

flags_test.cc (6317B)


      1 //
      2 // Copyright 2022 The Abseil Authors.
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      https://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 
     16 #include "absl/log/internal/flags.h"
     17 
     18 #include <string>
     19 
     20 #include "gmock/gmock.h"
     21 #include "gtest/gtest.h"
     22 #include "absl/base/attributes.h"
     23 #include "absl/base/log_severity.h"
     24 #include "absl/flags/flag.h"
     25 #include "absl/flags/reflection.h"
     26 #include "absl/log/globals.h"
     27 #include "absl/log/internal/test_helpers.h"
     28 #include "absl/log/internal/test_matchers.h"
     29 #include "absl/log/log.h"
     30 #include "absl/log/scoped_mock_log.h"
     31 #include "absl/strings/str_cat.h"
     32 
     33 namespace {
     34 using ::absl::log_internal::TextMessage;
     35 
     36 using ::testing::HasSubstr;
     37 using ::testing::Not;
     38 
     39 auto* test_env ABSL_ATTRIBUTE_UNUSED = ::testing::AddGlobalTestEnvironment(
     40    new absl::log_internal::LogTestEnvironment);
     41 
     42 constexpr static absl::LogSeverityAtLeast DefaultStderrThreshold() {
     43  return absl::LogSeverityAtLeast::kError;
     44 }
     45 
     46 class LogFlagsTest : public ::testing::Test {
     47 protected:
     48  absl::FlagSaver flag_saver_;
     49 };
     50 
     51 // This test is disabled because it adds order dependency to the test suite.
     52 // This order dependency is currently not fixable due to the way the
     53 // stderrthreshold global value is out of sync with the stderrthreshold flag.
     54 TEST_F(LogFlagsTest, DISABLED_StderrKnobsDefault) {
     55  EXPECT_EQ(absl::StderrThreshold(), DefaultStderrThreshold());
     56 }
     57 
     58 TEST_F(LogFlagsTest, SetStderrThreshold) {
     59  absl::SetFlag(&FLAGS_stderrthreshold,
     60                static_cast<int>(absl::LogSeverityAtLeast::kInfo));
     61 
     62  EXPECT_EQ(absl::StderrThreshold(), absl::LogSeverityAtLeast::kInfo);
     63 
     64  absl::SetFlag(&FLAGS_stderrthreshold,
     65                static_cast<int>(absl::LogSeverityAtLeast::kError));
     66 
     67  EXPECT_EQ(absl::StderrThreshold(), absl::LogSeverityAtLeast::kError);
     68 }
     69 
     70 TEST_F(LogFlagsTest, SetMinLogLevel) {
     71  absl::SetFlag(&FLAGS_minloglevel,
     72                static_cast<int>(absl::LogSeverityAtLeast::kError));
     73 
     74  EXPECT_EQ(absl::MinLogLevel(), absl::LogSeverityAtLeast::kError);
     75 
     76  absl::log_internal::ScopedMinLogLevel scoped_min_log_level(
     77      absl::LogSeverityAtLeast::kWarning);
     78 
     79  EXPECT_EQ(absl::GetFlag(FLAGS_minloglevel),
     80            static_cast<int>(absl::LogSeverityAtLeast::kWarning));
     81 }
     82 
     83 TEST_F(LogFlagsTest, PrependLogPrefix) {
     84  absl::SetFlag(&FLAGS_log_prefix, false);
     85 
     86  EXPECT_EQ(absl::ShouldPrependLogPrefix(), false);
     87 
     88  absl::EnableLogPrefix(true);
     89 
     90  EXPECT_EQ(absl::GetFlag(FLAGS_log_prefix), true);
     91 }
     92 
     93 TEST_F(LogFlagsTest, EmptyBacktraceAtFlag) {
     94  absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
     95  absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
     96 
     97  EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
     98 
     99  test_sink.StartCapturingLogs();
    100  absl::SetFlag(&FLAGS_log_backtrace_at, "");
    101  LOG(INFO) << "hello world";
    102 }
    103 
    104 TEST_F(LogFlagsTest, BacktraceAtNonsense) {
    105  absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
    106  absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
    107 
    108  EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
    109 
    110  test_sink.StartCapturingLogs();
    111  absl::SetFlag(&FLAGS_log_backtrace_at, "gibberish");
    112  LOG(INFO) << "hello world";
    113 }
    114 
    115 TEST_F(LogFlagsTest, BacktraceAtWrongFile) {
    116  absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
    117  const int log_line = __LINE__ + 1;
    118  auto do_log = [] { LOG(INFO) << "hello world"; };
    119  absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
    120 
    121  EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
    122 
    123  test_sink.StartCapturingLogs();
    124  absl::SetFlag(&FLAGS_log_backtrace_at,
    125                absl::StrCat("some_other_file.cc:", log_line));
    126  do_log();
    127 }
    128 
    129 TEST_F(LogFlagsTest, BacktraceAtWrongLine) {
    130  absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
    131  const int log_line = __LINE__ + 1;
    132  auto do_log = [] { LOG(INFO) << "hello world"; };
    133  absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
    134 
    135  EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
    136 
    137  test_sink.StartCapturingLogs();
    138  absl::SetFlag(&FLAGS_log_backtrace_at,
    139                absl::StrCat("flags_test.cc:", log_line + 1));
    140  do_log();
    141 }
    142 
    143 TEST_F(LogFlagsTest, BacktraceAtWholeFilename) {
    144  absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
    145  const int log_line = __LINE__ + 1;
    146  auto do_log = [] { LOG(INFO) << "hello world"; };
    147  absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
    148 
    149  EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
    150 
    151  test_sink.StartCapturingLogs();
    152  absl::SetFlag(&FLAGS_log_backtrace_at, absl::StrCat(__FILE__, ":", log_line));
    153  do_log();
    154 }
    155 
    156 TEST_F(LogFlagsTest, BacktraceAtNonmatchingSuffix) {
    157  absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
    158  const int log_line = __LINE__ + 1;
    159  auto do_log = [] { LOG(INFO) << "hello world"; };
    160  absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
    161 
    162  EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
    163 
    164  test_sink.StartCapturingLogs();
    165  absl::SetFlag(&FLAGS_log_backtrace_at,
    166                absl::StrCat("flags_test.cc:", log_line, "gibberish"));
    167  do_log();
    168 }
    169 
    170 TEST_F(LogFlagsTest, LogsBacktrace) {
    171  absl::SetMinLogLevel(absl::LogSeverityAtLeast::kInfo);
    172  const int log_line = __LINE__ + 1;
    173  auto do_log = [] { LOG(INFO) << "hello world"; };
    174  absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected);
    175 
    176  testing::InSequence seq;
    177  EXPECT_CALL(test_sink, Send(TextMessage(HasSubstr("(stacktrace:"))));
    178  EXPECT_CALL(test_sink, Send(TextMessage(Not(HasSubstr("(stacktrace:")))));
    179 
    180  test_sink.StartCapturingLogs();
    181  absl::SetFlag(&FLAGS_log_backtrace_at,
    182                absl::StrCat("flags_test.cc:", log_line));
    183  do_log();
    184  absl::SetFlag(&FLAGS_log_backtrace_at, "");
    185  do_log();
    186 }
    187 
    188 }  // namespace