blob: cbcb88c6f6a347c9cc484c6621661f9b07fc74c1 [file] [log] [blame]
Ben Chanbc49ac72012-04-10 19:59:45 -07001// Copyright (c) 2012 The Chromium OS 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
Alex Deymocddd2d02014-11-10 19:55:35 -08005#include "shill/scope_logger.h"
6
Paul Stewart5581d072012-12-17 17:30:20 -08007#include <base/bind.h>
8#include <base/memory/weak_ptr.h>
9
Christopher Wileyb691efd2012-08-09 13:51:51 -070010#include "shill/logging.h"
Ben Chanbc49ac72012-04-10 19:59:45 -070011
12#include <gmock/gmock.h>
13#include <gtest/gtest.h>
14
Paul Stewart5581d072012-12-17 17:30:20 -080015using ::testing::_;
16
Ben Chanbc49ac72012-04-10 19:59:45 -070017namespace shill {
18
19class ScopeLoggerTest : public testing::Test {
20 protected:
mukesh agrawale638be32012-05-31 15:13:24 -070021 ScopeLoggerTest() {}
Ben Chanbc49ac72012-04-10 19:59:45 -070022
23 void TearDown() {
mukesh agrawale638be32012-05-31 15:13:24 -070024 logger_.set_verbose_level(0);
25 logger_.DisableAllScopes();
Ben Chanbc49ac72012-04-10 19:59:45 -070026 }
27
mukesh agrawale638be32012-05-31 15:13:24 -070028 ScopeLogger logger_;
Ben Chanbc49ac72012-04-10 19:59:45 -070029};
30
31TEST_F(ScopeLoggerTest, DefaultConstruction) {
Ben Chanbc49ac72012-04-10 19:59:45 -070032 for (int scope = 0; scope < ScopeLogger::kNumScopes; ++scope) {
33 for (int verbose_level = 0; verbose_level < 5; ++verbose_level) {
mukesh agrawale638be32012-05-31 15:13:24 -070034 EXPECT_FALSE(logger_.IsLogEnabled(
Ben Chanbc49ac72012-04-10 19:59:45 -070035 static_cast<ScopeLogger::Scope>(scope), verbose_level));
36 }
37 }
38}
39
40TEST_F(ScopeLoggerTest, GetAllScopeNames) {
Ben Chan1c722602012-04-17 17:37:35 -070041 EXPECT_EQ("cellular+"
42 "connection+"
43 "crypto+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070044 "daemon+"
Ben Chan1c722602012-04-17 17:37:35 -070045 "dbus+"
46 "device+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070047 "dhcp+"
48 "dns+"
Ben Chan1c722602012-04-17 17:37:35 -070049 "ethernet+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070050 "http+"
51 "httpproxy+"
Ben Chan1c722602012-04-17 17:37:35 -070052 "inet+"
Paul Stewart6c72c972012-07-27 11:29:20 -070053 "link+"
Ben Chan1c722602012-04-17 17:37:35 -070054 "manager+"
55 "metrics+"
56 "modem+"
57 "portal+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070058 "power+"
mukesh agrawal9da07772013-05-15 14:15:17 -070059 "ppp+"
Garret Kelly2dc218e2015-01-30 11:16:34 -050060 "pppoe+"
Ben Chan1c722602012-04-17 17:37:35 -070061 "profile+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070062 "property+"
63 "resolver+"
64 "route+"
Ben Chan1c722602012-04-17 17:37:35 -070065 "rtnl+"
66 "service+"
67 "storage+"
68 "task+"
69 "vpn+"
Darin Petkov096b3472012-05-15 10:26:22 +020070 "wifi+"
71 "wimax",
mukesh agrawale638be32012-05-31 15:13:24 -070072 logger_.GetAllScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070073}
74
75TEST_F(ScopeLoggerTest, GetEnabledScopeNames) {
mukesh agrawale638be32012-05-31 15:13:24 -070076 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070077
mukesh agrawale638be32012-05-31 15:13:24 -070078 logger_.SetScopeEnabled(ScopeLogger::kWiFi, true);
79 EXPECT_EQ("wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070080
mukesh agrawale638be32012-05-31 15:13:24 -070081 logger_.SetScopeEnabled(ScopeLogger::kService, true);
82 EXPECT_EQ("service+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070083
mukesh agrawale638be32012-05-31 15:13:24 -070084 logger_.SetScopeEnabled(ScopeLogger::kVPN, true);
85 EXPECT_EQ("service+vpn+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070086
mukesh agrawale638be32012-05-31 15:13:24 -070087 logger_.SetScopeEnabled(ScopeLogger::kWiFi, false);
88 EXPECT_EQ("service+vpn", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070089}
90
91TEST_F(ScopeLoggerTest, EnableScopesByName) {
mukesh agrawale638be32012-05-31 15:13:24 -070092 logger_.EnableScopesByName("");
93 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070094
mukesh agrawale638be32012-05-31 15:13:24 -070095 logger_.EnableScopesByName("+wifi");
96 EXPECT_EQ("wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070097
mukesh agrawale638be32012-05-31 15:13:24 -070098 logger_.EnableScopesByName("+service");
99 EXPECT_EQ("service+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700100
mukesh agrawale638be32012-05-31 15:13:24 -0700101 logger_.EnableScopesByName("+vpn+wifi");
102 EXPECT_EQ("service+vpn+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700103
mukesh agrawale638be32012-05-31 15:13:24 -0700104 logger_.EnableScopesByName("-wifi");
105 EXPECT_EQ("service+vpn", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700106
mukesh agrawale638be32012-05-31 15:13:24 -0700107 logger_.EnableScopesByName("-vpn-service+wifi");
108 EXPECT_EQ("wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700109
mukesh agrawale638be32012-05-31 15:13:24 -0700110 logger_.EnableScopesByName("+-wifi-");
111 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700112
mukesh agrawale638be32012-05-31 15:13:24 -0700113 logger_.EnableScopesByName("-vpn+vpn+wifi-wifi");
114 EXPECT_EQ("vpn", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700115
mukesh agrawale638be32012-05-31 15:13:24 -0700116 logger_.EnableScopesByName("wifi");
117 EXPECT_EQ("wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700118
mukesh agrawale638be32012-05-31 15:13:24 -0700119 logger_.EnableScopesByName("");
120 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700121}
122
123TEST_F(ScopeLoggerTest, EnableScopesByNameWithUnknownScopeName) {
mukesh agrawale638be32012-05-31 15:13:24 -0700124 logger_.EnableScopesByName("foo");
125 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700126
mukesh agrawale638be32012-05-31 15:13:24 -0700127 logger_.EnableScopesByName("wifi+foo+vpn");
128 EXPECT_EQ("vpn+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700129}
130
131TEST_F(ScopeLoggerTest, SetScopeEnabled) {
mukesh agrawale638be32012-05-31 15:13:24 -0700132 EXPECT_FALSE(logger_.IsLogEnabled(ScopeLogger::kService, 0));
Ben Chanbc49ac72012-04-10 19:59:45 -0700133
mukesh agrawale638be32012-05-31 15:13:24 -0700134 logger_.SetScopeEnabled(ScopeLogger::kService, true);
135 EXPECT_TRUE(logger_.IsLogEnabled(ScopeLogger::kService, 0));
Ben Chanbc49ac72012-04-10 19:59:45 -0700136
mukesh agrawale638be32012-05-31 15:13:24 -0700137 logger_.SetScopeEnabled(ScopeLogger::kService, false);
138 EXPECT_FALSE(logger_.IsLogEnabled(ScopeLogger::kService, 0));
Ben Chanbc49ac72012-04-10 19:59:45 -0700139}
140
141TEST_F(ScopeLoggerTest, SetVerboseLevel) {
Paul Stewart3b30ca52015-06-16 13:13:10 -0700142 ScopeLogger* logger = ScopeLogger::GetInstance();
Christopher Wileyd34a47c2012-08-01 15:42:45 -0700143 logger->SetScopeEnabled(ScopeLogger::kService, true);
144 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 0));
145 EXPECT_FALSE(logger->IsLogEnabled(ScopeLogger::kService, 1));
146 EXPECT_FALSE(logger->IsLogEnabled(ScopeLogger::kService, 2));
147 EXPECT_TRUE(SLOG_IS_ON(Service, 0));
148 EXPECT_FALSE(SLOG_IS_ON(Service, 1));
149 EXPECT_FALSE(SLOG_IS_ON(Service, 2));
Ben Chanbc49ac72012-04-10 19:59:45 -0700150
Christopher Wileyd34a47c2012-08-01 15:42:45 -0700151 logger->set_verbose_level(1);
152 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 0));
153 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 1));
154 EXPECT_FALSE(logger->IsLogEnabled(ScopeLogger::kService, 2));
155 EXPECT_TRUE(SLOG_IS_ON(Service, 0));
156 EXPECT_TRUE(SLOG_IS_ON(Service, 1));
157 EXPECT_FALSE(SLOG_IS_ON(Service, 2));
Ben Chanbc49ac72012-04-10 19:59:45 -0700158
Christopher Wileyd34a47c2012-08-01 15:42:45 -0700159 logger->set_verbose_level(2);
160 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 0));
161 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 1));
162 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 2));
163 EXPECT_TRUE(SLOG_IS_ON(Service, 0));
164 EXPECT_TRUE(SLOG_IS_ON(Service, 1));
165 EXPECT_TRUE(SLOG_IS_ON(Service, 2));
166
167 logger->set_verbose_level(0);
168 logger->SetScopeEnabled(ScopeLogger::kService, false);
Ben Chanbc49ac72012-04-10 19:59:45 -0700169}
170
Paul Stewart5581d072012-12-17 17:30:20 -0800171class ScopeChangeTarget {
172 public:
173 ScopeChangeTarget() : weak_ptr_factory_(this) {}
174 virtual ~ScopeChangeTarget() {}
175 MOCK_METHOD1(Callback, void(bool enabled));
176 ScopeLogger::ScopeEnableChangedCallback GetCallback() {
177 return base::Bind(
178 &ScopeChangeTarget::Callback, weak_ptr_factory_.GetWeakPtr());
179 }
180
181 private:
182 base::WeakPtrFactory<ScopeChangeTarget> weak_ptr_factory_;
183};
184
185TEST_F(ScopeLoggerTest, LogScopeCallback) {
186 ScopeChangeTarget target0;
187 logger_.RegisterScopeEnableChangedCallback(
188 ScopeLogger::kWiFi, target0.GetCallback());
189 EXPECT_CALL(target0, Callback(_)).Times(0);
190 // Call for a scope other than registered-for.
191 logger_.EnableScopesByName("+vpn");
192 // Change to the same value as default.
193 logger_.EnableScopesByName("-wifi");
194 testing::Mock::VerifyAndClearExpectations(&target0);
195
196 EXPECT_CALL(target0, Callback(true)).Times(1);
197 logger_.EnableScopesByName("+wifi");
198 testing::Mock::VerifyAndClearExpectations(&target0);
199
200 EXPECT_CALL(target0, Callback(false)).Times(1);
201 logger_.EnableScopesByName("");
202 testing::Mock::VerifyAndClearExpectations(&target0);
203
204 // Change to the same value as last set.
205 EXPECT_CALL(target0, Callback(_)).Times(0);
206 logger_.EnableScopesByName("-wifi");
207 testing::Mock::VerifyAndClearExpectations(&target0);
208
209 ScopeChangeTarget target1;
210 logger_.RegisterScopeEnableChangedCallback(
211 ScopeLogger::kWiFi, target1.GetCallback());
212 EXPECT_CALL(target0, Callback(true)).Times(1);
213 EXPECT_CALL(target1, Callback(true)).Times(1);
214 logger_.EnableScopesByName("+wifi");
215}
216
Ben Chanbc49ac72012-04-10 19:59:45 -0700217} // namespace shill