CurlHandlerTest.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace GuzzleHttp\Test\Handler;
  3. use GuzzleHttp\Exception\ConnectException;
  4. use GuzzleHttp\Handler\CurlHandler;
  5. use GuzzleHttp\Psr7;
  6. use GuzzleHttp\Psr7\Request;
  7. use GuzzleHttp\Psr7\Response;
  8. use GuzzleHttp\Tests\Server;
  9. use PHPUnit\Framework\TestCase;
  10. /**
  11. * @covers \GuzzleHttp\Handler\CurlHandler
  12. */
  13. class CurlHandlerTest extends TestCase
  14. {
  15. protected function getHandler($options = [])
  16. {
  17. return new CurlHandler($options);
  18. }
  19. /**
  20. * @expectedException \GuzzleHttp\Exception\ConnectException
  21. * @expectedExceptionMessage cURL
  22. */
  23. public function testCreatesCurlErrors()
  24. {
  25. $handler = new CurlHandler();
  26. $request = new Request('GET', 'http://localhost:123');
  27. $handler($request, ['timeout' => 0.001, 'connect_timeout' => 0.001])->wait();
  28. }
  29. public function testReusesHandles()
  30. {
  31. Server::flush();
  32. $response = new response(200);
  33. Server::enqueue([$response, $response]);
  34. $a = new CurlHandler();
  35. $request = new Request('GET', Server::$url);
  36. $this->assertInstanceOf('GuzzleHttp\Promise\FulfilledPromise', $a($request, []));
  37. $this->assertInstanceOf('GuzzleHttp\Promise\FulfilledPromise', $a($request, []));
  38. }
  39. public function testDoesSleep()
  40. {
  41. $response = new response(200);
  42. Server::enqueue([$response]);
  43. $a = new CurlHandler();
  44. $request = new Request('GET', Server::$url);
  45. $s = microtime(true);
  46. $a($request, ['delay' => 0.1])->wait();
  47. $this->assertGreaterThan(0.0001, microtime(true) - $s);
  48. }
  49. public function testCreatesCurlErrorsWithContext()
  50. {
  51. $handler = new CurlHandler();
  52. $request = new Request('GET', 'http://localhost:123');
  53. $called = false;
  54. $p = $handler($request, ['timeout' => 0.001, 'connect_timeout' => 0.001])
  55. ->otherwise(function (ConnectException $e) use (&$called) {
  56. $called = true;
  57. $this->assertArrayHasKey('errno', $e->getHandlerContext());
  58. });
  59. $p->wait();
  60. $this->assertTrue($called);
  61. }
  62. public function testUsesContentLengthWhenOverInMemorySize()
  63. {
  64. Server::flush();
  65. Server::enqueue([new Response()]);
  66. $stream = Psr7\stream_for(str_repeat('.', 1000000));
  67. $handler = new CurlHandler();
  68. $request = new Request(
  69. 'PUT',
  70. Server::$url,
  71. ['Content-Length' => 1000000],
  72. $stream
  73. );
  74. $handler($request, [])->wait();
  75. $received = Server::received()[0];
  76. $this->assertEquals(1000000, $received->getHeaderLine('Content-Length'));
  77. $this->assertFalse($received->hasHeader('Transfer-Encoding'));
  78. }
  79. }