scratch

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 86  →  ?path2? @ 87
/vendor/guzzlehttp/guzzle/tests/Adapter/Curl/CurlAdapterTest.php
@@ -0,0 +1,149 @@
<?php
 
namespace GuzzleHttp\Tests\Adapter\Curl;
 
require_once __DIR__ . '/AbstractCurl.php';
 
use GuzzleHttp\Adapter\Curl\CurlAdapter;
use GuzzleHttp\Adapter\Transaction;
use GuzzleHttp\Client;
use GuzzleHttp\Event\BeforeEvent;
use GuzzleHttp\Event\ErrorEvent;
use GuzzleHttp\Event\HeadersEvent;
use GuzzleHttp\Exception\ServerException;
use GuzzleHttp\Message\MessageFactory;
use GuzzleHttp\Message\Request;
use GuzzleHttp\Message\Response;
use GuzzleHttp\Tests\Server;
 
/**
* @covers GuzzleHttp\Adapter\Curl\CurlAdapter
*/
class CurlAdapterTest extends AbstractCurl
{
protected function setUp()
{
if (!function_exists('curl_reset')) {
$this->markTestSkipped('curl_reset() is not available');
}
}
 
protected function getAdapter($factory = null, $options = [])
{
return new CurlAdapter($factory ?: new MessageFactory(), $options);
}
 
public function testCanSetMaxHandles()
{
$a = new CurlAdapter(new MessageFactory(), ['max_handles' => 10]);
$this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
}
 
public function testCanInterceptBeforeSending()
{
$client = new Client();
$request = new Request('GET', 'http://httpbin.org/get');
$response = new Response(200);
$request->getEmitter()->on(
'before',
function (BeforeEvent $e) use ($response) {
$e->intercept($response);
}
);
$transaction = new Transaction($client, $request);
$f = 'does_not_work';
$a = new CurlAdapter(new MessageFactory(), ['handle_factory' => $f]);
$a->send($transaction);
$this->assertSame($response, $transaction->getResponse());
}
 
/**
* @expectedException \GuzzleHttp\Exception\RequestException
* @expectedExceptionMessage cURL error
*/
public function testThrowsCurlErrors()
{
$client = new Client();
$request = $client->createRequest('GET', 'http://localhost:123', [
'connect_timeout' => 0.001,
'timeout' => 0.001,
]);
$transaction = new Transaction($client, $request);
$a = new CurlAdapter(new MessageFactory());
$a->send($transaction);
}
 
public function testHandlesCurlErrors()
{
$client = new Client();
$request = $client->createRequest('GET', 'http://localhost:123', [
'connect_timeout' => 0.001,
'timeout' => 0.001,
]);
$r = new Response(200);
$request->getEmitter()->on('error', function (ErrorEvent $e) use ($r) {
$e->intercept($r);
});
$transaction = new Transaction($client, $request);
$a = new CurlAdapter(new MessageFactory());
$a->send($transaction);
$this->assertSame($r, $transaction->getResponse());
}
 
public function testReleasesAdditionalEasyHandles()
{
Server::flush();
Server::enqueue([
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
]);
$a = new CurlAdapter(new MessageFactory(), ['max_handles' => 2]);
$client = new Client(['base_url' => Server::$url, 'adapter' => $a]);
$request = $client->createRequest('GET', '/', [
'events' => [
'headers' => function (HeadersEvent $e) use ($client) {
$client->get('/', [
'events' => [
'headers' => function (HeadersEvent $e) {
$e->getClient()->get('/');
}
]
]);
}
]
]);
$transaction = new Transaction($client, $request);
$a->send($transaction);
$this->assertCount(2, $this->readAttribute($a, 'handles'));
}
 
public function testDoesNotSaveToWhenFailed()
{
Server::flush();
Server::enqueue([
"HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\n\r\n"
]);
 
$tmp = tempnam('/tmp', 'test_save_to');
unlink($tmp);
$a = new CurlAdapter(new MessageFactory());
$client = new Client(['base_url' => Server::$url, 'adapter' => $a]);
try {
$client->get('/', ['save_to' => $tmp]);
} catch (ServerException $e) {
$this->assertFileNotExists($tmp);
}
}
 
public function testRewindsStreamOnComplete()
{
Server::flush();
Server::enqueue("HTTP/1.1 200 OK\r\nFoo: bar\r\nContent-Length: 4\r\n\r\ntest");
$t = new Transaction(new Client(), new Request('GET', Server::$url));
$a = new CurlAdapter(new MessageFactory());
$response = $a->send($t);
$this->assertEquals('test', $response->getBody()->read(4));
}
}