/**
  * @covers Guzzle\Http\Curl\CurlMulti::remove
  * @covers Guzzle\Http\Curl\CurlMulti::all
  */
 public function testRequestsCanBeRemoved()
 {
     $request1 = new Request('GET', 'http://www.google.com/');
     $this->multi->add($request1);
     $request2 = new Request('PUT', 'http://www.google.com/');
     $this->multi->add($request2);
     $this->assertEquals(array($request1, $request2), $this->multi->all());
     $this->assertSame($this->multi, $this->multi->remove($request1));
     $this->assertEquals(array($request2), $this->multi->all());
 }
 /**
  * @covers Guzzle\Http\Curl\CurlMulti::send
  */
 public function testDoesNotSendRequestsDecliningToBeSent()
 {
     if (!defined('CURLOPT_TIMEOUT_MS')) {
         $this->markTestSkipped('Update curl');
     }
     // Create a client that is bound to fail connecting
     $client = new Client('http://localhost:123', array('curl.CURLOPT_PORT' => 123, 'curl.CURLOPT_CONNECTTIMEOUT_MS' => 1));
     $request = $client->get();
     $multi = new CurlMulti();
     $multi->add($request);
     // Listen for request exceptions, and when they occur, first change the
     // state of the request back to transferring, and then just allow it to
     // exception out
     $request->getEventDispatcher()->addListener('request.exception', function (Event $event) use($multi) {
         $retries = $event['request']->getParams()->get('retries');
         // Allow the first failure to retry
         if ($retries == 0) {
             $event['request']->setState('transfer');
             $event['request']->getParams()->set('retries', 1);
             // Remove the request to try again
             $multi->remove($event['request']);
             $multi->add($event['request'], true);
         }
     });
     try {
         $multi->send();
         $this->fail('Did not throw an exception at all!?!');
     } catch (\Exception $e) {
         $this->assertEquals(1, $request->getParams()->get('retries'));
     }
 }