BufferHandlerTest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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\Level;
  12. class BufferHandlerTest extends \Monolog\Test\MonologTestCase
  13. {
  14. private TestHandler $shutdownCheckHandler;
  15. /**
  16. * @covers Monolog\Handler\BufferHandler::__construct
  17. * @covers Monolog\Handler\BufferHandler::handle
  18. * @covers Monolog\Handler\BufferHandler::close
  19. */
  20. public function testHandleBuffers()
  21. {
  22. $test = new TestHandler();
  23. $handler = new BufferHandler($test);
  24. $handler->handle($this->getRecord(Level::Debug));
  25. $handler->handle($this->getRecord(Level::Info));
  26. $this->assertFalse($test->hasDebugRecords());
  27. $this->assertFalse($test->hasInfoRecords());
  28. $handler->close();
  29. $this->assertTrue($test->hasInfoRecords());
  30. $this->assertCount(2, $test->getRecords());
  31. }
  32. /**
  33. * @covers Monolog\Handler\BufferHandler::close
  34. * @covers Monolog\Handler\BufferHandler::flush
  35. */
  36. public function testPropagatesRecordsAtEndOfRequest()
  37. {
  38. $test = new TestHandler();
  39. $handler = new BufferHandler($test);
  40. $handler->handle($this->getRecord(Level::Warning));
  41. $handler->handle($this->getRecord(Level::Debug));
  42. $this->shutdownCheckHandler = $test;
  43. register_shutdown_function([$this, 'checkPropagation']);
  44. }
  45. public function checkPropagation()
  46. {
  47. if (!$this->shutdownCheckHandler->hasWarningRecords() || !$this->shutdownCheckHandler->hasDebugRecords()) {
  48. echo '!!! BufferHandlerTest::testPropagatesRecordsAtEndOfRequest failed to verify that the messages have been propagated' . PHP_EOL;
  49. exit(1);
  50. }
  51. }
  52. /**
  53. * @covers Monolog\Handler\BufferHandler::handle
  54. */
  55. public function testHandleBufferLimit()
  56. {
  57. $test = new TestHandler();
  58. $handler = new BufferHandler($test, 2);
  59. $handler->handle($this->getRecord(Level::Debug));
  60. $handler->handle($this->getRecord(Level::Debug));
  61. $handler->handle($this->getRecord(Level::Info));
  62. $handler->handle($this->getRecord(Level::Warning));
  63. $handler->close();
  64. $this->assertTrue($test->hasWarningRecords());
  65. $this->assertTrue($test->hasInfoRecords());
  66. $this->assertFalse($test->hasDebugRecords());
  67. }
  68. /**
  69. * @covers Monolog\Handler\BufferHandler::handle
  70. */
  71. public function testHandleBufferLimitWithFlushOnOverflow()
  72. {
  73. $test = new TestHandler();
  74. $handler = new BufferHandler($test, 3, Level::Debug, true, true);
  75. // send two records
  76. $handler->handle($this->getRecord(Level::Debug));
  77. $handler->handle($this->getRecord(Level::Debug));
  78. $handler->handle($this->getRecord(Level::Debug));
  79. $this->assertFalse($test->hasDebugRecords());
  80. $this->assertCount(0, $test->getRecords());
  81. // overflow
  82. $handler->handle($this->getRecord(Level::Info));
  83. $this->assertTrue($test->hasDebugRecords());
  84. $this->assertCount(3, $test->getRecords());
  85. // should buffer again
  86. $handler->handle($this->getRecord(Level::Warning));
  87. $this->assertCount(3, $test->getRecords());
  88. $handler->close();
  89. $this->assertCount(5, $test->getRecords());
  90. $this->assertTrue($test->hasWarningRecords());
  91. $this->assertTrue($test->hasInfoRecords());
  92. }
  93. /**
  94. * @covers Monolog\Handler\BufferHandler::handle
  95. */
  96. public function testHandleLevel()
  97. {
  98. $test = new TestHandler();
  99. $handler = new BufferHandler($test, 0, Level::Info);
  100. $handler->handle($this->getRecord(Level::Debug));
  101. $handler->handle($this->getRecord(Level::Info));
  102. $handler->handle($this->getRecord(Level::Warning));
  103. $handler->handle($this->getRecord(Level::Debug));
  104. $handler->close();
  105. $this->assertTrue($test->hasWarningRecords());
  106. $this->assertTrue($test->hasInfoRecords());
  107. $this->assertFalse($test->hasDebugRecords());
  108. }
  109. /**
  110. * @covers Monolog\Handler\BufferHandler::flush
  111. */
  112. public function testFlush()
  113. {
  114. $test = new TestHandler();
  115. $handler = new BufferHandler($test, 0);
  116. $handler->handle($this->getRecord(Level::Debug));
  117. $handler->handle($this->getRecord(Level::Info));
  118. $handler->flush();
  119. $this->assertTrue($test->hasInfoRecords());
  120. $this->assertTrue($test->hasDebugRecords());
  121. $this->assertFalse($test->hasWarningRecords());
  122. }
  123. /**
  124. * @covers Monolog\Handler\BufferHandler::handle
  125. */
  126. public function testHandleUsesProcessors()
  127. {
  128. $test = new TestHandler();
  129. $handler = new BufferHandler($test);
  130. $handler->pushProcessor(function ($record) {
  131. $record->extra['foo'] = true;
  132. return $record;
  133. });
  134. $handler->handle($this->getRecord(Level::Warning));
  135. $handler->flush();
  136. $this->assertTrue($test->hasWarningRecords());
  137. $records = $test->getRecords();
  138. $this->assertTrue($records[0]['extra']['foo']);
  139. }
  140. public function testSetHandler()
  141. {
  142. $testOriginal = new TestHandler();
  143. $handler = new BufferHandler($testOriginal);
  144. $handler->handle($this->getRecord(Level::Info));
  145. $testNew = new TestHandler();
  146. $handler->setHandler($testNew);
  147. $handler->handle($this->getRecord(Level::Debug));
  148. $handler->close();
  149. $this->assertFalse($testOriginal->hasInfoRecords());
  150. $this->assertFalse($testOriginal->hasDebugRecords());
  151. $this->assertTrue($testNew->hasInfoRecords());
  152. $this->assertTrue($testNew->hasDebugRecords());
  153. $this->assertCount(2, $testNew->getRecords());
  154. }
  155. }