FingersCrossedHandlerTest.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  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. use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy;
  14. use Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy;
  15. use Psr\Log\LogLevel;
  16. class FingersCrossedHandlerTest extends TestCase
  17. {
  18. /**
  19. * @covers Monolog\Handler\FingersCrossedHandler::__construct
  20. * @covers Monolog\Handler\FingersCrossedHandler::handle
  21. * @covers Monolog\Handler\FingersCrossedHandler::activate
  22. */
  23. public function testHandleBuffers()
  24. {
  25. $test = new TestHandler();
  26. $handler = new FingersCrossedHandler($test);
  27. $handler->handle($this->getRecord(Level::Debug));
  28. $handler->handle($this->getRecord(Level::Info));
  29. $this->assertFalse($test->hasDebugRecords());
  30. $this->assertFalse($test->hasInfoRecords());
  31. $handler->handle($this->getRecord(Level::Warning));
  32. $handler->close();
  33. $this->assertTrue($test->hasInfoRecords());
  34. $this->assertCount(3, $test->getRecords());
  35. }
  36. /**
  37. * @covers Monolog\Handler\FingersCrossedHandler::handle
  38. * @covers Monolog\Handler\FingersCrossedHandler::activate
  39. */
  40. public function testHandleStopsBufferingAfterTrigger()
  41. {
  42. $test = new TestHandler();
  43. $handler = new FingersCrossedHandler($test);
  44. $handler->handle($this->getRecord(Level::Warning));
  45. $handler->handle($this->getRecord(Level::Debug));
  46. $handler->close();
  47. $this->assertTrue($test->hasWarningRecords());
  48. $this->assertTrue($test->hasDebugRecords());
  49. }
  50. /**
  51. * @covers Monolog\Handler\FingersCrossedHandler::handle
  52. * @covers Monolog\Handler\FingersCrossedHandler::activate
  53. * @covers Monolog\Handler\FingersCrossedHandler::reset
  54. */
  55. public function testHandleResetBufferingAfterReset()
  56. {
  57. $test = new TestHandler();
  58. $test->setSkipReset(true);
  59. $handler = new FingersCrossedHandler($test);
  60. $handler->handle($this->getRecord(Level::Warning));
  61. $handler->handle($this->getRecord(Level::Debug));
  62. $handler->reset();
  63. $handler->handle($this->getRecord(Level::Info));
  64. $handler->close();
  65. $this->assertTrue($test->hasWarningRecords());
  66. $this->assertTrue($test->hasDebugRecords());
  67. $this->assertFalse($test->hasInfoRecords());
  68. }
  69. /**
  70. * @covers Monolog\Handler\FingersCrossedHandler::handle
  71. * @covers Monolog\Handler\FingersCrossedHandler::activate
  72. */
  73. public function testHandleResetBufferingAfterBeingTriggeredWhenStopBufferingIsDisabled()
  74. {
  75. $test = new TestHandler();
  76. $handler = new FingersCrossedHandler($test, Level::Warning, 0, false, false);
  77. $handler->handle($this->getRecord(Level::Debug));
  78. $handler->handle($this->getRecord(Level::Warning));
  79. $handler->handle($this->getRecord(Level::Info));
  80. $handler->close();
  81. $this->assertTrue($test->hasWarningRecords());
  82. $this->assertTrue($test->hasDebugRecords());
  83. $this->assertFalse($test->hasInfoRecords());
  84. }
  85. /**
  86. * @covers Monolog\Handler\FingersCrossedHandler::handle
  87. * @covers Monolog\Handler\FingersCrossedHandler::activate
  88. */
  89. public function testHandleBufferLimit()
  90. {
  91. $test = new TestHandler();
  92. $handler = new FingersCrossedHandler($test, Level::Warning, 2);
  93. $handler->handle($this->getRecord(Level::Debug));
  94. $handler->handle($this->getRecord(Level::Debug));
  95. $handler->handle($this->getRecord(Level::Info));
  96. $handler->handle($this->getRecord(Level::Warning));
  97. $this->assertTrue($test->hasWarningRecords());
  98. $this->assertTrue($test->hasInfoRecords());
  99. $this->assertFalse($test->hasDebugRecords());
  100. }
  101. /**
  102. * @covers Monolog\Handler\FingersCrossedHandler::handle
  103. * @covers Monolog\Handler\FingersCrossedHandler::activate
  104. */
  105. public function testHandleWithCallback()
  106. {
  107. $test = new TestHandler();
  108. $handler = new FingersCrossedHandler(function ($record, $handler) use ($test) {
  109. return $test;
  110. });
  111. $handler->handle($this->getRecord(Level::Debug));
  112. $handler->handle($this->getRecord(Level::Info));
  113. $this->assertFalse($test->hasDebugRecords());
  114. $this->assertFalse($test->hasInfoRecords());
  115. $handler->handle($this->getRecord(Level::Warning));
  116. $this->assertTrue($test->hasInfoRecords());
  117. $this->assertCount(3, $test->getRecords());
  118. }
  119. /**
  120. * @covers Monolog\Handler\FingersCrossedHandler::handle
  121. * @covers Monolog\Handler\FingersCrossedHandler::activate
  122. */
  123. public function testHandleWithBadCallbackThrowsException()
  124. {
  125. $handler = new FingersCrossedHandler(function ($record, $handler) {
  126. return 'foo';
  127. });
  128. $this->expectException(\RuntimeException::class);
  129. $handler->handle($this->getRecord(Level::Warning));
  130. }
  131. /**
  132. * @covers Monolog\Handler\FingersCrossedHandler::isHandling
  133. */
  134. public function testIsHandlingAlways()
  135. {
  136. $test = new TestHandler();
  137. $handler = new FingersCrossedHandler($test, Level::Error);
  138. $this->assertTrue($handler->isHandling($this->getRecord(Level::Debug)));
  139. }
  140. /**
  141. * @covers Monolog\Handler\FingersCrossedHandler::__construct
  142. * @covers Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy::__construct
  143. * @covers Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy::isHandlerActivated
  144. */
  145. public function testErrorLevelActivationStrategy()
  146. {
  147. $test = new TestHandler();
  148. $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy(Level::Warning));
  149. $handler->handle($this->getRecord(Level::Debug));
  150. $this->assertFalse($test->hasDebugRecords());
  151. $handler->handle($this->getRecord(Level::Warning));
  152. $this->assertTrue($test->hasDebugRecords());
  153. $this->assertTrue($test->hasWarningRecords());
  154. }
  155. /**
  156. * @covers Monolog\Handler\FingersCrossedHandler::__construct
  157. * @covers Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy::__construct
  158. * @covers Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy::isHandlerActivated
  159. */
  160. public function testErrorLevelActivationStrategyWithPsrLevel()
  161. {
  162. $test = new TestHandler();
  163. $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy('warning'));
  164. $handler->handle($this->getRecord(Level::Debug));
  165. $this->assertFalse($test->hasDebugRecords());
  166. $handler->handle($this->getRecord(Level::Warning));
  167. $this->assertTrue($test->hasDebugRecords());
  168. $this->assertTrue($test->hasWarningRecords());
  169. }
  170. /**
  171. * @covers Monolog\Handler\FingersCrossedHandler::__construct
  172. * @covers Monolog\Handler\FingersCrossedHandler::activate
  173. */
  174. public function testOverrideActivationStrategy()
  175. {
  176. $test = new TestHandler();
  177. $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy('warning'));
  178. $handler->handle($this->getRecord(Level::Debug));
  179. $this->assertFalse($test->hasDebugRecords());
  180. $handler->activate();
  181. $this->assertTrue($test->hasDebugRecords());
  182. $handler->handle($this->getRecord(Level::Info));
  183. $this->assertTrue($test->hasInfoRecords());
  184. }
  185. /**
  186. * @covers Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy::__construct
  187. * @covers Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy::isHandlerActivated
  188. */
  189. public function testChannelLevelActivationStrategy()
  190. {
  191. $test = new TestHandler();
  192. $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy(Level::Error, ['othertest' => Level::Debug]));
  193. $handler->handle($this->getRecord(Level::Warning));
  194. $this->assertFalse($test->hasWarningRecords());
  195. $record = $this->getRecord(Level::Debug, channel: 'othertest');
  196. $handler->handle($record);
  197. $this->assertTrue($test->hasDebugRecords());
  198. $this->assertTrue($test->hasWarningRecords());
  199. }
  200. /**
  201. * @covers Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy::__construct
  202. * @covers Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy::isHandlerActivated
  203. */
  204. public function testChannelLevelActivationStrategyWithPsrLevels()
  205. {
  206. $test = new TestHandler();
  207. $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy('error', ['othertest' => 'debug']));
  208. $handler->handle($this->getRecord(Level::Warning));
  209. $this->assertFalse($test->hasWarningRecords());
  210. $record = $this->getRecord(Level::Debug, channel: 'othertest');
  211. $handler->handle($record);
  212. $this->assertTrue($test->hasDebugRecords());
  213. $this->assertTrue($test->hasWarningRecords());
  214. }
  215. /**
  216. * @covers Monolog\Handler\FingersCrossedHandler::handle
  217. * @covers Monolog\Handler\FingersCrossedHandler::activate
  218. */
  219. public function testHandleUsesProcessors()
  220. {
  221. $test = new TestHandler();
  222. $handler = new FingersCrossedHandler($test, Level::Info);
  223. $handler->pushProcessor(function ($record) {
  224. $record->extra['foo'] = true;
  225. return $record;
  226. });
  227. $handler->handle($this->getRecord(Level::Warning));
  228. $this->assertTrue($test->hasWarningRecords());
  229. $records = $test->getRecords();
  230. $this->assertTrue($records[0]['extra']['foo']);
  231. }
  232. /**
  233. * @covers Monolog\Handler\FingersCrossedHandler::close
  234. */
  235. public function testPassthruOnClose()
  236. {
  237. $test = new TestHandler();
  238. $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy(Level::Warning), 0, true, true, Level::Info);
  239. $handler->handle($this->getRecord(Level::Debug));
  240. $handler->handle($this->getRecord(Level::Info));
  241. $handler->close();
  242. $this->assertFalse($test->hasDebugRecords());
  243. $this->assertTrue($test->hasInfoRecords());
  244. }
  245. /**
  246. * @covers Monolog\Handler\FingersCrossedHandler::close
  247. */
  248. public function testPsrLevelPassthruOnClose()
  249. {
  250. $test = new TestHandler();
  251. $handler = new FingersCrossedHandler($test, new ErrorLevelActivationStrategy(Level::Warning), 0, true, true, LogLevel::INFO);
  252. $handler->handle($this->getRecord(Level::Debug));
  253. $handler->handle($this->getRecord(Level::Info));
  254. $handler->close();
  255. $this->assertFalse($test->hasDebugRecords());
  256. $this->assertTrue($test->hasInfoRecords());
  257. }
  258. }