Home | History | Annotate | Download | only in glue
      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