/** * @param ProcessEvent $event */ public function stopOnFailure(ProcessEvent $event) { /** @var ScenarioProcess $process */ $process = $event->getProcess(); if ($process->withError()) { $this->parallelProcessRunner->stop(); $this->terminate(1); } }
protected function initParallelProcessRunner() { $this->parallelProcessRunner = new ParallelProcessRunner(); $this->parallelProcessRunner->setMaxParallelProcess(2); $this->parallelProcessRunner->setStatusCheckWait(15); $this->parallelProcessRunner->getEventDispatcher()->addSubscriber(new ParallelProcessSubscriber($this->getSymfonyStyle(), $this->getProgressBarHelper())); }
/** * @param ScenarioInfo[] $scenarios * * @return int */ protected function runScenarios(array $scenarios) { $result = 0; /** @var ScenarioProcess[] $processes */ $processes = array_map(function (ScenarioInfo $scenarioInfo) { return $this->scenarioProcessFactory->make($scenarioInfo); }, $scenarios); $this->parallelProcessRunner->reset()->add($processes)->run(); foreach ($processes as $process) { $result = max($result, $process->getExitCode()); } return $result; }
/** * @param array $processes * @param string $hookedEventName * * @return ProcessEvent[] */ protected function hookEventsByName(array $processes, $hookedEventName) { $events = []; $eventDispatcher = $this->getMock(EventDispatcher::class, ['dispatch']); $eventDispatcher->expects($this->any())->method('dispatch')->willReturnCallback(function ($evenName, $event) use(&$events, $hookedEventName) { if ($hookedEventName == $evenName) { $events[] = $event; } }); $runner = new ParallelProcessRunner($eventDispatcher); $runner->add($processes)->run(); return $events; }