AdminAnalyzer.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Mtf\Troubleshooting;
  7. use Magento\Mtf\ObjectManagerInterface;
  8. use Magento\Mtf\Troubleshooting\Helper\UrlAnalyzer;
  9. use Magento\Mtf\Util\Protocol\CurlTransport;
  10. use Magento\Mtf\Util\Protocol\CurlTransport\BackendDecorator;
  11. use Symfony\Component\Console\Input\InputInterface;
  12. use Symfony\Component\Console\Output\OutputInterface;
  13. /**
  14. * Analyze Magento Admin.
  15. */
  16. class AdminAnalyzer extends \Symfony\Component\Console\Command\Command
  17. {
  18. /**
  19. * Console output of formatted messages.
  20. *
  21. * @var \Magento\Mtf\Console\Output
  22. */
  23. private $output;
  24. /**
  25. * Object manager instance.
  26. *
  27. * @var ObjectManagerInterface
  28. */
  29. private $objectManager;
  30. /**
  31. * Url analyzer helper.
  32. *
  33. * @var UrlAnalyzer
  34. */
  35. private $urlAnalyzer;
  36. /**
  37. * @param ObjectManagerInterface $objectManager
  38. * @param UrlAnalyzer $urlAnalyzer
  39. */
  40. public function __construct(
  41. ObjectManagerInterface $objectManager,
  42. UrlAnalyzer $urlAnalyzer
  43. ) {
  44. parent::__construct();
  45. $this->objectManager = $objectManager;
  46. $this->urlAnalyzer = $urlAnalyzer;
  47. }
  48. /**
  49. * Configure command.
  50. *
  51. * @return void
  52. */
  53. protected function configure()
  54. {
  55. parent::configure();
  56. $this->setName('troubleshooting:check-magento-admin')
  57. ->setDescription('Check that app_backend_url is correct and admin can log in to Admin.');
  58. }
  59. /**
  60. * Execute command.
  61. *
  62. * @param InputInterface $input
  63. * @param OutputInterface $output
  64. * @return void
  65. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  66. */
  67. protected function execute(InputInterface $input, OutputInterface $output)
  68. {
  69. \PHPUnit\Util\Configuration::getInstance(MTF_PHPUNIT_FILE)->handlePHPConfiguration();
  70. $this->output = $this->objectManager->create(
  71. \Magento\Mtf\Console\Output::class,
  72. ['output' => $output]
  73. );
  74. $this->output->writeln("Verifying Magento Admin...");
  75. $adminUrlAnalyzerMessages = $this->runAdminUrlAnalyzer();
  76. if (isset($adminUrlAnalyzerMessages['error']) === false) {
  77. $this->output->outputMessages($this->urlAnalyzer->checkDomain($_ENV['app_backend_url']));
  78. } else {
  79. $this->output->outputMessages($adminUrlAnalyzerMessages);
  80. }
  81. $this->output->writeln("Admin verification finished.");
  82. }
  83. /**
  84. * Execute Admin url analyzer check.
  85. *
  86. * @return null|array
  87. */
  88. public function runAdminUrlAnalyzer()
  89. {
  90. if (!isset($_ENV['app_backend_url'])) {
  91. $messages['error'][] = 'app_backend_url parameter is absent in the phpunit.xml file. '
  92. . 'Please, copy parameter from phpunit.xml.dist.';
  93. return $messages;
  94. }
  95. $this->output->outputMessages($this->urlAnalyzer->fixLastSlash('app_backend_url'));
  96. $url1 = $_ENV['app_backend_url'];
  97. if (strpos($url1, '/index.php') !== false) {
  98. $url2 = str_replace('/index.php', '', $url1);
  99. } else {
  100. $pattern = '/(\/\w+\/)$/';
  101. $replacement = '/index.php$1';
  102. $url2 = str_replace($url1, preg_replace($pattern, $replacement, $url1), $url1);
  103. }
  104. $urls = [$url1, $url2];
  105. $isUrlValid = false;
  106. foreach ($urls as $url) {
  107. $_ENV['app_backend_url'] = $url;
  108. try {
  109. $config = \Magento\Mtf\ObjectManagerFactory::getObjectManager()->create(
  110. \Magento\Mtf\Config\DataInterface::class
  111. );
  112. $curl = new BackendDecorator(new CurlTransport(), $config);
  113. $response = $curl->read();
  114. if (strpos($response, '404') !== false) {
  115. break;
  116. }
  117. $curl->close();
  118. $isUrlValid = true;
  119. break;
  120. } catch (\Exception $e) {
  121. continue;
  122. }
  123. }
  124. if ($isUrlValid == false) {
  125. $messages['error'][] = 'Check correctness of app_backend_url in phpunit.xml.';
  126. return $messages;
  127. } elseif ($url1 != $_ENV['app_backend_url']) {
  128. return $this->urlAnalyzer->resolveIndexPhpProblem($_ENV['app_backend_url']);
  129. }
  130. }
  131. }