public function testBasePackageInfo() { $this->readerMock->expects($this->once())->method('isExist')->willReturn(true); $this->readerMock->expects($this->once())->method('isReadable')->willReturn(true); $jsonData = json_encode([BasePackageInfo::COMPOSER_KEY_EXTRA => [BasePackageInfo::COMPOSER_KEY_MAP => [[__FILE__, __FILE__], [__DIR__, __DIR__]]]]); $this->readerMock->expects($this->once())->method('readFile')->willReturn($jsonData); $expectedList = [__FILE__, __DIR__]; $actualList = $this->basePackageInfo->getPaths(); $this->assertEquals($expectedList, $actualList); }
public function setUp() { $this->dbValidator = $this->getMock('Magento\\Setup\\Validator\\DbValidator', [], [], '', false); $this->deploymentConfig = $this->getMock('Magento\\Framework\\App\\DeploymentConfig', [], [], '', false); $this->deploymentConfig->expects($this->once())->method('get')->willReturn([ConfigOptionsListConstants::KEY_NAME => 'dbname', ConfigOptionsListConstants::KEY_HOST => 'host', ConfigOptionsListConstants::KEY_USER => 'username', ConfigOptionsListConstants::KEY_PASSWORD => 'password']); $this->filesystem = $this->getMock('Magento\\Framework\\Filesystem', [], [], '', false); $this->write = $this->getMock('Magento\\Framework\\Filesystem\\Directory\\Write', [], [], '', false); $this->filesystem->expects($this->once())->method('getDirectoryWrite')->willReturn($this->write); $this->phpReadinessCheck = $this->getMock('Magento\\Setup\\Model\\PhpReadinessCheck', [], [], '', false); $this->basePackageInfo = $this->getMock('Magento\\Setup\\Model\\BasePackageInfo', [], [], '', false); $this->basePackageInfo->expects($this->once())->method('getPaths')->willReturn([__FILE__]); $this->status = $this->getMock('Magento\\Setup\\Model\\Cron\\Status', [], [], '', false); $this->readinessCheck = new ReadinessCheck($this->dbValidator, $this->deploymentConfig, $this->filesystem, $this->phpReadinessCheck, $this->basePackageInfo, $this->status); $this->phpReadinessCheck->expects($this->once())->method('checkPhpVersion')->willReturn(['responseType' => 'success']); $this->phpReadinessCheck->expects($this->once())->method('checkPhpExtensions')->willReturn(['responseType' => 'success']); $this->phpReadinessCheck->expects($this->once())->method('checkPhpCronSettings')->willReturn(['responseType' => 'success']); $this->expected = [ReadinessCheck::KEY_PHP_VERSION_VERIFIED => ['responseType' => 'success'], ReadinessCheck::KEY_PHP_EXTENSIONS_VERIFIED => ['responseType' => 'success'], ReadinessCheck::KEY_PHP_SETTINGS_VERIFIED => ['responseType' => 'success']]; }
/** * Run the readiness check * * @return bool */ public function runReadinessCheck() { $resultJsonRawData = [self::KEY_READINESS_CHECKS => []]; $errorLogMessages = []; // check PHP version $phpVersionCheckResult = $this->phpReadinessCheck->checkPhpVersion(); $errorMessage = $this->getPhpVersionCheckErrorLogMessage($phpVersionCheckResult); if (!empty($errorMessage)) { $errorLogMessages[] = $errorMessage; } // check PHP extensions $phpExtensionsCheckResult = $this->phpReadinessCheck->checkPhpExtensions(); $errorMessage = $this->getPhpExtensionsCheckErrorLogMessage($phpExtensionsCheckResult); if (!empty($errorMessage)) { $errorLogMessages[] = $errorMessage; } // check PHP settings $phpSettingsCheckResult = $this->phpReadinessCheck->checkPhpCronSettings(); $errorMessage = $this->getPhpSettingsCheckErrorLogMessage($phpSettingsCheckResult); if (!empty($errorMessage)) { $errorLogMessages[] = $errorMessage; } $resultJsonRawData[self::KEY_PHP_CHECKS][self::KEY_PHP_VERSION_VERIFIED] = $phpVersionCheckResult; $resultJsonRawData[self::KEY_PHP_CHECKS][self::KEY_PHP_EXTENSIONS_VERIFIED] = $phpExtensionsCheckResult; $resultJsonRawData[self::KEY_PHP_CHECKS][self::KEY_PHP_SETTINGS_VERIFIED] = $phpSettingsCheckResult; // check DB connection $errorMessage = $this->performDBCheck(); if (empty($errorMessage)) { $resultJsonRawData[self::KEY_READINESS_CHECKS][self::KEY_DB_WRITE_PERMISSION_VERIFIED] = true; } else { $resultJsonRawData[self::KEY_READINESS_CHECKS][self::KEY_DB_WRITE_PERMISSION_VERIFIED] = false; $resultJsonRawData[self::KEY_READINESS_CHECKS][self::KEY_ERROR] = $errorMessage; $errorLogMessages[] = $errorMessage; } // Prepare list of magento specific files and directory paths for updater application to check write // permissions $errorMessage = ''; try { $filePaths = $this->basePackageInfo->getPaths(); $resultJsonRawData[self::KEY_FILE_PATHS][self::KEY_LIST] = $filePaths; } catch (\Exception $e) { $errorMessage = $e->getMessage(); $resultJsonRawData[self::KEY_FILE_PATHS][self::KEY_LIST] = []; $errorLogMessages[] = $errorMessage; } $resultJsonRawData[self::KEY_FILE_PATHS][self::KEY_ERROR] = $errorMessage; // updates timestamp $write = $this->filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR); if ($write->isExist(self::SETUP_CRON_JOB_STATUS_FILE)) { $jsonData = json_decode($write->readFile(self::SETUP_CRON_JOB_STATUS_FILE), true); if (isset($jsonData[self::KEY_CURRENT_TIMESTAMP])) { $resultJsonRawData[self::KEY_LAST_TIMESTAMP] = $jsonData[self::KEY_CURRENT_TIMESTAMP]; } } $resultJsonRawData[self::KEY_CURRENT_TIMESTAMP] = time(); // write to transient log file to display on GUI $resultJson = json_encode($resultJsonRawData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); $write->writeFile(self::SETUP_CRON_JOB_STATUS_FILE, $resultJson); // write to permanent log file, var/log/update.log foreach ($errorLogMessages as $errorLog) { $this->status->add($errorLog, \Psr\Log\LogLevel::ERROR, false); } return empty($errorLogMessages); }