private function runConnectionTest($queue, $stream, $msg, $statusCode = null) { $obj = new \stdClass(); $er = null; $client = new Client(); $request = $client->createRequest('PUT', Server::$url, ['body' => $stream]); $request->getEmitter()->on('error', function (ErrorEvent $e) use(&$er) { $er = $e; }); $transaction = $this->getMockBuilder('GuzzleHttp\\Adapter\\Transaction')->setMethods(['getResponse', 'setResponse'])->setConstructorArgs([$client, $request])->getMock(); $transaction->expects($this->any())->method('setResponse')->will($this->returnCallback(function ($r) use(&$obj) { $obj->res = $r; })); $transaction->expects($this->any())->method('getResponse')->will($this->returnCallback(function () use($obj, &$called) { $caller = debug_backtrace()[6]['function']; if ($caller == 'addHandle') { return null; } elseif ($caller == 'validateResponseWasSet') { return ++$called == 2 ? $obj->res : null; } else { return $obj->res; } })); $a = new MultiAdapter(new MessageFactory()); Server::flush(); Server::enqueue($queue); $a->sendAll(new \ArrayIterator([$transaction]), 10); if ($msg) { $this->assertNotNull($er); $this->assertContains($msg, $er->getException()->getMessage()); } else { $this->assertEquals($statusCode, $transaction->getResponse()->getStatusCode()); } }
public function testThrowsImmediatelyWhenInstructed() { Server::flush(); Server::enqueue(["HTTP/1.1 501\r\nContent-Length: 0\r\n\r\n"]); $c = new Client(['base_url' => Server::$url]); $request = $c->createRequest('GET', '/'); $request->getEmitter()->on('error', function (ErrorEvent $e) { $e->throwImmediately(true); }); $transactions = [new Transaction($c, $request)]; $a = new MultiAdapter(new MessageFactory()); try { $a->sendAll(new \ArrayIterator($transactions), 1); $this->fail('Did not throw'); } catch (RequestException $e) { $this->assertSame($request, $e->getRequest()); } }
public function testCreatesAndReleasesHandlesWhenNeeded() { $a = new MultiAdapter(new MessageFactory()); $c = new Client(['adapter' => $a, 'base_url' => Server::$url]); Server::flush(); Server::enqueue(["HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n", "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n", "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n", "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n", "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n", "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n", "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"]); $ef = function (ErrorEvent $e) { throw $e->getException(); }; $request1 = $c->createRequest('GET', '/'); $request1->getEmitter()->on('headers', function () use($a, $c, $ef) { $a->send(new Transaction($c, $c->createRequest('GET', '/', ['events' => ['headers' => function () use($a, $c, $ef) { $r = $c->createRequest('GET', '/', ['events' => ['error' => ['fn' => $ef, 'priority' => 9999]]]); $r->getEmitter()->once('headers', function () use($a, $c, $r) { $a->send(new Transaction($c, $r)); }); $a->send(new Transaction($c, $r)); // Now, reuse an existing handle $a->send(new Transaction($c, $r)); }, 'error' => ['fn' => $ef, 'priority' => 9999]]]))); }); $request1->getEmitter()->on('error', $ef); $transactions = [new Transaction($c, $request1), new Transaction($c, $c->createRequest('PUT')), new Transaction($c, $c->createRequest('HEAD'))]; $a->sendAll(new \ArrayIterator($transactions), 2); foreach ($transactions as $index => $t) { $response = $t->getResponse(); $this->assertInstanceOf('GuzzleHttp\\Message\\ResponseInterface', $response, 'Transaction at index ' . $index . ' did not populate response'); $this->assertEquals(200, $response->getStatusCode()); } }