blob: 4f2cbe63fb283066683d1ddbdaf41c5c72ab7c2a [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
Paul Stewart5581d072012-12-17 17:30:20 -08005#include <base/bind.h>
6#include <base/memory/weak_ptr.h>
7
Christopher Wileyb691efd2012-08-09 13:51:51 -07008#include "shill/logging.h"
Ben Chanbc49ac72012-04-10 19:59:45 -07009#include "shill/scope_logger.h"
10
11#include <gmock/gmock.h>
12#include <gtest/gtest.h>
13
Paul Stewart5581d072012-12-17 17:30:20 -080014using ::testing::_;
15
Ben Chanbc49ac72012-04-10 19:59:45 -070016namespace shill {
17
18class ScopeLoggerTest : public testing::Test {
19 protected:
mukesh agrawale638be32012-05-31 15:13:24 -070020 ScopeLoggerTest() {}
Ben Chanbc49ac72012-04-10 19:59:45 -070021
22 void TearDown() {
mukesh agrawale638be32012-05-31 15:13:24 -070023 logger_.set_verbose_level(0);
24 logger_.DisableAllScopes();
Ben Chanbc49ac72012-04-10 19:59:45 -070025 }
26
mukesh agrawale638be32012-05-31 15:13:24 -070027 ScopeLogger logger_;
Ben Chanbc49ac72012-04-10 19:59:45 -070028};
29
30TEST_F(ScopeLoggerTest, DefaultConstruction) {
Ben Chanbc49ac72012-04-10 19:59:45 -070031 for (int scope = 0; scope < ScopeLogger::kNumScopes; ++scope) {
32 for (int verbose_level = 0; verbose_level < 5; ++verbose_level) {
mukesh agrawale638be32012-05-31 15:13:24 -070033 EXPECT_FALSE(logger_.IsLogEnabled(
Ben Chanbc49ac72012-04-10 19:59:45 -070034 static_cast<ScopeLogger::Scope>(scope), verbose_level));
35 }
36 }
37}
38
39TEST_F(ScopeLoggerTest, GetAllScopeNames) {
Ben Chan1c722602012-04-17 17:37:35 -070040 EXPECT_EQ("cellular+"
41 "connection+"
42 "crypto+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070043 "daemon+"
Ben Chan1c722602012-04-17 17:37:35 -070044 "dbus+"
45 "device+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070046 "dhcp+"
47 "dns+"
Ben Chan1c722602012-04-17 17:37:35 -070048 "ethernet+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070049 "http+"
50 "httpproxy+"
Ben Chan1c722602012-04-17 17:37:35 -070051 "inet+"
Paul Stewart6c72c972012-07-27 11:29:20 -070052 "link+"
Ben Chan1c722602012-04-17 17:37:35 -070053 "manager+"
54 "metrics+"
55 "modem+"
56 "portal+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070057 "power+"
Ben Chan1c722602012-04-17 17:37:35 -070058 "profile+"
Ben Chanfad4a0b2012-04-18 15:49:59 -070059 "property+"
60 "resolver+"
61 "route+"
Ben Chan1c722602012-04-17 17:37:35 -070062 "rtnl+"
63 "service+"
64 "storage+"
65 "task+"
66 "vpn+"
Darin Petkov096b3472012-05-15 10:26:22 +020067 "wifi+"
68 "wimax",
mukesh agrawale638be32012-05-31 15:13:24 -070069 logger_.GetAllScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070070}
71
72TEST_F(ScopeLoggerTest, GetEnabledScopeNames) {
mukesh agrawale638be32012-05-31 15:13:24 -070073 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070074
mukesh agrawale638be32012-05-31 15:13:24 -070075 logger_.SetScopeEnabled(ScopeLogger::kWiFi, true);
76 EXPECT_EQ("wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070077
mukesh agrawale638be32012-05-31 15:13:24 -070078 logger_.SetScopeEnabled(ScopeLogger::kService, true);
79 EXPECT_EQ("service+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070080
mukesh agrawale638be32012-05-31 15:13:24 -070081 logger_.SetScopeEnabled(ScopeLogger::kVPN, true);
82 EXPECT_EQ("service+vpn+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070083
mukesh agrawale638be32012-05-31 15:13:24 -070084 logger_.SetScopeEnabled(ScopeLogger::kWiFi, false);
85 EXPECT_EQ("service+vpn", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070086}
87
88TEST_F(ScopeLoggerTest, EnableScopesByName) {
mukesh agrawale638be32012-05-31 15:13:24 -070089 logger_.EnableScopesByName("");
90 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070091
mukesh agrawale638be32012-05-31 15:13:24 -070092 logger_.EnableScopesByName("+wifi");
93 EXPECT_EQ("wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070094
mukesh agrawale638be32012-05-31 15:13:24 -070095 logger_.EnableScopesByName("+service");
96 EXPECT_EQ("service+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -070097
mukesh agrawale638be32012-05-31 15:13:24 -070098 logger_.EnableScopesByName("+vpn+wifi");
99 EXPECT_EQ("service+vpn+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700100
mukesh agrawale638be32012-05-31 15:13:24 -0700101 logger_.EnableScopesByName("-wifi");
102 EXPECT_EQ("service+vpn", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700103
mukesh agrawale638be32012-05-31 15:13:24 -0700104 logger_.EnableScopesByName("-vpn-service+wifi");
105 EXPECT_EQ("wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700106
mukesh agrawale638be32012-05-31 15:13:24 -0700107 logger_.EnableScopesByName("+-wifi-");
108 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700109
mukesh agrawale638be32012-05-31 15:13:24 -0700110 logger_.EnableScopesByName("-vpn+vpn+wifi-wifi");
111 EXPECT_EQ("vpn", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700112
mukesh agrawale638be32012-05-31 15:13:24 -0700113 logger_.EnableScopesByName("wifi");
114 EXPECT_EQ("wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700115
mukesh agrawale638be32012-05-31 15:13:24 -0700116 logger_.EnableScopesByName("");
117 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700118}
119
120TEST_F(ScopeLoggerTest, EnableScopesByNameWithUnknownScopeName) {
mukesh agrawale638be32012-05-31 15:13:24 -0700121 logger_.EnableScopesByName("foo");
122 EXPECT_EQ("", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700123
mukesh agrawale638be32012-05-31 15:13:24 -0700124 logger_.EnableScopesByName("wifi+foo+vpn");
125 EXPECT_EQ("vpn+wifi", logger_.GetEnabledScopeNames());
Ben Chanbc49ac72012-04-10 19:59:45 -0700126}
127
128TEST_F(ScopeLoggerTest, SetScopeEnabled) {
mukesh agrawale638be32012-05-31 15:13:24 -0700129 EXPECT_FALSE(logger_.IsLogEnabled(ScopeLogger::kService, 0));
Ben Chanbc49ac72012-04-10 19:59:45 -0700130
mukesh agrawale638be32012-05-31 15:13:24 -0700131 logger_.SetScopeEnabled(ScopeLogger::kService, true);
132 EXPECT_TRUE(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, false);
135 EXPECT_FALSE(logger_.IsLogEnabled(ScopeLogger::kService, 0));
Ben Chanbc49ac72012-04-10 19:59:45 -0700136}
137
138TEST_F(ScopeLoggerTest, SetVerboseLevel) {
Christopher Wileyd34a47c2012-08-01 15:42:45 -0700139 ScopeLogger *logger = ScopeLogger::GetInstance();
140 logger->SetScopeEnabled(ScopeLogger::kService, true);
141 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 0));
142 EXPECT_FALSE(logger->IsLogEnabled(ScopeLogger::kService, 1));
143 EXPECT_FALSE(logger->IsLogEnabled(ScopeLogger::kService, 2));
144 EXPECT_TRUE(SLOG_IS_ON(Service, 0));
145 EXPECT_FALSE(SLOG_IS_ON(Service, 1));
146 EXPECT_FALSE(SLOG_IS_ON(Service, 2));
Ben Chanbc49ac72012-04-10 19:59:45 -0700147
Christopher Wileyd34a47c2012-08-01 15:42:45 -0700148 logger->set_verbose_level(1);
149 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 0));
150 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 1));
151 EXPECT_FALSE(logger->IsLogEnabled(ScopeLogger::kService, 2));
152 EXPECT_TRUE(SLOG_IS_ON(Service, 0));
153 EXPECT_TRUE(SLOG_IS_ON(Service, 1));
154 EXPECT_FALSE(SLOG_IS_ON(Service, 2));
Ben Chanbc49ac72012-04-10 19:59:45 -0700155
Christopher Wileyd34a47c2012-08-01 15:42:45 -0700156 logger->set_verbose_level(2);
157 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 0));
158 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 1));
159 EXPECT_TRUE(logger->IsLogEnabled(ScopeLogger::kService, 2));
160 EXPECT_TRUE(SLOG_IS_ON(Service, 0));
161 EXPECT_TRUE(SLOG_IS_ON(Service, 1));
162 EXPECT_TRUE(SLOG_IS_ON(Service, 2));
163
164 logger->set_verbose_level(0);
165 logger->SetScopeEnabled(ScopeLogger::kService, false);
Ben Chanbc49ac72012-04-10 19:59:45 -0700166}
167
Paul Stewart5581d072012-12-17 17:30:20 -0800168class ScopeChangeTarget {
169 public:
170 ScopeChangeTarget() : weak_ptr_factory_(this) {}
171 virtual ~ScopeChangeTarget() {}
172 MOCK_METHOD1(Callback, void(bool enabled));
173 ScopeLogger::ScopeEnableChangedCallback GetCallback() {
174 return base::Bind(
175 &ScopeChangeTarget::Callback, weak_ptr_factory_.GetWeakPtr());
176 }
177
178 private:
179 base::WeakPtrFactory<ScopeChangeTarget> weak_ptr_factory_;
180};
181
182TEST_F(ScopeLoggerTest, LogScopeCallback) {
183 ScopeChangeTarget target0;
184 logger_.RegisterScopeEnableChangedCallback(
185 ScopeLogger::kWiFi, target0.GetCallback());
186 EXPECT_CALL(target0, Callback(_)).Times(0);
187 // Call for a scope other than registered-for.
188 logger_.EnableScopesByName("+vpn");
189 // Change to the same value as default.
190 logger_.EnableScopesByName("-wifi");
191 testing::Mock::VerifyAndClearExpectations(&target0);
192
193 EXPECT_CALL(target0, Callback(true)).Times(1);
194 logger_.EnableScopesByName("+wifi");
195 testing::Mock::VerifyAndClearExpectations(&target0);
196
197 EXPECT_CALL(target0, Callback(false)).Times(1);
198 logger_.EnableScopesByName("");
199 testing::Mock::VerifyAndClearExpectations(&target0);
200
201 // Change to the same value as last set.
202 EXPECT_CALL(target0, Callback(_)).Times(0);
203 logger_.EnableScopesByName("-wifi");
204 testing::Mock::VerifyAndClearExpectations(&target0);
205
206 ScopeChangeTarget target1;
207 logger_.RegisterScopeEnableChangedCallback(
208 ScopeLogger::kWiFi, target1.GetCallback());
209 EXPECT_CALL(target0, Callback(true)).Times(1);
210 EXPECT_CALL(target1, Callback(true)).Times(1);
211 logger_.EnableScopesByName("+wifi");
212}
213
Ben Chanbc49ac72012-04-10 19:59:45 -0700214} // namespace shill