1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Note: this test tests LOG_V and LOG_E since all other logs are expressed 6 // in forms of them. LOG is also tested for good measure. 7 // Also note that we are only allowed to call InitLogging() twice so the test 8 // cases are more dense than normal. 9 10 // The following include must be first in this file. It ensures that 11 // libjingle style logging is used. 12 #define LOGGING_INSIDE_WEBRTC 13 14 #include "third_party/webrtc/overrides/webrtc/base/logging.h" 15 16 #include "base/command_line.h" 17 #include "base/files/file_util.h" 18 #include "testing/gtest/include/gtest/gtest.h" 19 20 #if defined(OS_WIN) 21 static const wchar_t* const log_file_name = L"libjingle_logging.log"; 22 #else 23 static const char* const log_file_name = "libjingle_logging.log"; 24 #endif 25 26 static const int kDefaultVerbosity = 0; 27 28 static const char* AsString(rtc::LoggingSeverity severity) { 29 switch (severity) { 30 case rtc::LS_ERROR: 31 return "LS_ERROR"; 32 case rtc::LS_WARNING: 33 return "LS_WARNING"; 34 case rtc::LS_INFO: 35 return "LS_INFO"; 36 case rtc::LS_VERBOSE: 37 return "LS_VERBOSE"; 38 case rtc::LS_SENSITIVE: 39 return "LS_SENSITIVE"; 40 default: 41 return ""; 42 } 43 } 44 45 static bool ContainsString(const std::string& original, 46 const char* string_to_match) { 47 return original.find(string_to_match) != std::string::npos; 48 } 49 50 static bool Initialize(int verbosity_level) { 51 if (verbosity_level != kDefaultVerbosity) { 52 // Update the command line with specified verbosity level for this file. 53 CommandLine* command_line = CommandLine::ForCurrentProcess(); 54 std::ostringstream value_stream; 55 value_stream << "logging_unittest=" << verbosity_level; 56 const std::string& value = value_stream.str(); 57 command_line->AppendSwitchASCII("vmodule", value); 58 } 59 60 // The command line flags are parsed here and the log file name is set. 61 logging::LoggingSettings settings; 62 settings.logging_dest = logging::LOG_TO_FILE; 63 settings.log_file = log_file_name; 64 settings.lock_log = logging::DONT_LOCK_LOG_FILE; 65 settings.delete_old = logging::DELETE_OLD_LOG_FILE; 66 if (!logging::InitLogging(settings)) { 67 return false; 68 } 69 EXPECT_TRUE(VLOG_IS_ON(verbosity_level)); 70 EXPECT_FALSE(VLOG_IS_ON(verbosity_level + 1)); 71 return true; 72 } 73 74 TEST(LibjingleLogTest, DefaultConfiguration) { 75 ASSERT_TRUE(Initialize(kDefaultVerbosity)); 76 77 // In the default configuration nothing should be logged. 78 LOG_V(rtc::LS_ERROR) << AsString(rtc::LS_ERROR); 79 LOG_V(rtc::LS_WARNING) << AsString(rtc::LS_WARNING); 80 LOG_V(rtc::LS_INFO) << AsString(rtc::LS_INFO); 81 LOG_V(rtc::LS_VERBOSE) << AsString(rtc::LS_VERBOSE); 82 LOG_V(rtc::LS_SENSITIVE) << AsString(rtc::LS_SENSITIVE); 83 84 // Read file to string. 85 base::FilePath file_path(log_file_name); 86 std::string contents_of_file; 87 base::ReadFileToString(file_path, &contents_of_file); 88 89 // Make sure string contains the expected values. 90 EXPECT_FALSE(ContainsString(contents_of_file, AsString(rtc::LS_ERROR))); 91 EXPECT_FALSE(ContainsString(contents_of_file, 92 AsString(rtc::LS_WARNING))); 93 EXPECT_FALSE(ContainsString(contents_of_file, AsString(rtc::LS_INFO))); 94 EXPECT_FALSE(ContainsString(contents_of_file, 95 AsString(rtc::LS_VERBOSE))); 96 EXPECT_FALSE(ContainsString(contents_of_file, 97 AsString(rtc::LS_SENSITIVE))); 98 } 99 100 TEST(LibjingleLogTest, InfoConfiguration) { 101 ASSERT_TRUE(Initialize(rtc::LS_INFO)); 102 103 // In this configuration everything lower or equal to LS_INFO should be 104 // logged. 105 LOG_V(rtc::LS_ERROR) << AsString(rtc::LS_ERROR); 106 LOG_V(rtc::LS_WARNING) << AsString(rtc::LS_WARNING); 107 LOG_V(rtc::LS_INFO) << AsString(rtc::LS_INFO); 108 LOG_V(rtc::LS_VERBOSE) << AsString(rtc::LS_VERBOSE); 109 LOG_V(rtc::LS_SENSITIVE) << AsString(rtc::LS_SENSITIVE); 110 111 // Read file to string. 112 base::FilePath file_path(log_file_name); 113 std::string contents_of_file; 114 base::ReadFileToString(file_path, &contents_of_file); 115 116 // Make sure string contains the expected values. 117 EXPECT_TRUE(ContainsString(contents_of_file, AsString(rtc::LS_ERROR))); 118 EXPECT_TRUE(ContainsString(contents_of_file, 119 AsString(rtc::LS_WARNING))); 120 EXPECT_TRUE(ContainsString(contents_of_file, AsString(rtc::LS_INFO))); 121 EXPECT_FALSE(ContainsString(contents_of_file, 122 AsString(rtc::LS_VERBOSE))); 123 EXPECT_FALSE(ContainsString(contents_of_file, 124 AsString(rtc::LS_SENSITIVE))); 125 126 // Also check that the log is proper. 127 EXPECT_TRUE(ContainsString(contents_of_file, "logging_unittest.cc")); 128 EXPECT_FALSE(ContainsString(contents_of_file, "logging.h")); 129 EXPECT_FALSE(ContainsString(contents_of_file, "logging.cc")); 130 } 131 132 TEST(LibjingleLogTest, LogEverythingConfiguration) { 133 ASSERT_TRUE(Initialize(rtc::LS_SENSITIVE)); 134 135 // In this configuration everything should be logged. 136 LOG_V(rtc::LS_ERROR) << AsString(rtc::LS_ERROR); 137 LOG_V(rtc::LS_WARNING) << AsString(rtc::LS_WARNING); 138 LOG(LS_INFO) << AsString(rtc::LS_INFO); 139 static const int kFakeError = 1; 140 LOG_E(LS_INFO, EN, kFakeError) << "LOG_E(" << AsString(rtc::LS_INFO) << 141 ")"; 142 LOG_V(rtc::LS_VERBOSE) << AsString(rtc::LS_VERBOSE); 143 LOG_V(rtc::LS_SENSITIVE) << AsString(rtc::LS_SENSITIVE); 144 145 // Read file to string. 146 base::FilePath file_path(log_file_name); 147 std::string contents_of_file; 148 base::ReadFileToString(file_path, &contents_of_file); 149 150 // Make sure string contains the expected values. 151 EXPECT_TRUE(ContainsString(contents_of_file, AsString(rtc::LS_ERROR))); 152 EXPECT_TRUE(ContainsString(contents_of_file, 153 AsString(rtc::LS_WARNING))); 154 EXPECT_TRUE(ContainsString(contents_of_file, AsString(rtc::LS_INFO))); 155 // LOG_E 156 EXPECT_TRUE(ContainsString(contents_of_file, strerror(kFakeError))); 157 EXPECT_TRUE(ContainsString(contents_of_file, 158 AsString(rtc::LS_VERBOSE))); 159 EXPECT_TRUE(ContainsString(contents_of_file, 160 AsString(rtc::LS_SENSITIVE))); 161 } 162