| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php declare(strict_types=1);
- /*
- * This file is part of the Monolog package.
- *
- * (c) Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Monolog\Handler;
- use Monolog\Test\TestCase;
- use Monolog\Logger;
- use PhpAmqpLib\Message\AMQPMessage;
- /**
- * @covers Monolog\Handler\RotatingFileHandler
- */
- class AmqpHandlerTest extends TestCase
- {
- public function testHandleAmqpExt()
- {
- if (!class_exists('AMQPConnection') || !class_exists('AMQPExchange')) {
- $this->markTestSkipped("amqp-php not installed");
- }
- if (!class_exists('AMQPChannel')) {
- $this->markTestSkipped("Please update AMQP to version >= 1.0");
- }
- $messages = [];
- $exchange = $this->getMockBuilder('AMQPExchange')
- ->onlyMethods(['publish', 'setName'])
- ->disableOriginalConstructor()
- ->getMock();
- $exchange->expects($this->any())
- ->method('publish')
- ->will($this->returnCallback(function ($message, $routing_key, $flags = 0, $attributes = []) use (&$messages) {
- $messages[] = [$message, $routing_key, $flags, $attributes];
- }))
- ;
- $handler = new AmqpHandler($exchange);
- $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]);
- $expected = [
- [
- 'message' => 'test',
- 'context' => [
- 'data' => [],
- 'foo' => 34,
- ],
- 'level' => 300,
- 'level_name' => 'WARNING',
- 'channel' => 'test',
- 'extra' => [],
- ],
- 'warning.test',
- 0,
- [
- 'delivery_mode' => 2,
- 'content_type' => 'application/json',
- ],
- ];
- $handler->handle($record);
- $this->assertCount(1, $messages);
- $messages[0][0] = json_decode($messages[0][0], true);
- unset($messages[0][0]['datetime']);
- $this->assertEquals($expected, $messages[0]);
- }
- public function testHandlePhpAmqpLib()
- {
- if (!class_exists('PhpAmqpLib\Connection\AMQPConnection')) {
- $this->markTestSkipped("php-amqplib not installed");
- }
- $messages = [];
- $exchange = $this->getMockBuilder('PhpAmqpLib\Channel\AMQPChannel')
- ->onlyMethods(['basic_publish', '__destruct'])
- ->disableOriginalConstructor()
- ->getMock();
- $exchange->expects($this->any())
- ->method('basic_publish')
- ->will($this->returnCallback(function (AMQPMessage $msg, $exchange = "", $routing_key = "", $mandatory = false, $immediate = false, $ticket = null) use (&$messages) {
- $messages[] = [$msg, $exchange, $routing_key, $mandatory, $immediate, $ticket];
- }))
- ;
- $handler = new AmqpHandler($exchange, 'log');
- $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]);
- $expected = [
- [
- 'message' => 'test',
- 'context' => [
- 'data' => [],
- 'foo' => 34,
- ],
- 'level' => 300,
- 'level_name' => 'WARNING',
- 'channel' => 'test',
- 'extra' => [],
- ],
- 'log',
- 'warning.test',
- false,
- false,
- null,
- [
- 'delivery_mode' => 2,
- 'content_type' => 'application/json',
- ],
- ];
- $handler->handle($record);
- $this->assertCount(1, $messages);
- /* @var $msg AMQPMessage */
- $msg = $messages[0][0];
- $messages[0][0] = json_decode($msg->body, true);
- $messages[0][] = $msg->get_properties();
- unset($messages[0][0]['datetime']);
- $this->assertEquals($expected, $messages[0]);
- }
- }
|