objectManager = Bootstrap::getObjectManager(); $this->shell = $this->objectManager->get(Shell::class); $this->logger = $this->objectManager->get(Monolog::class); $this->deploymentConfig = $this->objectManager->get(DeploymentConfig::class); /** @var Filesystem $filesystem */ $filesystem = $this->objectManager->create(Filesystem::class); $this->etcDirectory = $filesystem->getDirectoryWrite(DirectoryList::CONFIG); $this->etcDirectory->copyFile(self::$configFile, self::$backupFile); } /** * @inheritdoc * @throws \Magento\Framework\Exception\FileSystemException */ public function tearDown() { $this->reinitDeploymentConfig(); $this->etcDirectory->delete(self::$backupFile); } /** * @param bool $flag * @throws \Magento\Framework\Exception\LocalizedException */ private function enableDebugging(bool $flag) { $this->shell->execute( PHP_BINARY . ' -f %s setup:config:set -n --%s=%s --%s=%s', [ BP . '/bin/magento', ConfigOptionsList::INPUT_KEY_DEBUG_LOGGING, (int)$flag, InitParamListener::BOOTSTRAP_PARAM, urldecode(http_build_query(Bootstrap::getInstance()->getAppInitParams())), ] ); $this->deploymentConfig->resetData(); $this->assertSame((int)$flag, $this->deploymentConfig->get(ConfigOptionsList::CONFIG_PATH_DEBUG_LOGGING)); } /** * @throws \Magento\Framework\Exception\LocalizedException */ public function testDebugInProductionMode() { $message = 'test message'; $this->reinitDebugHandler(State::MODE_PRODUCTION); $this->removeDebugLog(); $this->logger->debug($message); $this->assertFileNotExists($this->getDebuggerLogPath()); $this->assertNull($this->deploymentConfig->get(ConfigOptionsList::CONFIG_PATH_DEBUG_LOGGING)); $this->checkCommonFlow($message); $this->reinitDeploymentConfig(); } /** * @throws \Magento\Framework\Exception\LocalizedException */ public function testDebugInDeveloperMode() { $message = 'test message'; $this->reinitDebugHandler(State::MODE_DEVELOPER); $this->removeDebugLog(); $this->logger->debug($message); $this->assertFileExists($this->getDebuggerLogPath()); $this->assertContains($message, file_get_contents($this->getDebuggerLogPath())); $this->assertNull($this->deploymentConfig->get(ConfigOptionsList::CONFIG_PATH_DEBUG_LOGGING)); $this->checkCommonFlow($message); $this->reinitDeploymentConfig(); } /** * @return string */ private function getDebuggerLogPath() { if (!$this->debugLogPath) { foreach ($this->logger->getHandlers() as $handler) { if ($handler instanceof Debug) { $this->debugLogPath = $handler->getUrl(); } } } return $this->debugLogPath; } /** * @throws \Magento\Framework\Exception\FileSystemException */ private function reinitDeploymentConfig() { $this->etcDirectory->delete(self::$configFile); $this->etcDirectory->copyFile(self::$backupFile, self::$configFile); } /** * @param string $instanceMode * @throws \Magento\Framework\Exception\LocalizedException */ private function reinitDebugHandler(string $instanceMode) { $this->debugHandler = $this->objectManager->create( Debug::class, [ 'filePath' => Bootstrap::getInstance()->getAppTempDir(), 'state' => $this->objectManager->create( State::class, [ 'mode' => $instanceMode, ] ), ] ); $this->logger->setHandlers( [ $this->debugHandler, ] ); } /** * @return void */ private function detachLogger() { $this->debugHandler->close(); } /** * @return void */ private function removeDebugLog() { $this->detachLogger(); if (file_exists($this->getDebuggerLogPath())) { unlink($this->getDebuggerLogPath()); } } /** * @param string $message * @throws \Magento\Framework\Exception\LocalizedException */ private function checkCommonFlow(string $message) { $this->enableDebugging(true); $this->removeDebugLog(); $this->logger->debug($message); $this->assertFileExists($this->getDebuggerLogPath()); $this->assertContains($message, file_get_contents($this->getDebuggerLogPath())); $this->enableDebugging(false); $this->removeDebugLog(); $this->logger->debug($message); $this->assertFileNotExists($this->getDebuggerLogPath()); } }