3
namespace GuzzleHttp\Tests\Adapter\Curl;
5
require_once __DIR__ . '/AbstractCurl.php';
7
use GuzzleHttp\Adapter\Curl\CurlAdapter;
8
use GuzzleHttp\Adapter\Transaction;
10
use GuzzleHttp\Event\BeforeEvent;
11
use GuzzleHttp\Event\ErrorEvent;
12
use GuzzleHttp\Event\HeadersEvent;
13
use GuzzleHttp\Exception\ServerException;
14
use GuzzleHttp\Message\MessageFactory;
15
use GuzzleHttp\Message\Request;
16
use GuzzleHttp\Message\Response;
17
use GuzzleHttp\Tests\Server;
20
* @covers GuzzleHttp\Adapter\Curl\CurlAdapter
22
class CurlAdapterTest extends AbstractCurl
24
protected function setUp()
26
if (!function_exists('curl_reset')) {
27
$this->markTestSkipped('curl_reset() is not available');
31
protected function getAdapter($factory = null, $options = [])
33
return new CurlAdapter($factory ?: new MessageFactory(), $options);
36
public function testCanSetMaxHandles()
38
$a = new CurlAdapter(new MessageFactory(), ['max_handles' => 10]);
39
$this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
42
public function testCanInterceptBeforeSending()
44
$client = new Client();
45
$request = new Request('GET', 'http://httpbin.org/get');
46
$response = new Response(200);
47
$request->getEmitter()->on(
49
function (BeforeEvent $e) use ($response) {
50
$e->intercept($response);
53
$transaction = new Transaction($client, $request);
55
$a = new CurlAdapter(new MessageFactory(), ['handle_factory' => $f]);
56
$a->send($transaction);
57
$this->assertSame($response, $transaction->getResponse());
61
* @expectedException \GuzzleHttp\Exception\RequestException
62
* @expectedExceptionMessage cURL error
64
public function testThrowsCurlErrors()
66
$client = new Client();
67
$request = $client->createRequest('GET', 'http://localhost:123', [
68
'connect_timeout' => 0.001,
71
$transaction = new Transaction($client, $request);
72
$a = new CurlAdapter(new MessageFactory());
73
$a->send($transaction);
76
public function testHandlesCurlErrors()
78
$client = new Client();
79
$request = $client->createRequest('GET', 'http://localhost:123', [
80
'connect_timeout' => 0.001,
83
$r = new Response(200);
84
$request->getEmitter()->on('error', function (ErrorEvent $e) use ($r) {
87
$transaction = new Transaction($client, $request);
88
$a = new CurlAdapter(new MessageFactory());
89
$a->send($transaction);
90
$this->assertSame($r, $transaction->getResponse());
93
public function testReleasesAdditionalEasyHandles()
97
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
98
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
99
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n",
100
"HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"
102
$a = new CurlAdapter(new MessageFactory(), ['max_handles' => 2]);
103
$client = new Client(['base_url' => Server::$url, 'adapter' => $a]);
104
$request = $client->createRequest('GET', '/', [
106
'headers' => function (HeadersEvent $e) use ($client) {
109
'headers' => function (HeadersEvent $e) {
110
$e->getClient()->get('/');
117
$transaction = new Transaction($client, $request);
118
$a->send($transaction);
119
$this->assertCount(2, $this->readAttribute($a, 'handles'));
122
public function testDoesNotSaveToWhenFailed()
126
"HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\n\r\n"
129
$tmp = tempnam('/tmp', 'test_save_to');
131
$a = new CurlAdapter(new MessageFactory());
132
$client = new Client(['base_url' => Server::$url, 'adapter' => $a]);
134
$client->get('/', ['save_to' => $tmp]);
135
} catch (ServerException $e) {
136
$this->assertFileNotExists($tmp);
140
public function testRewindsStreamOnComplete()
143
Server::enqueue("HTTP/1.1 200 OK\r\nFoo: bar\r\nContent-Length: 4\r\n\r\ntest");
144
$t = new Transaction(new Client(), new Request('GET', Server::$url));
145
$a = new CurlAdapter(new MessageFactory());
146
$response = $a->send($t);
147
$this->assertEquals('test', $response->getBody()->read(4));