Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / jingle / glue / logging_unittest.cc
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 }