PageRenderTime 72ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/mordor/tests/log.cpp

http://github.com/mozy/mordor
C++ | 134 lines | 116 code | 17 blank | 1 comment | 6 complexity | 3ef37d953ab9f7d56fd809342f5dd9c4 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. // Copyright (c) 2009 - Mozy, Inc.
  2. #include "mordor/log.h"
  3. #include "mordor/test/test.h"
  4. using namespace Mordor;
  5. class TestLogSink : public LogSink
  6. {
  7. public:
  8. typedef boost::shared_ptr<TestLogSink> ptr;
  9. void log(const std::string &logger,
  10. boost::posix_time::ptime now, unsigned long long elapsed,
  11. tid_t thread, void *fiber,
  12. Log::Level level, const std::string &str,
  13. const char* file, int line)
  14. {
  15. m_str = str;
  16. }
  17. std::string m_str;
  18. };
  19. static void testLogger(const std::vector<Logger::ptr> &loggers)
  20. {
  21. if(loggers.empty())
  22. return;
  23. std::vector<TestLogSink::ptr> sinks;
  24. sinks.resize(loggers.size());
  25. for(size_t i = 0; i < loggers.size(); ++i) {
  26. sinks[i].reset(new TestLogSink());
  27. loggers[i]->addSink(sinks[i]);
  28. }
  29. for (size_t i = 0; i < loggers.size(); i++) {
  30. MORDOR_LOG_INFO(loggers[i]) << "Hello world";
  31. for (size_t j = 0; j <= i; ++j) {
  32. MORDOR_TEST_ASSERT_EQUAL(sinks[j]->m_str, "Hello world");
  33. sinks[j]->m_str.clear();
  34. }
  35. for (size_t j = i + 1; j < loggers.size(); ++j)
  36. MORDOR_TEST_ASSERT(sinks[j]->m_str.empty());
  37. }
  38. for (size_t i = 0; i < loggers.size(); i++)
  39. loggers[i]->clearSinks();
  40. }
  41. MORDOR_UNITTEST(Log, two_asc)
  42. {
  43. std::vector<Logger::ptr> vec;
  44. vec.push_back(Log::lookup("twoasc"));
  45. vec.push_back(Log::lookup("twoasc:child"));
  46. testLogger(vec);
  47. }
  48. MORDOR_UNITTEST(Log, two_des){
  49. std::vector<Logger::ptr> vec;
  50. Logger::ptr a = Log::lookup("twodes:child");
  51. Logger::ptr b = Log::lookup("twodes");
  52. vec.push_back(b);
  53. vec.push_back(a);
  54. testLogger(vec);
  55. }
  56. MORDOR_UNITTEST(Log, three_asc)
  57. {
  58. std::vector<Logger::ptr> vec;
  59. vec.push_back(Log::lookup("threeasc"));
  60. vec.push_back(Log::lookup("threeasc:child1"));
  61. Log::lookup("threeasc:child1:child2");
  62. vec.push_back(Log::lookup("threeasc:child1:child2"));
  63. testLogger(vec);
  64. }
  65. MORDOR_UNITTEST(Log, three_des1){
  66. std::vector<Logger::ptr> vec;
  67. Logger::ptr a = Log::lookup("threedes1:child1:child2");
  68. Logger::ptr b = Log::lookup("threedes1:child1");
  69. Logger::ptr c = Log::lookup("threedes1");
  70. vec.push_back(c);
  71. vec.push_back(b);
  72. vec.push_back(a);
  73. testLogger(vec);
  74. }
  75. MORDOR_UNITTEST(Log, three_des2){
  76. std::vector<Logger::ptr> vec;
  77. Logger::ptr b = Log::lookup("threedes2:child1");
  78. Logger::ptr a = Log::lookup("threedes2:child1:child2");
  79. Logger::ptr c = Log::lookup("threedes2");
  80. vec.push_back(c);
  81. vec.push_back(b);
  82. vec.push_back(a);
  83. testLogger(vec);
  84. }
  85. MORDOR_UNITTEST(Log, multi_children){
  86. std::vector<Logger::ptr> vec;
  87. Logger::ptr c1 = Log::lookup("mc:mc1:::::c1::");
  88. Logger::ptr c2 = Log::lookup("mc:mc1:c2");
  89. Logger::ptr g = Log::lookup("mc");
  90. Logger::ptr p = Log::lookup("mc:mc1");
  91. Logger::ptr cc = Log::lookup("mc:mc1:c1:cc1");
  92. vec.push_back(g);
  93. vec.push_back(p);
  94. vec.push_back(c1);
  95. vec.push_back(cc);
  96. testLogger(vec);
  97. vec.clear();
  98. vec.push_back(p);
  99. vec.push_back(c2);
  100. testLogger(vec);
  101. }
  102. MORDOR_UNITTEST(Log, levelPropagate)
  103. {
  104. Logger::ptr l = Log::lookup("app:logger");
  105. Logger::ptr l2 = Log::lookup("app");
  106. MORDOR_TEST_ASSERT_NOT_EQUAL(l->level(), Log::DEBUG);
  107. l2->level(Log::DEBUG);
  108. MORDOR_TEST_ASSERT_EQUAL(l->level(), Log::DEBUG);
  109. }
  110. MORDOR_UNITTEST(Log, levelNoPropagate)
  111. {
  112. Logger::ptr l = Log::lookup("app2:logger");
  113. Logger::ptr l2 = Log::lookup("app2");
  114. MORDOR_TEST_ASSERT_NOT_EQUAL(l->level(), Log::DEBUG);
  115. l2->level(Log::DEBUG, false);
  116. MORDOR_TEST_ASSERT_NOT_EQUAL(l->level(), Log::DEBUG);
  117. }