summaryrefslogtreecommitdiff
path: root/src/mongo/logger/log_test.cpp
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2014-08-07 17:13:30 -0400
committerBenety Goh <benety@mongodb.com>2014-08-12 18:56:41 -0400
commit850d2d0912e519e544f0c896583a6fbd5cceabce (patch)
tree30e780d2fc9253fd2db178641fa8b32e42a1446e /src/mongo/logger/log_test.cpp
parenta3845092f26955e6cbfca868fd136b7d5eefed9b (diff)
downloadmongo-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.cpp108
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