Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
CRAP | |
0.00% |
0 / 86 |
| Runner | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
240 | |
0.00% |
0 / 86 |
| __construct() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| run() | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 32 |
|||
| getCheckInstance(array $parameters = array()) | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 17 |
|||
| initReport() | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 13 |
|||
| getReport() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| setParameters(Parameters $parameters) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| setConfig(IConfig $config) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| setCache(IReadOnlyCache $cache) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| setCommand(Command $command) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| <?php | |
| namespace Environaut\Runner; | |
| use Environaut\Cache\IReadOnlyCache; | |
| use Environaut\Checks\ICheck; | |
| use Environaut\Command\Command; | |
| use Environaut\Config\IConfig; | |
| use Environaut\Config\Parameters; | |
| use Environaut\Report\IReport; | |
| use Environaut\Report\Results\IResult; | |
| use Environaut\Runner\IRunner; | |
| /** | |
| * Reads checks from the config, executes them in that order and compiles the results into a report. | |
| */ | |
| class Runner implements IRunner | |
| { | |
| /** | |
| * Default namespaced class name to use for checks if none is specified in the check definition of the config. | |
| */ | |
| const DEFAULT_CHECK_IMPLEMENTOR = 'Environaut\Checks\Configurator'; | |
| /** | |
| * @var IConfig current config | |
| */ | |
| protected $config; | |
| /** | |
| * @var Command environaut command | |
| */ | |
| protected $command; | |
| /** | |
| * @var IReport current report | |
| */ | |
| protected $report; | |
| /** | |
| * @var Parameters | |
| */ | |
| protected $parameters; | |
| /** | |
| * @var IReadOnlyCache cache that checks may use for cached settings (storage and retrieval) | |
| */ | |
| protected $readonly_cache; | |
| public function __construct() | |
| { | |
| $this->parameters = new Parameters(); | |
| } | |
| /** | |
| * Execute the checks that are defined in the config | |
| * and generate a report to consume by others. | |
| */ | |
| public function run() | |
| { | |
| $successful = true; | |
| $this->initReport(); | |
| $checks = array(); | |
| foreach ($this->config->getCheckDefinitions() as $check_definition) { | |
| $checks[] = $this->getCheckInstance($check_definition); | |
| } | |
| $progress = $this->command->getHelperSet()->get('progress'); | |
| $progress->setFormat(' %current%/%max% [%bar%] %percent%% Elapsed: %elapsed% '); | |
| $progress->start($this->command->getOutput(), count($checks)); | |
| // run all checks defined in the configuration | |
| foreach ($checks as $check) { | |
| // process the check | |
| $succeeded = (bool) $check->run(); | |
| // collect the result | |
| $result = $check->getResult(); | |
| if (!$result instanceof IResult) { | |
| throw new \LogicException( | |
| 'The result of check "' . $check->getName() . '" (group "' . $check->getGroup() . '", class "' . | |
| get_class($check) . '") must implement IResult.' | |
| ); | |
| } | |
| // mark the check's result as success or failure | |
| if (!$succeeded) { | |
| $result->setStatus(IResult::FAIL); | |
| } else { | |
| $result->setStatus(IResult::SUCCESS); | |
| } | |
| // add the check's result to the report | |
| $this->report->addResult($result); | |
| $successful &= $succeeded; | |
| $progress->advance(); | |
| } | |
| $progress->finish(); | |
| return $successful; | |
| } | |
| /** | |
| * Returns a new check instance based on the given parameters (from config). | |
| * | |
| * @param array $parameters check definition parameters | |
| * | |
| * @return ICheck instance | |
| */ | |
| protected function getCheckInstance(array $parameters = array()) | |
| { | |
| $params = new Parameters($parameters); | |
| $check_implementor = $params->get(IConfig::PARAM_CLASS, self::DEFAULT_CHECK_IMPLEMENTOR); | |
| $check = new $check_implementor(); | |
| if (!$check instanceof ICheck) { | |
| throw new \InvalidArgumentException( | |
| 'The given check class "' . $check_implementor . '" does not implement ICheck.' | |
| ); | |
| } | |
| $check->setCommand($this->command); | |
| $check->setCache($this->readonly_cache); | |
| $check->setName($params->get(IConfig::PARAM_NAME)); | |
| $check->setGroup($params->get(IConfig::PARAM_GROUP)); | |
| $check->setParameters($params); | |
| return $check; | |
| } | |
| /** | |
| * Initializes the internal report instance being used to collect the results of the checks. | |
| * | |
| * @return IReport report instance | |
| */ | |
| protected function initReport() | |
| { | |
| $report_implementor = $this->config->getReportImplementor(); | |
| $report = new $report_implementor(); | |
| if (!$report instanceof IReport) { | |
| throw new \InvalidArgumentException( | |
| 'The given report class "' . $report_implementor . '" does not implement IReport.' | |
| ); | |
| } | |
| $this->report = $report; | |
| $this->report->setParameters(new Parameters($this->config->get('report', array()))); | |
| return $this->report; | |
| } | |
| /** | |
| * Returns the report that contains the results of the checks. | |
| * | |
| * @return IReport report created by the runner | |
| */ | |
| public function getReport() | |
| { | |
| return $this->report; | |
| } | |
| /** | |
| * Sets the given runtime parameters on the runner. | |
| * | |
| * @param Parameters $parameters runtime parameters understood by the runner | |
| */ | |
| public function setParameters(Parameters $parameters) | |
| { | |
| $this->parameters = $parameters; | |
| } | |
| /** | |
| * Sets the given config on the runner. | |
| * | |
| * @param IConfig $config config data | |
| */ | |
| public function setConfig(IConfig $config) | |
| { | |
| $this->config = $config; | |
| } | |
| /** | |
| * Sets the readonly cache used by checks to determine if they've been run before and | |
| * if they can reuse prior settings to let users just confirm settings etc. | |
| * | |
| * @param IReadOnlyCache $cache instance that contains all cached settings for checks | |
| */ | |
| public function setCache(IReadOnlyCache $cache) | |
| { | |
| $this->readonly_cache = $cache; | |
| } | |
| /** | |
| * Sets the command on the runner to have | |
| * access to the input and output. | |
| * | |
| * @param Command $command | |
| */ | |
| public function setCommand(Command $command) | |
| { | |
| $this->command = $command; | |
| } | |
| } |