1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2012 The Android Open Source Project
3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License.
6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at
7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software
11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and
14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License.
15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
168a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
178a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain#include "shill/mock_log.h"
188a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
198a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain#include <gmock/gmock.h>
208a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain#include <gtest/gtest.h>
218a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
22b691efd71561246065eae3cdd73a96ca1b8a528dChristopher Wiley#include "shill/logging.h"
238a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
24c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein
258a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morainusing ::std::string;
268a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morainusing ::testing::_;
278a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
288a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morainnamespace shill {
298a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
30c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silbersteinnamespace Logging {
31c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silbersteinstatic auto kModuleLogScope = ScopeLogger::kManager;
321e006c610db980bca337121134d2ba54497b7a59Paul Stewartstatic string ObjectID(testing::Test* m) { return "(mock_log_test)"; }
33c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein}
34c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein
358a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morainclass MockLogTest : public testing::Test {
368a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain protected:
378a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  MockLogTest() {}
388a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
391e006c610db980bca337121134d2ba54497b7a59Paul Stewart  void LogSomething(const string& message) const {
408a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain    LOG(INFO) << message;
418a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  }
421e006c610db980bca337121134d2ba54497b7a59Paul Stewart  void SlogSomething(testing::Test* t, const string& message) const {
438a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain    ScopeLogger::GetInstance()->EnableScopesByName("manager");
44d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley    ScopeLogger::GetInstance()->set_verbose_level(2);
45c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein    SLOG(t, 2) << message;
46d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley    ScopeLogger::GetInstance()->EnableScopesByName("-manager");
47d34a47c06c38f2594c85b14b0f9cee2bf37c0e84Christopher Wiley    ScopeLogger::GetInstance()->set_verbose_level(0);
488a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  }
498a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain};
508a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
518a5726aa96d7a585dccb67d35038b8efeccfd46bGary MorainTEST_F(MockLogTest, MatchMessageOnly) {
528a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  ScopedMockLog log;
538a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  const string kMessage("Something");
548a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  EXPECT_CALL(log, Log(_, _, kMessage));
558a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  LogSomething(kMessage);
568a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain}
578a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
588a5726aa96d7a585dccb67d35038b8efeccfd46bGary MorainTEST_F(MockLogTest, MatchSeverityAndMessage) {
598a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  ScopedMockLog log;
608a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  const string kMessage("Something");
618a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  EXPECT_CALL(log, Log(logging::LOG_INFO, _, kMessage));
628a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  LogSomething(kMessage);
638a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain}
648a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
658a5726aa96d7a585dccb67d35038b8efeccfd46bGary MorainTEST_F(MockLogTest, MatchSeverityAndFileAndMessage) {
668a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  ScopedMockLog log;
678a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  const string kMessage("Something");
68ef342b4400ad2338d3caf8f30ae06ba9f9fa4d77Liam McLoughlin  EXPECT_CALL(log, Log(logging::LOG_INFO,
69ef342b4400ad2338d3caf8f30ae06ba9f9fa4d77Liam McLoughlin              ::testing::EndsWith("mock_log_unittest.cc"), kMessage));
708a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  LogSomething(kMessage);
718a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain}
728a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
738a5726aa96d7a585dccb67d35038b8efeccfd46bGary MorainTEST_F(MockLogTest, MatchEmptyString) {
748a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  ScopedMockLog log;
758a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  const string kMessage("");
768a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  EXPECT_CALL(log, Log(_, _, kMessage));
778a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  LogSomething(kMessage);
788a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain}
798a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
808a5726aa96d7a585dccb67d35038b8efeccfd46bGary MorainTEST_F(MockLogTest, MatchMessageContainsBracketAndNewline) {
818a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  ScopedMockLog log;
828a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  const string kMessage("blah [and more blah] \n yet more blah\n\n\n");
838a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  EXPECT_CALL(log, Log(_, _, kMessage));
848a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  LogSomething(kMessage);
858a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain}
868a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
878a5726aa96d7a585dccb67d35038b8efeccfd46bGary MorainTEST_F(MockLogTest, MatchSlog) {
888a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  ScopedMockLog log;
898a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  const string kMessage("Something");
90c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein  const string kLogMessage("(anon) Something");
91c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein  EXPECT_CALL(log, Log(_, _, kLogMessage));
92c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein  SlogSomething(nullptr, kMessage);
93c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein}
94c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein
95c9c31d8497c3f053c2160408cc386010fc125fadRebecca SilbersteinTEST_F(MockLogTest, MatchSlogWithObject) {
96c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein  ScopedMockLog log;
97c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein  const string kMessage("Something");
98c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein  const string kLogMessage("(mock_log_test) Something");
99c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein  EXPECT_CALL(log, Log(_, _, kLogMessage));
100c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein  SlogSomething(this, kMessage);
1018a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain}
1028a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
1038a5726aa96d7a585dccb67d35038b8efeccfd46bGary MorainTEST_F(MockLogTest, MatchWithGmockMatchers) {
1048a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  ScopedMockLog log;
1058a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  const string kMessage("Something");
1068a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  EXPECT_CALL(log, Log(::testing::Lt(::logging::LOG_ERROR),
1078a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain                       ::testing::EndsWith(".cc"),
1088a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain                       ::testing::StartsWith("Some")));
1098a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain  LogSomething(kMessage);
1108a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain}
1118a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain
1128a5726aa96d7a585dccb67d35038b8efeccfd46bGary Morain}  // namespace shill
113