log_manager_test.cxx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. void LogManagerTest::SetUp() {
  25. auto GetMock = [this](properties const &) {
  26. return appender = std::make_shared<MockAppender>();
  27. };
  28. abinding_ = appenders::instance().bind_scoped("Mock", GetMock);
  29. auto GetMockLayout = [this](properties const &) {
  30. return layout = std::make_shared<MockLayout>();
  31. };
  32. lbinding_ = layouts::instance().bind_scoped("MockLayout", GetMockLayout);
  33. }
  34. void LogManagerTest::TearDown() {
  35. abinding_.reset();
  36. lbinding_.reset();
  37. }
  38. extern properties const APPENDER_LEVEL_PROPERTY_SCHEMA;
  39. extern properties const LOGGER_LEVEL_PROPERTY_SCHEMA;
  40. extern properties const MIN_PROPERTY_SCHEMA;
  41. extern properties const MULTIPLEX_PROPERTY_SCHEMA;
  42. TEST_F(LogManagerTest, CanInjectMock) {
  43. manager().configure(MIN_PROPERTY_SCHEMA);
  44. using ::testing::NotNull;
  45. EXPECT_THAT(appender, ::testing::NotNull());
  46. }
  47. using ::testing::_;
  48. using ::testing::AnyNumber;
  49. TEST_F(LogManagerTest, CanFetchInjectedMock) {
  50. manager mgr;
  51. mgr.configure(MIN_PROPERTY_SCHEMA);
  52. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  53. EXPECT_CALL(*appender, write(MessageEq("TEST MESSAGE")));
  54. c_logger l = mgr.c_get();
  55. l.error("TEST MESSAGE");
  56. }
  57. TEST_F(LogManagerTest, MultiplexMockLogsToMultipleImpls) {
  58. manager mgr;
  59. mgr.configure(MULTIPLEX_PROPERTY_SCHEMA);
  60. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  61. EXPECT_CALL(*appender, write(MessageEq("TEST MESSAGE"))).Times(2);
  62. c_logger l = mgr.c_get();
  63. l.error("TEST MESSAGE");
  64. }
  65. TEST_F(LogManagerTest, LevelCanBeBakedIntoAppenderProperties) {
  66. manager mgr;
  67. mgr.configure(APPENDER_LEVEL_PROPERTY_SCHEMA);
  68. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  69. EXPECT_CALL(*appender, write(MessageEq("TEST MESSAGE"))).Times(1);
  70. EXPECT_CALL(*appender, write(MessageEq("LOWER MESSAGE"))).Times(0);
  71. c_logger l = mgr.c_get();
  72. l.warn("TEST MESSAGE");
  73. l.info("LOWER MESSAGE");
  74. }
  75. TEST_F(LogManagerTest, LevelCanBeBakedIntoLoggerProperties) {
  76. manager mgr;
  77. mgr.configure(LOGGER_LEVEL_PROPERTY_SCHEMA);
  78. EXPECT_CALL(*appender, flush()).Times(AnyNumber());
  79. EXPECT_CALL(*appender, write(_)).Times(0);
  80. c_logger l = mgr.c_get();
  81. l.warn("TEST MESSAGE");
  82. }