OverflowHandlerTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. use Monolog\Test\TestCase;
  13. /**
  14. * @author Kris Buist <krisbuist@gmail.com>
  15. * @covers \Monolog\Handler\OverflowHandler
  16. */
  17. class OverflowHandlerTest extends TestCase
  18. {
  19. public function testNotPassingRecordsBeneathLogLevel()
  20. {
  21. $testHandler = new TestHandler();
  22. $handler = new OverflowHandler($testHandler, [], Level::Info);
  23. $handler->handle($this->getRecord(Level::Debug));
  24. $this->assertFalse($testHandler->hasDebugRecords());
  25. }
  26. public function testPassThroughWithoutThreshold()
  27. {
  28. $testHandler = new TestHandler();
  29. $handler = new OverflowHandler($testHandler, [], Level::Info);
  30. $handler->handle($this->getRecord(Level::Info, 'Info 1'));
  31. $handler->handle($this->getRecord(Level::Info, 'Info 2'));
  32. $handler->handle($this->getRecord(Level::Warning, 'Warning 1'));
  33. $this->assertTrue($testHandler->hasInfoThatContains('Info 1'));
  34. $this->assertTrue($testHandler->hasInfoThatContains('Info 2'));
  35. $this->assertTrue($testHandler->hasWarningThatContains('Warning 1'));
  36. }
  37. /**
  38. * @test
  39. */
  40. public function testHoldingMessagesBeneathThreshold()
  41. {
  42. $testHandler = new TestHandler();
  43. $handler = new OverflowHandler($testHandler, [Level::Info->value => 3]);
  44. $handler->handle($this->getRecord(Level::Debug, 'debug 1'));
  45. $handler->handle($this->getRecord(Level::Debug, 'debug 2'));
  46. foreach (range(1, 3) as $i) {
  47. $handler->handle($this->getRecord(Level::Info, 'info ' . $i));
  48. }
  49. $this->assertTrue($testHandler->hasDebugThatContains('debug 1'));
  50. $this->assertTrue($testHandler->hasDebugThatContains('debug 2'));
  51. $this->assertFalse($testHandler->hasInfoRecords());
  52. $handler->handle($this->getRecord(Level::Info, 'info 4'));
  53. foreach (range(1, 4) as $i) {
  54. $this->assertTrue($testHandler->hasInfoThatContains('info ' . $i));
  55. }
  56. }
  57. /**
  58. * @test
  59. */
  60. public function testCombinedThresholds()
  61. {
  62. $testHandler = new TestHandler();
  63. $handler = new OverflowHandler($testHandler, [Level::Info->value => 5, Level::Warning->value => 10]);
  64. $handler->handle($this->getRecord(Level::Debug));
  65. foreach (range(1, 5) as $i) {
  66. $handler->handle($this->getRecord(Level::Info, 'info ' . $i));
  67. }
  68. foreach (range(1, 10) as $i) {
  69. $handler->handle($this->getRecord(Level::Warning, 'warning ' . $i));
  70. }
  71. // Only 1 DEBUG records
  72. $this->assertCount(1, $testHandler->getRecords());
  73. $handler->handle($this->getRecord(Level::Info, 'info final'));
  74. // 1 DEBUG + 5 buffered INFO + 1 new INFO
  75. $this->assertCount(7, $testHandler->getRecords());
  76. $handler->handle($this->getRecord(Level::Warning, 'warning final'));
  77. // 1 DEBUG + 6 INFO + 10 buffered WARNING + 1 new WARNING
  78. $this->assertCount(18, $testHandler->getRecords());
  79. $handler->handle($this->getRecord(Level::Info, 'Another info'));
  80. $handler->handle($this->getRecord(Level::Warning, 'Anther warning'));
  81. // 1 DEBUG + 6 INFO + 11 WARNING + 1 new INFO + 1 new WARNING
  82. $this->assertCount(20, $testHandler->getRecords());
  83. }
  84. }