Skip to content
This repository was archived by the owner on Jun 28, 2024. It is now read-only.
This repository was archived by the owner on Jun 28, 2024. It is now read-only.

[Enhancement] Add Retry-After header upon 200 response status #20

Closed
@quyle92

Description

@quyle92

Hi,
image
The FCM doc mentions about honoring the Retry-After header if it is included in the response from the FCM Connection Server in case of Timeout error. So I'd like to add a few line of codes in DownstreamResponse.php to reflect that feature:

...
protected $retryAfter;

public function __construct(ResponseInterface $response, $tokens, Logger $logger)
{
     $this->tokens = is_string($tokens) ? [$tokens] : $tokens;
     $this->retryAfterHeader($response);

     parent::__construct($response, $logger);
}

public function retryAfterHeader($response)
{
      $responseHeader = $response->getHeaders();
      if (array_key_exists('Retry-After', $responseHeader)) {
            $this->retryAfter = $responseHeader['Retry-After'][0];
      }
}

public function getRetryAfterHeaderValue()
{
      return $this->retryAfter;
}

Unit test:

public function testResponsekWithRetryAfterHeader()
{
     $retry_after = 1;
     $tokens = [
          'first_token'
     ];

     $response = new Response(200, ['Retry-After' => $retry_after], 
                   '{
			 "multicast_id": 216,
			 "success": 0,
			 "failure": 1,
			"canonical_ids": 0,
		         "results": [
				{ "error": "DeviceMessageRateExceeded" }
	                 ]
	}');

     $logger = new \Monolog\Logger('test');
     $logger->pushHandler(new \Monolog\Handler\NullHandler());

     $downstreamResponse = new DownstreamResponse($response, $tokens, $logger);

     $this->assertEquals($retry_after, $downstreamResponse->getRetryAfterHeaderValue());
}

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions