mirror of
https://github.com/guzzle/guzzle.git
synced 2025-02-24 18:13:00 +01:00
Adding tests for Curl and CurlMulti, removing error event
- Adding a shared set of tests for curl and multi adapters - Removing guard for failing to create a curl handle. This should not be allowed to fail.
This commit is contained in:
parent
769de2d766
commit
27c4a47f3c
@ -164,15 +164,11 @@ class MultiAdapter implements AdapterInterface, ParallelAdapterInterface
|
||||
RequestEvents::emitBefore($transaction);
|
||||
// Only transfer if the request was not intercepted
|
||||
if (!$transaction->getResponse()) {
|
||||
try {
|
||||
$handle = $this->curlFactory->createHandle(
|
||||
$transaction,
|
||||
$this->messageFactory
|
||||
);
|
||||
$context->addTransaction($transaction, $handle);
|
||||
} catch (RequestException $e) {
|
||||
RequestEvents::emitError($transaction, $e);
|
||||
}
|
||||
$handle = $this->curlFactory->createHandle(
|
||||
$transaction,
|
||||
$this->messageFactory
|
||||
);
|
||||
$context->addTransaction($transaction, $handle);
|
||||
}
|
||||
} catch (RequestException $e) {
|
||||
$this->throwException($e, $context);
|
||||
|
108
tests/Adapter/Curl/AbstractCurl.php
Normal file
108
tests/Adapter/Curl/AbstractCurl.php
Normal file
@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
namespace GuzzleHttp\Tests\Adapter\Curl;
|
||||
|
||||
require_once __DIR__ . '/../../Server.php';
|
||||
|
||||
use GuzzleHttp\Adapter\Transaction;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Event\CompleteEvent;
|
||||
use GuzzleHttp\Event\ErrorEvent;
|
||||
use GuzzleHttp\Exception\RequestException;
|
||||
use GuzzleHttp\Message\Request;
|
||||
use GuzzleHttp\Message\Response;
|
||||
use GuzzleHttp\Tests\Server;
|
||||
use GuzzleHttp\Url;
|
||||
|
||||
abstract class AbstractCurl extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/** @var \GuzzleHttp\Tests\Server */
|
||||
static $server;
|
||||
|
||||
public static function setUpBeforeClass()
|
||||
{
|
||||
self::$server = new Server();
|
||||
self::$server->start();
|
||||
}
|
||||
|
||||
public static function tearDownAfterClass()
|
||||
{
|
||||
self::$server->stop();
|
||||
}
|
||||
|
||||
abstract protected function getAdapter($factory = null, $options = []);
|
||||
|
||||
public function testSendsRequest()
|
||||
{
|
||||
self::$server->flush();
|
||||
self::$server->enqueue("HTTP/1.1 200 OK\r\nFoo: bar\r\nContent-Length: 0\r\n\r\n");
|
||||
$t = new Transaction(new Client(), new Request('GET', self::$server->getUrl()));
|
||||
$a = $this->getAdapter();
|
||||
$response = $a->send($t);
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
$this->assertEquals('bar', $response->getHeader('Foo'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \GuzzleHttp\Exception\RequestException
|
||||
*/
|
||||
public function testCatchesErrorWhenPreparing()
|
||||
{
|
||||
$r = new Request('GET', self::$server->getUrl());
|
||||
$f = $this->getMockBuilder('GuzzleHttp\Adapter\Curl\CurlFactory')
|
||||
->setMethods(['createHandle'])
|
||||
->getMock();
|
||||
$f->expects($this->once())
|
||||
->method('createHandle')
|
||||
->will($this->throwException(new RequestException('foo', $r)));
|
||||
|
||||
$t = new Transaction(new Client(), $r);
|
||||
$a = $this->getAdapter(null, ['handle_factory' => $f]);
|
||||
$a->send($t);
|
||||
}
|
||||
|
||||
public function testDispatchesAfterSendEvent()
|
||||
{
|
||||
self::$server->flush();
|
||||
self::$server->enqueue("HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
|
||||
$r = new Request('GET', self::$server->getUrl());
|
||||
$t = new Transaction(new Client(), $r);
|
||||
$a = $this->getAdapter();
|
||||
$ev = null;
|
||||
$r->getEmitter()->on('complete', function (CompleteEvent $e) use (&$ev) {
|
||||
$ev = $e;
|
||||
$e->intercept(new Response(200, ['Foo' => 'bar']));
|
||||
});
|
||||
$response = $a->send($t);
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
$this->assertEquals('bar', $response->getHeader('Foo'));
|
||||
}
|
||||
|
||||
public function testDispatchesErrorEventAndRecovers()
|
||||
{
|
||||
self::$server->flush();
|
||||
self::$server->enqueue("HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
|
||||
$r = new Request('GET', self::$server->getUrl());
|
||||
$t = new Transaction(new Client(), $r);
|
||||
$a = $this->getAdapter();
|
||||
$r->getEmitter()->once('complete', function (CompleteEvent $e) {
|
||||
throw new RequestException('Foo', $e->getRequest());
|
||||
});
|
||||
$r->getEmitter()->on('error', function (ErrorEvent $e) {
|
||||
$e->intercept(new Response(200, ['Foo' => 'bar']));
|
||||
});
|
||||
$response = $a->send($t);
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
$this->assertEquals('bar', $response->getHeader('Foo'));
|
||||
}
|
||||
|
||||
public function testStripsFragmentFromHost()
|
||||
{
|
||||
self::$server->flush();
|
||||
self::$server->enqueue("HTTP/1.1 200 OK\r\n\r\nContent-Length: 0\r\n\r\n");
|
||||
// This will fail if the removal of the #fragment is not performed
|
||||
$url = Url::fromString(self::$server->getUrl())->setPath(null)->setFragment('foo');
|
||||
$client = new Client();
|
||||
$client->get($url);
|
||||
}
|
||||
}
|
25
tests/Adapter/Curl/CurlAdapterTest.php
Normal file
25
tests/Adapter/Curl/CurlAdapterTest.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace GuzzleHttp\Tests\Adapter\Curl;
|
||||
|
||||
require_once __DIR__ . '/AbstractCurl.php';
|
||||
|
||||
use GuzzleHttp\Adapter\Curl\CurlAdapter;
|
||||
use GuzzleHttp\Message\MessageFactory;
|
||||
|
||||
/**
|
||||
* @covers GuzzleHttp\Adapter\Curl\CurlAdapter
|
||||
*/
|
||||
class CurlAdapterTest extends AbstractCurl
|
||||
{
|
||||
protected function getAdapter($factory = null, $options = [])
|
||||
{
|
||||
return new CurlAdapter($factory ?: new MessageFactory(), $options);
|
||||
}
|
||||
|
||||
public function canSetMaxHandles()
|
||||
{
|
||||
$a = new CurlAdapter(new MessageFactory(), ['max_handles' => 10]);
|
||||
$this->assertEquals(10, $this->readAttribute($a, 'maxHandles'));
|
||||
}
|
||||
}
|
@ -2,37 +2,23 @@
|
||||
|
||||
namespace GuzzleHttp\Tests\Adapter\Curl;
|
||||
|
||||
require_once __DIR__ . '/../../Server.php';
|
||||
require_once __DIR__ . '/AbstractCurl.php';
|
||||
|
||||
use GuzzleHttp\Adapter\Curl\MultiAdapter;
|
||||
use GuzzleHttp\Adapter\Transaction;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Event\CompleteEvent;
|
||||
use GuzzleHttp\Event\ErrorEvent;
|
||||
use GuzzleHttp\Exception\RequestException;
|
||||
use GuzzleHttp\Message\MessageFactory;
|
||||
use GuzzleHttp\Message\Request;
|
||||
use GuzzleHttp\Message\Response;
|
||||
use GuzzleHttp\Tests\Server;
|
||||
use GuzzleHttp\Url;
|
||||
|
||||
/**
|
||||
* @covers GuzzleHttp\Adapter\Curl\MultiAdapter
|
||||
*/
|
||||
class MultiAdapterTest extends \PHPUnit_Framework_TestCase
|
||||
class MultiAdapterTest extends AbstractCurl
|
||||
{
|
||||
/** @var \GuzzleHttp\Tests\Server */
|
||||
static $server;
|
||||
|
||||
public static function setUpBeforeClass()
|
||||
protected function getAdapter($factory = null, $options = [])
|
||||
{
|
||||
self::$server = new Server();
|
||||
self::$server->start();
|
||||
}
|
||||
|
||||
public static function tearDownAfterClass()
|
||||
{
|
||||
self::$server->stop();
|
||||
return new MultiAdapter($factory ?: new MessageFactory(), $options);
|
||||
}
|
||||
|
||||
public function testSendsSingleRequest()
|
||||
@ -67,67 +53,6 @@ class MultiAdapterTest extends \PHPUnit_Framework_TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function testCatchesErrorWhenPreparing()
|
||||
{
|
||||
$r = new Request('GET', self::$server->getUrl());
|
||||
|
||||
$f = $this->getMockBuilder('GuzzleHttp\Adapter\Curl\CurlFactory')
|
||||
->setMethods(['createHandle'])
|
||||
->getMock();
|
||||
$f->expects($this->once())
|
||||
->method('createHandle')
|
||||
->will($this->throwException(new RequestException('foo', $r)));
|
||||
|
||||
$t = new Transaction(new Client(), $r);
|
||||
$a = new MultiAdapter(new MessageFactory(), ['handle_factory' => $f]);
|
||||
$ev = null;
|
||||
$r->getEmitter()->on('error', function (ErrorEvent $e) use (&$ev) {
|
||||
$ev = $e;
|
||||
});
|
||||
try {
|
||||
$a->send($t);
|
||||
$this->fail('Did not throw');
|
||||
} catch (RequestException $e) {}
|
||||
$this->assertInstanceOf('GuzzleHttp\Event\ErrorEvent', $ev);
|
||||
$this->assertSame($r, $ev->getRequest());
|
||||
$this->assertInstanceOf('GuzzleHttp\Exception\RequestException', $ev->getException());
|
||||
}
|
||||
|
||||
public function testDispatchesAfterSendEvent()
|
||||
{
|
||||
self::$server->flush();
|
||||
self::$server->enqueue("HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
|
||||
$r = new Request('GET', self::$server->getUrl());
|
||||
$t = new Transaction(new Client(), $r);
|
||||
$a = new MultiAdapter(new MessageFactory());
|
||||
$ev = null;
|
||||
$r->getEmitter()->on('complete', function (CompleteEvent $e) use (&$ev) {
|
||||
$ev = $e;
|
||||
$e->intercept(new Response(200, ['Foo' => 'bar']));
|
||||
});
|
||||
$response = $a->send($t);
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
$this->assertEquals('bar', $response->getHeader('Foo'));
|
||||
}
|
||||
|
||||
public function testDispatchesErrorEventAndRecovers()
|
||||
{
|
||||
self::$server->flush();
|
||||
self::$server->enqueue("HTTP/1.1 201 OK\r\nContent-Length: 0\r\n\r\n");
|
||||
$r = new Request('GET', self::$server->getUrl());
|
||||
$t = new Transaction(new Client(), $r);
|
||||
$a = new MultiAdapter(new MessageFactory());
|
||||
$r->getEmitter()->once('complete', function (CompleteEvent $e) {
|
||||
throw new RequestException('Foo', $e->getRequest());
|
||||
});
|
||||
$r->getEmitter()->on('error', function (ErrorEvent $e) {
|
||||
$e->intercept(new Response(200, ['Foo' => 'bar']));
|
||||
});
|
||||
$response = $a->send($t);
|
||||
$this->assertEquals(200, $response->getStatusCode());
|
||||
$this->assertEquals('bar', $response->getHeader('Foo'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \GuzzleHttp\Exception\AdapterException
|
||||
* @expectedExceptionMessage cURL error -2:
|
||||
@ -166,14 +91,4 @@ class MultiAdapterTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertContains($request->getUrl(), $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function testStripsFragmentFromHost()
|
||||
{
|
||||
self::$server->flush();
|
||||
self::$server->enqueue("HTTP/1.1 200 OK\r\n\r\nContent-Length: 0\r\n\r\n");
|
||||
// This will fail if the removal of the #fragment is not performed
|
||||
$url = Url::fromString(self::$server->getUrl())->setPath(null)->setFragment('foo');
|
||||
$client = new Client();
|
||||
$client->get($url);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user