123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- <?php
- namespace GuzzleHttp\Tests\Handler;
- use GuzzleHttp\Exception\ConnectException;
- use GuzzleHttp\Handler\CurlMultiHandler;
- use GuzzleHttp\Promise as P;
- use GuzzleHttp\Psr7\Request;
- use GuzzleHttp\Psr7\Response;
- use GuzzleHttp\Tests\Helpers;
- use GuzzleHttp\Tests\Server;
- use GuzzleHttp\Utils;
- use PHPUnit\Framework\TestCase;
- class CurlMultiHandlerTest extends TestCase
- {
- public function setUp(): void
- {
- $_SERVER['curl_test'] = true;
- unset($_SERVER['_curl_multi']);
- }
- public function tearDown(): void
- {
- unset($_SERVER['_curl_multi'], $_SERVER['curl_test']);
- }
- public function testCanAddCustomCurlOptions()
- {
- Server::flush();
- Server::enqueue([new Response()]);
- $a = new CurlMultiHandler(['options' => [
- \CURLMOPT_MAXCONNECTS => 5,
- ]]);
- $request = new Request('GET', Server::$url);
- $a($request, []);
- self::assertEquals(5, $_SERVER['_curl_multi'][\CURLMOPT_MAXCONNECTS]);
- }
- public function testSendsRequest()
- {
- Server::enqueue([new Response()]);
- $a = new CurlMultiHandler();
- $request = new Request('GET', Server::$url);
- $response = $a($request, [])->wait();
- self::assertSame(200, $response->getStatusCode());
- }
- public function testCreatesExceptions()
- {
- $a = new CurlMultiHandler();
- $this->expectException(ConnectException::class);
- $this->expectExceptionMessage('cURL error');
- $a(new Request('GET', 'http://localhost:123'), [])->wait();
- }
- public function testCanSetSelectTimeout()
- {
- $a = new CurlMultiHandler(['select_timeout' => 2]);
- self::assertEquals(2, Helpers::readObjectAttribute($a, 'selectTimeout'));
- }
- public function testCanCancel()
- {
- Server::flush();
- $response = new Response(200);
- Server::enqueue(\array_fill_keys(\range(0, 10), $response));
- $a = new CurlMultiHandler();
- $responses = [];
- for ($i = 0; $i < 10; ++$i) {
- $response = $a(new Request('GET', Server::$url), []);
- $response->cancel();
- $responses[] = $response;
- }
- foreach ($responses as $r) {
- self::assertTrue(P\Is::rejected($r));
- }
- }
- public function testCannotCancelFinished()
- {
- Server::flush();
- Server::enqueue([new Response(200)]);
- $a = new CurlMultiHandler();
- $response = $a(new Request('GET', Server::$url), []);
- $response->wait();
- $response->cancel();
- self::assertTrue(P\Is::fulfilled($response));
- }
- public function testDelaysConcurrently()
- {
- Server::flush();
- Server::enqueue([new Response()]);
- $a = new CurlMultiHandler();
- $expected = Utils::currentTime() + (100 / 1000);
- $response = $a(new Request('GET', Server::$url), ['delay' => 100]);
- $response->wait();
- self::assertGreaterThanOrEqual($expected, Utils::currentTime());
- }
- public function testUsesTimeoutEnvironmentVariables()
- {
- unset($_SERVER['GUZZLE_CURL_SELECT_TIMEOUT']);
- \putenv('GUZZLE_CURL_SELECT_TIMEOUT=');
- try {
- $a = new CurlMultiHandler();
- // Default if no options are given and no environment variable is set
- self::assertEquals(1, Helpers::readObjectAttribute($a, 'selectTimeout'));
- \putenv('GUZZLE_CURL_SELECT_TIMEOUT=3');
- $a = new CurlMultiHandler();
- // Handler reads from the environment if no options are given
- self::assertEquals(3, Helpers::readObjectAttribute($a, 'selectTimeout'));
- } finally {
- \putenv('GUZZLE_CURL_SELECT_TIMEOUT=');
- }
- }
- public function throwsWhenAccessingInvalidProperty()
- {
- $h = new CurlMultiHandler();
- $this->expectException(\BadMethodCallException::class);
- $h->foo;
- }
- }
|