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
Description
Hi,
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());
}