diff --git a/src/DependencyInjection/Compiler/HttpClientTracingPass.php b/src/DependencyInjection/Compiler/HttpClientTracingPass.php index e61bd41e..99f7364d 100644 --- a/src/DependencyInjection/Compiler/HttpClientTracingPass.php +++ b/src/DependencyInjection/Compiler/HttpClientTracingPass.php @@ -34,6 +34,10 @@ public function process(ContainerBuilder $container): void $decoratedService = $this->getDecoratedService($container); + if (null === $decoratedService) { + return; + } + $container->register(TraceableHttpClient::class, TraceableHttpClient::class) ->setArgument(0, new Reference(TraceableHttpClient::class . '.inner')) ->setArgument(1, new Reference(HubInterface::class)) @@ -41,9 +45,9 @@ public function process(ContainerBuilder $container): void } /** - * @return array{string, int} + * @return array{string, int}|null */ - private function getDecoratedService(ContainerBuilder $container): array + private function getDecoratedService(ContainerBuilder $container): ?array { // Starting from Symfony 6.3, the raw HTTP client that serves as adapter // for the transport is registered as a separate service, so that the @@ -66,6 +70,10 @@ private function getDecoratedService(ContainerBuilder $container): array } } - return ['http_client', 15]; + if ($container->hasDefinition('http_client')) { + return ['http_client', 15]; + } + + return null; } } diff --git a/tests/DependencyInjection/Compiler/HttpClientTracingPassTest.php b/tests/DependencyInjection/Compiler/HttpClientTracingPassTest.php index 34057831..8b2ccb66 100644 --- a/tests/DependencyInjection/Compiler/HttpClientTracingPassTest.php +++ b/tests/DependencyInjection/Compiler/HttpClientTracingPassTest.php @@ -54,6 +54,14 @@ public function processDataProvider(): \Generator ]; } + public function testProcessDoesNothingIfHttpClientServiceCannotBeFound(): void + { + $container = $this->createContainerBuilder(true, true, null); + $container->compile(); + + $this->assertFalse($container->hasDefinition('http_client')); + } + /** * @dataProvider processDoesNothingIfConditionsForEnablingTracingAreMissingDataProvider */ @@ -86,7 +94,7 @@ public function processDoesNothingIfConditionsForEnablingTracingAreMissingDataPr ]; } - private function createContainerBuilder(bool $isTracingEnabled, bool $isHttpClientTracingEnabled, string $httpClientServiceId): ContainerBuilder + private function createContainerBuilder(bool $isTracingEnabled, bool $isHttpClientTracingEnabled, ?string $httpClientServiceId): ContainerBuilder { $container = new ContainerBuilder(); $container->addCompilerPass(new HttpClientTracingPass()); @@ -96,8 +104,10 @@ private function createContainerBuilder(bool $isTracingEnabled, bool $isHttpClie $container->register(HubInterface::class, HubInterface::class) ->setPublic(true); - $container->register($httpClientServiceId, HttpClientInterface::class) - ->setPublic(true); + if (null !== $httpClientServiceId) { + $container->register($httpClientServiceId, HttpClientInterface::class) + ->setPublic(true); + } return $container; }