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