objectManager = $objectManager; $this->configXml = $configXml->get(); $this->configXmlDist = $configXmlDist->get(); } /** * Configure command. * * @return void */ protected function configure() { parent::configure(); $this->setName('troubleshooting:check-config-valid') ->setDescription('Check if config.xml is configured properly.'); } /** * Execute check if config.xml is configured properly. * * @param InputInterface $input * @param OutputInterface $output * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function execute(InputInterface $input, OutputInterface $output) { $output = $this->objectManager->create( \Magento\Mtf\Console\Output::class, ['output' => $output] ); $output->writeln("Checking config.xml file configuration..."); $output->outputMessages($this->checkConfigFileAvailable()); $output->writeln("config.xml file check is finished."); } /** * Check if config.xml file is present in MTF_BP/etc folder. * * @return array */ private function checkConfigFileAvailable() { $messages = []; $configFileExists = false; if (file_exists($this->configFilePath)) { $configFileExists = true; if ($this->recursiveKeys($this->configXml) != $this->recursiveKeys($this->configXmlDist)) { $messages['error'][] = 'Check your config.xml file to contain all configs from config.xml.dist.'; } } else { if (file_exists($this->configFilePath . '.dist')) { if (!copy($this->configFilePath . '.dist', $this->configFilePath)) { $messages['error'][] = 'Failed to copy config.xml.dist to config.xml.'; return $messages; } $messages['info'][] = 'config.xml file has been created based on config.xml.dist.'; $configFileExists = true; } } if (!$configFileExists) { $messages['error'][] = 'Cannot define config.xml configuration path.'; } return $messages; } /** * Get array of array keys. * * @param array $input * @return array */ private function recursiveKeys(array $input) { $output = array_keys($input); foreach ($input as $sub) { if (is_array($sub)) { $output = array_merge($output, $this->recursiveKeys($sub)); } } return $output; } }