log_manager_test.cxx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. //
  2. // log_manager_test.cxx
  3. // logger_test
  4. //
  5. // Created by Sam Jaffe on 4/2/19.
  6. //
  7. #include "resource_factory/prototype_factory.hpp"
  8. #include "logger/c_logger.h"
  9. #include "logger/log_manager.h"
  10. #include "logger/properties.h"
  11. #include "mock_logger.h"
  12. using namespace logging;
  13. class LogManagerTest : public ::testing::Test {
  14. public:
  15. void SetUp() override;
  16. void TearDown() override;
  17. protected:
  18. std::shared_ptr<MockAppender> appender;
  19. std::shared_ptr<MockLayout> layout;
  20. private:
  21. appenders::scoped_binding abinding_;
  22. layouts::scoped_binding lbinding_;
  23. };
  24. namespace logging {
  25. level level_from_string(std::string const & value);
  26. }
  27. void LogManagerTest::SetUp() {
  28. auto GetMock = [this](properties const & props) {
  29. appender = std::make_shared<MockAppender>();
  30. if (props.contains("threshold")) {
  31. appender->threshold = level_from_string(props["threshold"]);
  32. }
  33. return appender;
  34. };
  35. abinding_ = appenders::instance().bind_scoped("Mock", GetMock);
  36. auto GetMockLayout = [this](properties const &) {
  37. return layout = std::make_shared<MockLayout>();
  38. };
  39. lbinding_ = layouts::instance().bind_scoped("MockLayout", GetMockLayout);
  40. }
  41. void LogManagerTest::TearDown() {
  42. abinding_.reset();
  43. lbinding_.reset();
  44. }
  45. extern properties const APPENDER_LEVEL_PROPERTY_SCHEMA;
  46. extern properties const LOGGER_LEVEL_PROPERTY_SCHEMA;
  47. extern properties const MIN_PROPERTY_SCHEMA;
  48. extern properties const MULTIPLEX_PROPERTY_SCHEMA;
  49. TEST_F(LogManagerTest, CanInjectMock) {
  50. manager().configure(MIN_PROPERTY_SCHEMA);
  51. using ::testing::NotNull;
  52. EXPECT_THAT(appender, ::testing::NotNull());
  53. }
  54. using ::testing::_;
  55. using ::testing::AnyNumber;
  56. TEST_F(LogManagerTest, CanFetchInjectedMock) {
  57. manager mgr;
  58. mgr.configure(MIN_PROPERTY_SCHEMA);
  59. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  60. EXPECT_CALL(*appender, write(MessageEq("TEST MESSAGE"), _));
  61. c_logger l = mgr.c_get();
  62. l.error("TEST MESSAGE");
  63. }
  64. TEST_F(LogManagerTest, MultiplexMockLogsToMultipleImpls) {
  65. manager mgr;
  66. mgr.configure(MULTIPLEX_PROPERTY_SCHEMA);
  67. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  68. EXPECT_CALL(*appender, write(MessageEq("TEST MESSAGE"), _)).Times(2);
  69. c_logger l = mgr.c_get();
  70. l.error("TEST MESSAGE");
  71. }
  72. TEST_F(LogManagerTest, LevelCanBeBakedIntoAppenderProperties) {
  73. manager mgr;
  74. mgr.configure(APPENDER_LEVEL_PROPERTY_SCHEMA);
  75. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  76. EXPECT_CALL(*appender, write(MessageEq("TEST MESSAGE"), _)).Times(1);
  77. EXPECT_CALL(*appender, write(MessageEq("LOWER MESSAGE"), _)).Times(0);
  78. c_logger l = mgr.c_get();
  79. l.warn("TEST MESSAGE");
  80. l.info("LOWER MESSAGE");
  81. }
  82. TEST_F(LogManagerTest, LevelCanBeBakedIntoLoggerProperties) {
  83. manager mgr;
  84. mgr.configure(LOGGER_LEVEL_PROPERTY_SCHEMA);
  85. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  86. EXPECT_CALL(*appender, write(_, _)).Times(0);
  87. c_logger l = mgr.c_get();
  88. l.warn("TEST MESSAGE");
  89. }