public function testExceptionError() { $message = uniqid(); $uri = uniqid(); $code = 429; $e = Exception::error($uri, $message, $code); $this->assertEquals($code, $e->getCode()); $this->assertNotEquals($message, $e->getMessage()); }
public function getToFile($uri, $filename, $retries = 20) { $this->refreshToken(); $startTime = time(); $options = self::DEFAULT_CLIENT_SETTINGS; $options['timeout'] = 0; $options['sink'] = $filename; $options['headers'] = array_replace($options['headers'], ['accept' => 'text/csv', 'accept-charset' => 'utf-8']); try { $response = $this->guzzle->get($uri, $options); $this->log($uri, 'GET', ['filename' => $filename], new Response($response->getStatusCode()), time() - $startTime); if ($response->getStatusCode() == 200) { return $filename; } elseif ($response->getStatusCode() == 202) { if ($retries <= 0) { throw new Exception("Downloading of report {$uri} timed out"); } sleep(self::BACKOFF_INTERVAL * (21 - $retries)); return $this->getToFile($uri, $filename, $retries - 1); } } catch (\Exception $e) { $response = $e instanceof RequestException && $e->hasResponse() ? $e->getResponse() : null; $this->log($uri, 'GET', ['file' => $filename], $response, time() - $startTime); if ($response) { $responseJson = json_decode($response->getBody(), true); if ($response->getStatusCode() == 401) { if ($uri == '/gdc/account/login') { throw Exception::error($uri, $responseJson, 401, $e); } if ($retries <= 0) { throw $e; } $this->login($this->username, $this->password); return $this->getToFile($uri, $filename, $retries - 1); } throw Exception::error($uri, $responseJson, $response->getStatusCode(), $e); } throw $e; } }