BufferHandlerTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php declare(strict_types=1);
  2. /*
  3. * This file is part of the Monolog package.
  4. *
  5. * (c) Jordi Boggiano <j.boggiano@seld.be>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Monolog\Handler;
  11. use Monolog\Test\TestCase;
  12. use Monolog\Level;
  13. class BufferHandlerTest extends TestCase
  14. {
  15. private TestHandler $shutdownCheckHandler;
  16. /**
  17. * @covers Monolog\Handler\BufferHandler::__construct
  18. * @covers Monolog\Handler\BufferHandler::handle
  19. * @covers Monolog\Handler\BufferHandler::close
  20. */
  21. public function testHandleBuffers()
  22. {
  23. $test = new TestHandler();
  24. $handler = new BufferHandler($test);
  25. $handler->handle($this->getRecord(Level::Debug));
  26. $handler->handle($this->getRecord(Level::Info));
  27. $this->assertFalse($test->hasDebugRecords());
  28. $this->assertFalse($test->hasInfoRecords());
  29. $handler->close();
  30. $this->assertTrue($test->hasInfoRecords());
  31. $this->assertCount(2, $test->getRecords());
  32. }
  33. /**
  34. * @covers Monolog\Handler\BufferHandler::close
  35. * @covers Monolog\Handler\BufferHandler::flush
  36. */
  37. public function testPropagatesRecordsAtEndOfRequest()
  38. {
  39. $test = new TestHandler();
  40. $handler = new BufferHandler($test);
  41. $handler->handle($this->getRecord(Level::Warning));
  42. $handler->handle($this->getRecord(Level::Debug));
  43. $this->shutdownCheckHandler = $test;
  44. register_shutdown_function([$this, 'checkPropagation']);
  45. }
  46. public function checkPropagation()
  47. {
  48. if (!$this->shutdownCheckHandler->hasWarningRecords() || !$this->shutdownCheckHandler->hasDebugRecords()) {
  49. echo '!!! BufferHandlerTest::testPropagatesRecordsAtEndOfRequest failed to verify that the messages have been propagated' . PHP_EOL;
  50. exit(1);
  51. }
  52. }
  53. /**
  54. * @covers Monolog\Handler\BufferHandler::handle
  55. */
  56. public function testHandleBufferLimit()
  57. {
  58. $test = new TestHandler();
  59. $handler = new BufferHandler($test, 2);
  60. $handler->handle($this->getRecord(Level::Debug));
  61. $handler->handle($this->getRecord(Level::Debug));
  62. $handler->handle($this->getRecord(Level::Info));
  63. $handler->handle($this->getRecord(Level::Warning));
  64. $handler->close();
  65. $this->assertTrue($test->hasWarningRecords());
  66. $this->assertTrue($test->hasInfoRecords());
  67. $this->assertFalse($test->hasDebugRecords());
  68. }
  69. /**
  70. * @covers Monolog\Handler\BufferHandler::handle
  71. */
  72. public function testHandleBufferLimitWithFlushOnOverflow()
  73. {
  74. $test = new TestHandler();
  75. $handler = new BufferHandler($test, 3, Level::Debug, true, true);
  76. // send two records
  77. $handler->handle($this->getRecord(Level::Debug));
  78. $handler->handle($this->getRecord(Level::Debug));
  79. $handler->handle($this->getRecord(Level::Debug));
  80. $this->assertFalse($test->hasDebugRecords());
  81. $this->assertCount(0, $test->getRecords());
  82. // overflow
  83. $handler->handle($this->getRecord(Level::Info));
  84. $this->assertTrue($test->hasDebugRecords());
  85. $this->assertCount(3, $test->getRecords());
  86. // should buffer again
  87. $handler->handle($this->getRecord(Level::Warning));
  88. $this->assertCount(3, $test->getRecords());
  89. $handler->close();
  90. $this->assertCount(5, $test->getRecords());
  91. $this->assertTrue($test->hasWarningRecords());
  92. $this->assertTrue($test->hasInfoRecords());
  93. }
  94. /**
  95. * @covers Monolog\Handler\BufferHandler::handle
  96. */
  97. public function testHandleLevel()
  98. {
  99. $test = new TestHandler();
  100. $handler = new BufferHandler($test, 0, Level::Info);
  101. $handler->handle($this->getRecord(Level::Debug));
  102. $handler->handle($this->getRecord(Level::Info));
  103. $handler->handle($this->getRecord(Level::Warning));
  104. $handler->handle($this->getRecord(Level::Debug));
  105. $handler->close();
  106. $this->assertTrue($test->hasWarningRecords());
  107. $this->assertTrue($test->hasInfoRecords());
  108. $this->assertFalse($test->hasDebugRecords());
  109. }
  110. /**
  111. * @covers Monolog\Handler\BufferHandler::flush
  112. */
  113. public function testFlush()
  114. {
  115. $test = new TestHandler();
  116. $handler = new BufferHandler($test, 0);
  117. $handler->handle($this->getRecord(Level::Debug));
  118. $handler->handle($this->getRecord(Level::Info));
  119. $handler->flush();
  120. $this->assertTrue($test->hasInfoRecords());
  121. $this->assertTrue($test->hasDebugRecords());
  122. $this->assertFalse($test->hasWarningRecords());
  123. }
  124. /**
  125. * @covers Monolog\Handler\BufferHandler::handle
  126. */
  127. public function testHandleUsesProcessors()
  128. {
  129. $test = new TestHandler();
  130. $handler = new BufferHandler($test);
  131. $handler->pushProcessor(function ($record) {
  132. $record->extra['foo'] = true;
  133. return $record;
  134. });
  135. $handler->handle($this->getRecord(Level::Warning));
  136. $handler->flush();
  137. $this->assertTrue($test->hasWarningRecords());
  138. $records = $test->getRecords();
  139. $this->assertTrue($records[0]['extra']['foo']);
  140. }
  141. }