CurlMultiHandlerTest.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace GuzzleHttp\Tests\Handler;
  3. use GuzzleHttp\Handler\CurlMultiHandler;
  4. use GuzzleHttp\Psr7\Request;
  5. use GuzzleHttp\Psr7\Response;
  6. use GuzzleHttp\Tests\Server;
  7. use PHPUnit\Framework\TestCase;
  8. class CurlMultiHandlerTest extends TestCase
  9. {
  10. public function testSendsRequest()
  11. {
  12. Server::enqueue([new Response()]);
  13. $a = new CurlMultiHandler();
  14. $request = new Request('GET', Server::$url);
  15. $response = $a($request, [])->wait();
  16. $this->assertSame(200, $response->getStatusCode());
  17. }
  18. /**
  19. * @expectedException \GuzzleHttp\Exception\ConnectException
  20. * @expectedExceptionMessage cURL error
  21. */
  22. public function testCreatesExceptions()
  23. {
  24. $a = new CurlMultiHandler();
  25. $a(new Request('GET', 'http://localhost:123'), [])->wait();
  26. }
  27. public function testCanSetSelectTimeout()
  28. {
  29. $a = new CurlMultiHandler(['select_timeout' => 2]);
  30. $this->assertEquals(2, $this->readAttribute($a, 'selectTimeout'));
  31. }
  32. public function testCanCancel()
  33. {
  34. Server::flush();
  35. $response = new Response(200);
  36. Server::enqueue(array_fill_keys(range(0, 10), $response));
  37. $a = new CurlMultiHandler();
  38. $responses = [];
  39. for ($i = 0; $i < 10; $i++) {
  40. $response = $a(new Request('GET', Server::$url), []);
  41. $response->cancel();
  42. $responses[] = $response;
  43. }
  44. foreach($responses as $r) {
  45. $this->assertSame('rejected', $response->getState());
  46. }
  47. }
  48. public function testCannotCancelFinished()
  49. {
  50. Server::flush();
  51. Server::enqueue([new Response(200)]);
  52. $a = new CurlMultiHandler();
  53. $response = $a(new Request('GET', Server::$url), []);
  54. $response->wait();
  55. $response->cancel();
  56. $this->assertSame('fulfilled', $response->getState());
  57. }
  58. public function testDelaysConcurrently()
  59. {
  60. Server::flush();
  61. Server::enqueue([new Response()]);
  62. $a = new CurlMultiHandler();
  63. $expected = microtime(true) + (100 / 1000);
  64. $response = $a(new Request('GET', Server::$url), ['delay' => 100]);
  65. $response->wait();
  66. $this->assertGreaterThanOrEqual($expected, microtime(true));
  67. }
  68. public function testUsesTimeoutEnvironmentVariables()
  69. {
  70. $a = new CurlMultiHandler();
  71. //default if no options are given and no environment variable is set
  72. $this->assertEquals(1, $this->readAttribute($a, 'selectTimeout'));
  73. putenv("GUZZLE_CURL_SELECT_TIMEOUT=3");
  74. $a = new CurlMultiHandler();
  75. $selectTimeout = getenv('GUZZLE_CURL_SELECT_TIMEOUT');
  76. //Handler reads from the environment if no options are given
  77. $this->assertEquals($selectTimeout, $this->readAttribute($a, 'selectTimeout'));
  78. }
  79. /**
  80. * @expectedException \BadMethodCallException
  81. */
  82. public function throwsWhenAccessingInvalidProperty()
  83. {
  84. $h = new CurlMultiHandler();
  85. $h->foo;
  86. }
  87. }