/** * @param $type */ private function createPropheciesForTaskRunnerRun($type) { $prophet = $this; $queueRunMethodProphecy = $this->queueProphecy->run($type, Argument::type('callable'))->will(function ($parameters) use($prophet) { $inputMessage = new InputMessage('input' . mt_rand(0, 65535)); $taskClass = 'Task' . mt_rand(0, 65535); $taskInput = new TaskInput([mt_rand(0, 65535)]); $prophet->taskInputMessageTransformerProphecy->getTaskClassFromMessage($inputMessage)->willReturn($taskClass); $prophet->taskInputMessageTransformerProphecy->getTaskInputFromMessage($inputMessage)->willReturn($taskInput); $prophet->taskFactoryProphecy->createTask($taskClass)->will(function () use($taskInput, &$outputMessage, $prophet) { $taskProphecy = $prophet->prophesize(Task::class); $taskRunMethodProphecy = $taskProphecy->run($taskInput)->will(function () use(&$outputMessage, $prophet) { $result = mt_rand(0, 65535); $outputMessage = new OutputMessage('output' . mt_rand(0, 65535)); $prophet->taskResultMessageTransformerProphecy->getOutputMessageFromResult(TaskResult::fromReturn($result))->willReturn($outputMessage); return $result; }); $taskRunMethodProphecy->shouldBeCalledTimes(1); return $taskProphecy->reveal(); }); $callable = $parameters[1]; $outputMessageResult = $callable($inputMessage); $prophet->assertEquals($outputMessage, $outputMessageResult); }); return $queueRunMethodProphecy; }
public function getTaskResultFromMessage(OutputMessage $message) { $data = $message->getData(); $type = substr($data, 0, 1); $serializedData = substr($data, 1); if ($type === 'r') { $return = unserialize($serializedData); $taskResult = TaskResult::fromReturn($return); } elseif ($type === 'e') { list($class, $message, $code, $file, $line, ) = unserialize($serializedData); $exception = $this->createResultException($class); $this->setResultExceptionInternalData($exception, $class, $message, $code, $file, $line); $taskResult = TaskResult::fromException($exception); } else { $taskResult = TaskResult::fromReturn(null); } return $taskResult; }