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()); } }
/** * Remove a transaction and associated handle from the context * * @param TransactionInterface $transaction Transaction to remove * * @return array Returns the curl_getinfo array * @throws AdapterException if the transaction is not found */ public function removeTransaction(TransactionInterface $transaction) { if (!isset($this->handles[$transaction])) { throw new AdapterException('Transaction not registered'); } $handle = $this->handles[$transaction]; $this->handles->detach($transaction); $info = curl_getinfo($handle); $code = curl_multi_remove_handle($this->multi, $handle); curl_close($handle); if ($code !== CURLM_OK) { MultiAdapter::throwMultiError($code); } return $info; }
public function testThrowsAndReleasesWhenErrorDuringCompleteEvent() { Server::flush(); Server::enqueue("HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\n\r\n"); $request = new Request('GET', Server::$url); $request->getEmitter()->on('complete', function (CompleteEvent $e) { throw new RequestException('foo', $e->getRequest()); }); $t = new Transaction(new Client(), $request); $a = new MultiAdapter(new MessageFactory()); try { $a->send($t); $this->fail('Did not throw'); } catch (RequestException $e) { $this->assertSame($request, $e->getRequest()); } }
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 testRewindsStreamOnComplete() { Server::flush(); Server::enqueue("HTTP/1.1 200 OK\r\nFoo: bar\r\nContent-Length: 4\r\n\r\ntest"); $t = new Transaction(new Client(), new Request('GET', Server::$url)); $a = new MultiAdapter(new MessageFactory()); $response = $a->send($t); $this->assertEquals('test', $response->getBody()->read(4)); }