1 //
2 // Copyright (C) 2012 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 #include "shill/mock_log.h"
18
19 #include <gmock/gmock.h>
20 #include <gtest/gtest.h>
21
22 #include "shill/logging.h"
23
24
25 using ::std::string;
26 using ::testing::_;
27
28 namespace shill {
29
30 namespace Logging {
31 static auto kModuleLogScope = ScopeLogger::kManager;
ObjectID(testing::Test * m)32 static string ObjectID(testing::Test* m) { return "(mock_log_test)"; }
33 }
34
35 class MockLogTest : public testing::Test {
36 protected:
MockLogTest()37 MockLogTest() {}
38
LogSomething(const string & message) const39 void LogSomething(const string& message) const {
40 LOG(INFO) << message;
41 }
SlogSomething(testing::Test * t,const string & message) const42 void SlogSomething(testing::Test* t, const string& message) const {
43 ScopeLogger::GetInstance()->EnableScopesByName("manager");
44 ScopeLogger::GetInstance()->set_verbose_level(2);
45 SLOG(t, 2) << message;
46 ScopeLogger::GetInstance()->EnableScopesByName("-manager");
47 ScopeLogger::GetInstance()->set_verbose_level(0);
48 }
49 };
50
TEST_F(MockLogTest,MatchMessageOnly)51 TEST_F(MockLogTest, MatchMessageOnly) {
52 ScopedMockLog log;
53 const string kMessage("Something");
54 EXPECT_CALL(log, Log(_, _, kMessage));
55 LogSomething(kMessage);
56 }
57
TEST_F(MockLogTest,MatchSeverityAndMessage)58 TEST_F(MockLogTest, MatchSeverityAndMessage) {
59 ScopedMockLog log;
60 const string kMessage("Something");
61 EXPECT_CALL(log, Log(logging::LOG_INFO, _, kMessage));
62 LogSomething(kMessage);
63 }
64
TEST_F(MockLogTest,MatchSeverityAndFileAndMessage)65 TEST_F(MockLogTest, MatchSeverityAndFileAndMessage) {
66 ScopedMockLog log;
67 const string kMessage("Something");
68 EXPECT_CALL(log, Log(logging::LOG_INFO,
69 ::testing::EndsWith("mock_log_unittest.cc"), kMessage));
70 LogSomething(kMessage);
71 }
72
TEST_F(MockLogTest,MatchEmptyString)73 TEST_F(MockLogTest, MatchEmptyString) {
74 ScopedMockLog log;
75 const string kMessage("");
76 EXPECT_CALL(log, Log(_, _, kMessage));
77 LogSomething(kMessage);
78 }
79
TEST_F(MockLogTest,MatchMessageContainsBracketAndNewline)80 TEST_F(MockLogTest, MatchMessageContainsBracketAndNewline) {
81 ScopedMockLog log;
82 const string kMessage("blah [and more blah] \n yet more blah\n\n\n");
83 EXPECT_CALL(log, Log(_, _, kMessage));
84 LogSomething(kMessage);
85 }
86
TEST_F(MockLogTest,MatchSlog)87 TEST_F(MockLogTest, MatchSlog) {
88 ScopedMockLog log;
89 const string kMessage("Something");
90 const string kLogMessage("(anon) Something");
91 EXPECT_CALL(log, Log(_, _, kLogMessage));
92 SlogSomething(nullptr, kMessage);
93 }
94
TEST_F(MockLogTest,MatchSlogWithObject)95 TEST_F(MockLogTest, MatchSlogWithObject) {
96 ScopedMockLog log;
97 const string kMessage("Something");
98 const string kLogMessage("(mock_log_test) Something");
99 EXPECT_CALL(log, Log(_, _, kLogMessage));
100 SlogSomething(this, kMessage);
101 }
102
TEST_F(MockLogTest,MatchWithGmockMatchers)103 TEST_F(MockLogTest, MatchWithGmockMatchers) {
104 ScopedMockLog log;
105 const string kMessage("Something");
106 EXPECT_CALL(log, Log(::testing::Lt(::logging::LOG_ERROR),
107 ::testing::EndsWith(".cc"),
108 ::testing::StartsWith("Some")));
109 LogSomething(kMessage);
110 }
111
112 } // namespace shill
113