public function testConvertsMultiExceptionIntoCommandTransfer() { $r1 = new Request('GET', 'http://foo.com'); $r2 = new Request('GET', 'http://foobaz.com'); $e = new MultiTransferException('Test', 123); $e->addSuccessfulRequest($r1)->addFailedRequest($r2); $ce = CommandTransferException::fromMultiTransferException($e); $this->assertInstanceOf('Guzzle\\Service\\Exception\\CommandTransferException', $ce); $this->assertEquals('Test', $ce->getMessage()); $this->assertEquals(123, $ce->getCode()); $this->assertSame(array($r1), $ce->getSuccessfulRequests()); $this->assertSame(array($r2), $ce->getFailedRequests()); }
public function testHasRequests() { $r1 = new Request('GET', 'http://www.foo.com'); $r2 = new Request('GET', 'http://www.foo.com'); $e = new MultiTransferException(); $e->addSuccessfulRequest($r1); $e->addFailedRequest($r2); $this->assertEquals(array($r1), $e->getSuccessfulRequests()); $this->assertEquals(array($r2), $e->getSuccessfulRequests()); $this->assertEquals(array($r1, $r2), $e->getAllRequests()); $this->assertTrue($e->containsRequest($r1)); $this->assertTrue($e->containsRequest($r2)); $this->assertFalse($e->containsRequest(new Request('POST', '/foo'))); }
/** * Build and throw a MultiTransferException * * @param array $exceptions Exceptions encountered * @param array $successful Successful requests * @throws MultiTransferException */ protected function throwMultiException(array $exceptions, array $successful) { $multiException = new MultiTransferException('Errors during multi transfer'); while ($e = array_shift($exceptions)) { $multiException->addFailedRequestWithException($e['request'], $e['exception']); } // Add successful requests foreach ($successful as $request) { if (!$multiException->containsRequest($request)) { $multiException->addSuccessfulRequest($request); } } throw $multiException; }
/** * Build a MultiTransferException if needed * * @param array $requestsInScope All requests in the previous scope * * @return MultiTransferException|null */ protected function buildMultiTransferException(array $requestsInScope) { if (empty($this->exceptions)) { return null; } // Keep a list of all requests, and remove errored requests from the list $store = new \SplObjectStorage(); foreach ($requestsInScope as $request) { $store->attach($request); } $multiException = new MultiTransferException('Errors during multi transfer'); while ($e = array_shift($this->exceptions)) { $multiException->add($e['exception']); if (isset($e['request'])) { $multiException->addFailedRequest($e['request']); // Remove from the total list so that it becomes a list of successful requests unset($store[$e['request']]); } } // Add successful requests foreach ($store as $request) { $multiException->addSuccessfulRequest($request); } return $multiException; }