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