Файл: vkolhoze.com/vendor/guzzle/guzzle/tests/Guzzle/Tests/Log/MessageFormatterTest.php
Строк: 128
<?php
namespace GuzzleTestsLog;
use GuzzleHttpClient;
use GuzzleHttpCurlCurlHandle;
use GuzzleHttpMessageEntityEnclosingRequest;
use GuzzleHttpEntityBody;
use GuzzleHttpMessageResponse;
use GuzzleLogMessageFormatter;
use GuzzlePluginLogLogPlugin;
use GuzzleLogClosureLogAdapter;
/**
* @covers GuzzleLogMessageFormatter
*/
class MessageFormatterTest extends GuzzleTestsGuzzleTestCase
{
protected $request;
protected $response;
protected $handle;
public function setUp()
{
$this->request = new EntityEnclosingRequest('POST', 'http://foo.com?q=test', array(
'X-Foo' => 'bar',
'Authorization' => 'Baz'
));
$this->request->setBody(EntityBody::factory('Hello'));
$this->response = new Response(200, array(
'X-Test' => 'Abc'
), 'Foo');
$this->handle = $this->getMockBuilder('GuzzleHttpCurlCurlHandle')
->disableOriginalConstructor()
->setMethods(array('getError', 'getErrorNo', 'getStderr', 'getInfo'))
->getMock();
$this->handle->expects($this->any())
->method('getError')
->will($this->returnValue('e'));
$this->handle->expects($this->any())
->method('getErrorNo')
->will($this->returnValue('123'));
$this->handle->expects($this->any())
->method('getStderr')
->will($this->returnValue('testing'));
$this->handle->expects($this->any())
->method('getInfo')
->will($this->returnValueMap(array(
array(CURLINFO_CONNECT_TIME, '123'),
array(CURLINFO_TOTAL_TIME, '456')
)));
}
public function logProvider()
{
return array(
// Uses the cache for the second time
array('{method} - {method}', 'POST - POST'),
array('{url}', 'http://foo.com?q=test'),
array('{port}', '80'),
array('{resource}', '/?q=test'),
array('{host}', 'foo.com'),
array('{hostname}', gethostname()),
array('{protocol}/{version}', 'HTTP/1.1'),
array('{code} {phrase}', '200 OK'),
array('{req_header_Foo}', ''),
array('{req_header_X-Foo}', 'bar'),
array('{req_header_Authorization}', 'Baz'),
array('{res_header_foo}', ''),
array('{res_header_X-Test}', 'Abc'),
array('{req_body}', 'Hello'),
array('{res_body}', 'Foo'),
array('{curl_stderr}', 'testing'),
array('{curl_error}', 'e'),
array('{curl_code}', '123'),
array('{connect_time}', '123'),
array('{total_time}', '456')
);
}
/**
* @dataProvider logProvider
*/
public function testFormatsMessages($template, $output)
{
$formatter = new MessageFormatter($template);
$this->assertEquals($output, $formatter->format($this->request, $this->response, $this->handle));
}
public function testFormatsRequestsAndResponses()
{
$formatter = new MessageFormatter();
$formatter->setTemplate('{request}{response}');
$this->assertEquals($this->request . $this->response, $formatter->format($this->request, $this->response));
}
public function testAddsTimestamp()
{
$formatter = new MessageFormatter('{ts}');
$this->assertNotEmpty($formatter->format($this->request, $this->response));
}
public function testUsesResponseWhenNoHandleAndGettingCurlInformation()
{
$formatter = new MessageFormatter('{connect_time}/{total_time}');
$response = $this->getMockBuilder('GuzzleHttpMessageResponse')
->setConstructorArgs(array(200))
->setMethods(array('getInfo'))
->getMock();
$response->expects($this->exactly(2))
->method('getInfo')
->will($this->returnValueMap(array(
array('connect_time', '1'),
array('total_time', '2'),
)));
$this->assertEquals('1/2', $formatter->format($this->request, $response));
}
public function testUsesEmptyStringWhenNoHandleAndNoResponse()
{
$formatter = new MessageFormatter('{connect_time}/{total_time}');
$this->assertEquals('/', $formatter->format($this->request));
}
public function testInjectsTotalTime()
{
$out = '';
$formatter = new MessageFormatter('{connect_time}/{total_time}');
$adapter = new ClosureLogAdapter(function ($m) use (&$out) { $out .= $m; });
$log = new LogPlugin($adapter, $formatter);
$this->getServer()->enqueue("HTTP/1.1 200 OKrnContent-Length: 2rnrnHI");
$client = new Client($this->getServer()->getUrl());
$client->addSubscriber($log);
$client->get('/')->send();
$this->assertNotEquals('/', $out);
}
}