Skip to content
Snippets Groups Projects
Commit b8abdeb3 authored by catch's avatar catch
Browse files

Issue #3202145 by kuldeep_mehra27, phenaproxima, bkosborne, Chris Burge:...

Issue #3202145 by kuldeep_mehra27, phenaproxima, bkosborne, Chris Burge: oEmbed resource fetcher needs to set a reasonable connection timeout
parent 98070c8f
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Cache\CacheBackendInterface;
use GuzzleHttp\ClientInterface; use GuzzleHttp\ClientInterface;
use GuzzleHttp\Exception\TransferException; use GuzzleHttp\Exception\TransferException;
use GuzzleHttp\RequestOptions;
/** /**
* Fetches and caches oEmbed resources. * Fetches and caches oEmbed resources.
...@@ -65,7 +66,9 @@ public function fetchResource($url) { ...@@ -65,7 +66,9 @@ public function fetchResource($url) {
} }
try { try {
$response = $this->httpClient->get($url); $response = $this->httpClient->request('GET', $url, [
RequestOptions::TIMEOUT => 5,
]);
} }
catch (TransferException $e) { catch (TransferException $e) {
throw new ResourceException('Could not retrieve the oEmbed resource.', $url, [], $e); throw new ResourceException('Could not retrieve the oEmbed resource.', $url, [], $e);
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
use GuzzleHttp\Handler\MockHandler; use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\HandlerStack; use GuzzleHttp\HandlerStack;
use GuzzleHttp\Psr7\Response; use GuzzleHttp\Psr7\Response;
use GuzzleHttp\RequestOptions;
/** /**
* @group media * @group media
...@@ -19,6 +20,34 @@ ...@@ -19,6 +20,34 @@
*/ */
class ResourceFetcherTest extends UnitTestCase { class ResourceFetcherTest extends UnitTestCase {
/**
* Tests that resources are fetched with a hard-coded timeout.
*/
public function testFetchTimeout(): void {
$url = 'https://example.com/oembed?url=resource';
$headers = [
'Content-Type' => ['text/javascript'],
];
$body = Json::encode([
'version' => '1.0',
'type' => 'video',
'html' => 'test',
]);
$response = new Response(200, $headers, $body);
$client = $this->prophesize(Client::class);
$client->request('GET', $url, [RequestOptions::TIMEOUT => 5])
->shouldBeCalled()
->willReturn($response);
$fetcher = new ResourceFetcher(
$client->reveal(),
$this->createMock('\Drupal\media\OEmbed\ProviderRepositoryInterface'),
new NullBackend('default')
);
$fetcher->fetchResource($url);
}
/** /**
* Tests how the resource fetcher handles unknown Content-Type headers. * Tests how the resource fetcher handles unknown Content-Type headers.
* *
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment