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