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());
     }
 }
Beispiel #5
0
 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));
 }