From a6c4aa7a1485832d39ba0f3f07aa138ac3b72b55 Mon Sep 17 00:00:00 2001 From: Sergey Kleyman Date: Wed, 8 Mar 2023 16:33:16 +0200 Subject: [PATCH] Fixed hung component tests --- .../Util/ComponentTestsPhpUnitExtension.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tests/ElasticApmTests/ComponentTests/Util/ComponentTestsPhpUnitExtension.php b/tests/ElasticApmTests/ComponentTests/Util/ComponentTestsPhpUnitExtension.php index 02df4678a..6e2fceaad 100644 --- a/tests/ElasticApmTests/ComponentTests/Util/ComponentTestsPhpUnitExtension.php +++ b/tests/ElasticApmTests/ComponentTests/Util/ComponentTestsPhpUnitExtension.php @@ -63,13 +63,18 @@ final class ComponentTestsPhpUnitExtension extends PhpUnitExtensionBase implemen /** @var Logger */ private $logger; - /** @var ?GlobalTestInfra */ + /** @var GlobalTestInfra */ private static $globalTestInfra = null; public function __construct() { parent::__construct(self::DBG_PROCESS_NAME); + // We spin off test infrastructure servers here and not on demand + // in self::getGlobalTestInfra() because PHPUnit might fork to run individual tests + // and ResourcesCleaner would track the PHPUnit child process as its master which would be wrong + self::$globalTestInfra = new GlobalTestInfra(); + GlobalTracerHolder::setValue(NoopTracer::singletonInstance()); $this->logger = AmbientContextForTests::loggerFactory()->loggerForClass( @@ -80,11 +85,16 @@ public function __construct() )->addContext('appCodeHostKind', AmbientContextForTests::testConfig()->appCodeHostKind()); } + public function __destruct() + { + ($loggerProxy = $this->logger->ifDebugLevelEnabled(__LINE__, __FUNCTION__)) + && $loggerProxy->log('Destroying...'); + + self::$globalTestInfra->getResourcesCleaner()->signalAndWaitForItToExit(); + } + public static function getGlobalTestInfra(): GlobalTestInfra { - if (self::$globalTestInfra === null) { - self::$globalTestInfra = new GlobalTestInfra(); - } return self::$globalTestInfra; }