From b108200b0b7028ae53cba2bb34e5188a13d97993 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Mon, 19 Sep 2016 19:02:50 +0200 Subject: [PATCH] Fix lower tests --- composer.json | 5 +- tests/Monolog/Handler/FlowdockHandlerTest.php | 60 +++++++++++++------ 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/composer.json b/composer.json index 00db70d4..d298fb65 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ ], "require": { "php": "^7.0", - "psr/log": "^1.0" + "psr/log": "^1.0.1" }, "require-dev": { "phpunit/phpunit": "^5.5", @@ -28,7 +28,8 @@ "php-console/php-console": "^3.1.3", "jakub-onderka/php-parallel-lint": "^0.9", "symfony/process": "^3.1", - "predis/predis": "^1.1" + "predis/predis": "^1.1", + "phpspec/prophecy": "^1.6.1" }, "suggest": { "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", diff --git a/tests/Monolog/Handler/FlowdockHandlerTest.php b/tests/Monolog/Handler/FlowdockHandlerTest.php index 2092d385..f7f02e1a 100644 --- a/tests/Monolog/Handler/FlowdockHandlerTest.php +++ b/tests/Monolog/Handler/FlowdockHandlerTest.php @@ -40,10 +40,9 @@ class FlowdockHandlerTest extends TestCase public function testWriteHeader() { - $this->createHandler(); + $this->initHandlerAndSocket(); $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); - fseek($this->res, 0); - $content = fread($this->res, 1024); + $content = $this->closeSocket(); $this->assertRegexp('/POST \/v1\/messages\/team_inbox\/.* HTTP\/1.1\\r\\nHost: api.flowdock.com\\r\\nContent-Type: application\/json\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); @@ -59,29 +58,52 @@ class FlowdockHandlerTest extends TestCase $this->assertRegexp('/"from_address":"source@test\.com"/', $content); } - private function createHandler($token = 'myToken') + + private function initHandlerAndSocket($token = 'myToken') { - $this->res = fopen('php://memory', 'a'); - $this->handler = $this->prophesize('Monolog\Handler\FlowdockHandler'); + $tmpFile = sys_get_temp_dir().'/monolog-test-socket.php'; + file_put_contents($tmpFile, <<<'SCRIPT' +handler = new class($token, Logger::DEBUG) extends FlowdockHandler { - public function fsockopen() { - return $this->mockedResource; - } - public function streamSetTimeout() { - return true; - } - public function closeSocket() { - return true; - } - }; +$sock = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp')); +socket_bind($sock, '127.0.0.1', 51984); +socket_listen($sock); - $this->handler->mockedResource = $this->res; +while (true) { + $res = socket_accept($sock); + socket_set_option($res, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 0, "usec" => 500)); + while ($read = socket_read($res, 1024)) { + echo $read; + } + socket_close($res); +} +SCRIPT +); + + $this->socket = new \Symfony\Component\Process\Process(escapeshellarg(PHP_BINARY).' '.escapeshellarg($tmpFile)); + $this->socket->start(); + + $this->handler = new FlowdockHandler($token); $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); $reflectionProperty->setAccessible(true); - $reflectionProperty->setValue($this->handler, 'localhost:1234'); + $reflectionProperty->setValue($this->handler, '127.0.0.1:51984'); $this->handler->setFormatter(new FlowdockFormatter('test_source', 'source@test.com')); } + + private function closeSocket() + { + $this->socket->stop(); + + return $this->socket->getOutput(); + } + + public function tearDown() + { + if (isset($this->socket)) { + $this->closeSocket(); + unset($this->socket); + } + } }