Skip to content

Commit 8c7947f

Browse files
committed
Add test on ServerLogHandler
1 parent cad1417 commit 8c7947f

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bridge\Monolog\Tests\Handler;
13+
14+
use Monolog\Formatter\JsonFormatter;
15+
use Monolog\Logger;
16+
use Monolog\Processor\ProcessIdProcessor;
17+
use PHPUnit\Framework\TestCase;
18+
use Symfony\Bridge\Monolog\Formatter\VarDumperFormatter;
19+
use Symfony\Bridge\Monolog\Handler\ServerLogHandler;
20+
use Symfony\Component\VarDumper\Cloner\Data;
21+
22+
/**
23+
* Tests the ServerLogHandler.
24+
*/
25+
class ServerLogHandlerTest extends TestCase
26+
{
27+
public function testFormatter()
28+
{
29+
$handler = new ServerLogHandler('tcp://127.0.0.1:9999');
30+
$this->assertInstanceOf(VarDumperFormatter::class, $handler->getFormatter());
31+
32+
$formatter = new JsonFormatter();
33+
$handler->setFormatter($formatter);
34+
$this->assertSame($formatter, $handler->getFormatter());
35+
}
36+
37+
public function testIsHandling()
38+
{
39+
$handler = new ServerLogHandler('tcp://127.0.0.1:9999', Logger::INFO);
40+
$this->assertFalse($handler->isHandling(['level' => Logger::DEBUG]), '->isHandling returns false when no output is set');
41+
}
42+
43+
public function testGetFormatter()
44+
{
45+
$handler = new ServerLogHandler('tcp://127.0.0.1:9999');
46+
$this->assertInstanceOf(VarDumperFormatter::class, $handler->getFormatter(),
47+
'-getFormatter returns VarDumperFormatter by default'
48+
);
49+
}
50+
51+
public function testWritingAndFormatting()
52+
{
53+
$host = 'tcp://127.0.0.1:9999';
54+
$handler = new ServerLogHandler($host, Logger::INFO, false);
55+
$handler->pushProcessor(new ProcessIdProcessor());
56+
57+
$infoRecord = [
58+
'message' => 'My info message',
59+
'context' => [],
60+
'level' => Logger::INFO,
61+
'level_name' => Logger::getLevelName(Logger::INFO),
62+
'channel' => 'app',
63+
'datetime' => new \DateTime('2013-05-29 16:21:54'),
64+
'extra' => [],
65+
];
66+
67+
$socket = stream_socket_server($host, $errno, $errstr);
68+
$this->assertIsResource($socket, sprintf('Server start failed on "%s": %s %s.', $host, $errstr, $errno));
69+
70+
$this->assertTrue($handler->handle($infoRecord), 'The handler finished handling the log as bubble is false.');
71+
72+
$sockets = [(int) $socket => $socket];
73+
$write = [];
74+
75+
for ($i = 0; $i < 10; ++$i) {
76+
$read = $sockets;
77+
stream_select($read, $write, $write, null);
78+
79+
foreach ($read as $stream) {
80+
if ($socket === $stream) {
81+
$stream = stream_socket_accept($socket);
82+
$sockets[(int) $stream] = $stream;
83+
} elseif (feof($stream)) {
84+
unset($sockets[(int) $stream]);
85+
fclose($stream);
86+
} else {
87+
$message = fgets($stream);
88+
fclose($stream);
89+
90+
$record = unserialize(base64_decode($message));
91+
$this->assertIsArray($record);
92+
93+
$this->assertArrayHasKey('message', $record);
94+
$this->assertEquals('My info message', $record['message']);
95+
96+
$this->assertArrayHasKey('extra', $record);
97+
$this->assertInstanceOf(Data::class, $record['extra']);
98+
$extra = $record['extra']->getValue(true);
99+
$this->assertIsArray($extra);
100+
$this->assertArrayHasKey('process_id', $extra);
101+
$this->assertSame(getmypid(), $extra['process_id']);
102+
103+
return;
104+
}
105+
}
106+
usleep(100000);
107+
}
108+
$this->fail('Fail to read message from server');
109+
}
110+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy