15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: this test tests LOG_V and LOG_E since all other logs are expressed
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in forms of them. LOG is also tested for good measure.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Also note that we are only allowed to call InitLogging() twice so the test
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cases are more dense than normal.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The following include must be first in this file. It ensures that
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// libjingle style logging is used.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LOGGING_INSIDE_LIBJINGLE
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/libjingle/overrides/talk/base/logging.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const wchar_t* const log_file_name = L"libjingle_logging.log";
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char* const log_file_name = "libjingle_logging.log";
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const int kDefaultVerbosity = 0;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char* AsString(talk_base::LoggingSeverity severity) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (severity) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case talk_base::LS_ERROR:
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return "LS_ERROR";
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case talk_base::LS_WARNING:
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return "LS_WARNING";
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case talk_base::LS_INFO:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return "LS_INFO";
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case talk_base::LS_VERBOSE:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return "LS_VERBOSE";
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case talk_base::LS_SENSITIVE:
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return "LS_SENSITIVE";
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return "";
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static bool ContainsString(const std::string& original,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const char* string_to_match) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return original.find(string_to_match) != std::string::npos;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static bool Initialize(int verbosity_level) {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (verbosity_level != kDefaultVerbosity) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Update the command line with specified verbosity level for this file.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CommandLine* command_line = CommandLine::ForCurrentProcess();
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::ostringstream value_stream;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value_stream << "logging_unittest=" << verbosity_level;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& value = value_stream.str();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    command_line->AppendSwitchASCII("vmodule", value);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The command line flags are parsed here and the log file name is set.
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  logging::LoggingSettings settings;
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  settings.logging_dest = logging::LOG_TO_FILE;
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  settings.log_file = log_file_name;
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  settings.lock_log = logging::DONT_LOCK_LOG_FILE;
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  settings.delete_old = logging::DELETE_OLD_LOG_FILE;
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!logging::InitLogging(settings)) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(VLOG_IS_ON(verbosity_level));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(VLOG_IS_ON(verbosity_level + 1));
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(LibjingleLogTest, DefaultConfiguration) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(Initialize(kDefaultVerbosity));
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In the default configuration nothing should be logged.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_ERROR) << AsString(talk_base::LS_ERROR);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_WARNING) << AsString(talk_base::LS_WARNING);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_INFO) << AsString(talk_base::LS_INFO);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_VERBOSE) << AsString(talk_base::LS_VERBOSE);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_SENSITIVE) << AsString(talk_base::LS_SENSITIVE);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Read file to string.
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath file_path(log_file_name);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string contents_of_file;
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::ReadFileToString(file_path, &contents_of_file);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure string contains the expected values.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file, AsString(talk_base::LS_ERROR)));
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              AsString(talk_base::LS_WARNING)));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file, AsString(talk_base::LS_INFO)));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              AsString(talk_base::LS_VERBOSE)));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              AsString(talk_base::LS_SENSITIVE)));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(LibjingleLogTest, InfoConfiguration) {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(Initialize(talk_base::LS_INFO));
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In this configuration everything lower or equal to LS_INFO should be
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // logged.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_ERROR) << AsString(talk_base::LS_ERROR);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_WARNING) << AsString(talk_base::LS_WARNING);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_INFO) << AsString(talk_base::LS_INFO);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_VERBOSE) << AsString(talk_base::LS_VERBOSE);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_SENSITIVE) << AsString(talk_base::LS_SENSITIVE);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Read file to string.
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath file_path(log_file_name);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string contents_of_file;
11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::ReadFileToString(file_path, &contents_of_file);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure string contains the expected values.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file, AsString(talk_base::LS_ERROR)));
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             AsString(talk_base::LS_WARNING)));
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file, AsString(talk_base::LS_INFO)));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              AsString(talk_base::LS_VERBOSE)));
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              AsString(talk_base::LS_SENSITIVE)));
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Also check that the log is proper.
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file, "logging_unittest.cc"));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file, "logging.h"));
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ContainsString(contents_of_file, "logging.cc"));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(LibjingleLogTest, LogEverythingConfiguration) {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(Initialize(talk_base::LS_SENSITIVE));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In this configuration everything should be logged.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_ERROR) << AsString(talk_base::LS_ERROR);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_WARNING) << AsString(talk_base::LS_WARNING);
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG(LS_INFO) << AsString(talk_base::LS_INFO);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const int kFakeError = 1;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_E(LS_INFO, EN, kFakeError) << "LOG_E(" << AsString(talk_base::LS_INFO) <<
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ")";
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_VERBOSE) << AsString(talk_base::LS_VERBOSE);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LOG_V(talk_base::LS_SENSITIVE) << AsString(talk_base::LS_SENSITIVE);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Read file to string.
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath file_path(log_file_name);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string contents_of_file;
14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::ReadFileToString(file_path, &contents_of_file);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure string contains the expected values.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file, AsString(talk_base::LS_ERROR)));
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file,
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             AsString(talk_base::LS_WARNING)));
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file, AsString(talk_base::LS_INFO)));
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // LOG_E
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file, strerror(kFakeError)));
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             AsString(talk_base::LS_VERBOSE)));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ContainsString(contents_of_file,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             AsString(talk_base::LS_SENSITIVE)));
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
162