diff options
author | Benety Goh <benety@mongodb.com> | 2014-08-07 17:13:30 -0400 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2014-08-12 18:56:41 -0400 |
commit | 850d2d0912e519e544f0c896583a6fbd5cceabce (patch) | |
tree | 30e780d2fc9253fd2db178641fa8b32e42a1446e /src/mongo/logger/log_test.cpp | |
parent | a3845092f26955e6cbfca868fd136b7d5eefed9b (diff) | |
download | mongo-850d2d0912e519e544f0c896583a6fbd5cceabce.tar.gz |
SERVER-14729 support overriding of default log component in unconditional log functions severe(), error(), warning() and log()
Diffstat (limited to 'src/mongo/logger/log_test.cpp')
-rw-r--r-- | src/mongo/logger/log_test.cpp | 108 |
1 files changed, 66 insertions, 42 deletions
diff --git a/src/mongo/logger/log_test.cpp b/src/mongo/logger/log_test.cpp index 0837b51b753..777e8d19b39 100644 --- a/src/mongo/logger/log_test.cpp +++ b/src/mongo/logger/log_test.cpp @@ -27,6 +27,8 @@ #include "mongo/platform/basic.h" +#include "mongo/logger/log_test.h" + #include <sstream> #include <string> #include <vector> @@ -50,48 +52,6 @@ using namespace mongo::logger; namespace mongo { namespace { - // TODO(schwerin): Have logger write to a different log from the global log, so that tests can - // redirect their global log output for examination. - template <typename MessageEventEncoder> - class LogTest : public unittest::Test { - friend class LogTestAppender; - public: - LogTest() : _severityOld(globalLogDomain()->getMinimumLogSeverity()) { - globalLogDomain()->clearAppenders(); - _appenderHandle = globalLogDomain()->attachAppender( - MessageLogDomain::AppenderAutoPtr(new LogTestAppender(this))); - } - - virtual ~LogTest() { - globalLogDomain()->detachAppender(_appenderHandle); - globalLogDomain()->setMinimumLoggedSeverity(_severityOld); - } - - protected: - std::vector<std::string> _logLines; - LogSeverity _severityOld; - - private: - class LogTestAppender : public MessageLogDomain::EventAppender { - public: - explicit LogTestAppender(LogTest* ltest) : _ltest(ltest) {} - virtual ~LogTestAppender() {} - virtual Status append(const MessageLogDomain::Event& event) { - std::ostringstream _os; - if (!_encoder.encode(event, _os)) - return Status(ErrorCodes::LogWriteFailed, "Failed to append to LogTestAppender."); - _ltest->_logLines.push_back(_os.str()); - return Status::OK(); - } - - private: - LogTest *_ltest; - MessageEventEncoder _encoder; - }; - - MessageLogDomain::AppenderHandle _appenderHandle; - }; - typedef LogTest<MessageEventDetailsEncoder> LogTestDetailsEncoder; typedef LogTest<MessageEventUnadornedEncoder> LogTestUnadornedEncoder; @@ -590,5 +550,69 @@ namespace { ASSERT_EQUALS(_logLines[0].find(componentC.getNameForLog().toString()), std::string::npos); } + // Tests pass through of log component: + // unconditional log functions -> LogStreamBuilder -> MessageEventEphemeral + // -> MessageEventDetailsEncoder + TEST_F(LogTestDetailsEncoder, LogFunctions) { + // severe() - no component specified. + severe() << "This is logged"; + ASSERT_EQUALS(1U, _logLines.size()); + ASSERT_NOT_EQUALS(_logLines[0].find( + str::stream() << " F " << componentDefault.getNameForLog()), + std::string::npos); + + // severe() - with component. + _logLines.clear(); + severe(componentA) << "This is logged"; + ASSERT_EQUALS(1U, _logLines.size()); + ASSERT_NOT_EQUALS(_logLines[0].find(str::stream() << " F " << componentA.getNameForLog()), + std::string::npos); + + // error() - no component specified. + _logLines.clear(); + error() << "This is logged"; + ASSERT_EQUALS(1U, _logLines.size()); + ASSERT_NOT_EQUALS(_logLines[0].find( + str::stream() << " E " << componentDefault.getNameForLog()), + std::string::npos); + + // error() - with component. + _logLines.clear(); + error(componentA) << "This is logged"; + ASSERT_EQUALS(1U, _logLines.size()); + ASSERT_NOT_EQUALS(_logLines[0].find(str::stream() << " E " << componentA.getNameForLog()), + std::string::npos); + + // warning() - no component specified. + _logLines.clear(); + warning() << "This is logged"; + ASSERT_EQUALS(1U, _logLines.size()); + ASSERT_NOT_EQUALS(_logLines[0].find( + str::stream() << " W " << componentDefault.getNameForLog()), + std::string::npos); + + // warning() - with component. + _logLines.clear(); + warning(componentA) << "This is logged"; + ASSERT_EQUALS(1U, _logLines.size()); + ASSERT_NOT_EQUALS(_logLines[0].find(str::stream() << " W " << componentA.getNameForLog()), + std::string::npos); + + // log() - no component specified. + _logLines.clear(); + log() << "This is logged"; + ASSERT_EQUALS(1U, _logLines.size()); + ASSERT_NOT_EQUALS(_logLines[0].find( + str::stream() << " I " << componentDefault.getNameForLog()), + std::string::npos); + + // log() - with component. + _logLines.clear(); + log(componentA) << "This is logged"; + ASSERT_EQUALS(1U, _logLines.size()); + ASSERT_NOT_EQUALS(_logLines[0].find(str::stream() << " I " << componentA.getNameForLog()), + std::string::npos); + } + } // namespace } // namespace mongo |