/**
  * @param SyncTask $task
  *
  * @return string
  */
 protected function getEnvironment($task)
 {
     $environment = $this->environment;
     if (strlen($task->getEnvironment()) > 0) {
         $environment = $task->getEnvironment();
     }
     return $environment;
 }
 /**
  * Send message to beanstalkd server.
  *
  * @param SyncTask $task
  */
 protected function send($task)
 {
     $content = json_encode(['id' => $task->getId(), 'task' => 'ongr.task.' . $task->getName(), 'args' => [implode(' ', array_merge([$task->getCommand(), '-e', $this->getEnvironment($task)], $task->getArguments()))]]);
     if ($this->connection) {
         $this->connection->useTube($task->getExchange())->put($content);
     }
     $this->logger && $this->logger->info('beanstalkd publish', [$task->getName(), $task->getPublishingType(), $task->getHost()]);
 }
 /**
  * Test to check if disabled publisher do not publish.
  */
 public function testDisabledPublisher()
 {
     $publisher = $this->getMockBuilder('ONGR\\TaskMessengerBundle\\Publishers\\BeanstalkdPublisher')->disableOriginalConstructor()->setMethods(null)->getMock();
     $publisher->setEnabled(false);
     $task = new SyncTask(SyncTask::SYNC_TASK_BROADCAST);
     $task->setName('ongr:sync:download');
     $publisher->expects($this->never())->method('send');
     $publisher->publish($task);
 }
 /**
  * Dummy test for verifying that TaskPublisher works with configured brokers.
  */
 public function testPublish()
 {
     $client = self::createClient();
     $publisher = $client->getContainer()->get('ongr_task_messenger.task_publisher.foo_publisher');
     $task = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
     $task->setName('task_foo');
     $task->setCommand('command_foo');
     $publisher->publish($task);
     $redis = new Predis\Client();
     $this->verifyMessage($redis->get('test'), ['taskType' => 'task_foo', 'commandName' => 'command_foo -e test']);
 }
 /**
  * Test if publisher is added correctly.
  */
 public function testTaskPublisherConstructor()
 {
     $task = new SyncTask(SyncTask::SYNC_TASK_BROADCAST);
     $task->setName('ongr:sync:download');
     $task->setCommand('ongr:sync:download');
     $amqpPublisher = $this->getAMQPPublisher();
     $amqpPublisher->expects($this->once())->method('publish')->with($task);
     /** @var TaskPublisher $taskPublisher */
     $taskPublisher = $this->getMockBuilder('ONGR\\TaskMessengerBundle\\Service\\TaskPublisher')->setConstructorArgs([$amqpPublisher])->setMethods(null)->getMock();
     $taskPublisher->publish($task);
 }
 /**
  * Test if AMQPPublisher works as expected.
  */
 public function testPublish()
 {
     $container = $this->getContainer();
     $publisher = $container->get('ongr_task_messenger.publisher.default.amqp');
     $logger = new NullLogger();
     $publisher->setLogger($logger);
     $task = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
     $task->setName('task_foo');
     $task->setCommand('command_foo');
     $publisher->publish($task);
     $this->channel->wait();
 }
 /**
  * Test if Redis works as expected.
  */
 public function testLogging()
 {
     $container = $this->getContainer();
     $publisher = $container->get('ongr_task_messenger.publisher.foo_publisher.custom');
     $logger = new NullLogger();
     $publisher->setLogger($logger);
     $task = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
     $task->setName('task_foo');
     $task->setCommand('command_foo');
     $publisher->publish($task);
     $redis = new Predis\Client();
     $this->verifyMessage($redis->get('test'));
 }
 /**
  * Test if BeanstalkdPublisher works as expected.
  */
 public function testLogging()
 {
     $container = $this->getContainer();
     $publisher = $container->get('ongr_task_messenger.publisher.default.beanstalkd');
     $logger = new NullLogger();
     $publisher->setLogger($logger);
     $task = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
     $task->setName('task_foo');
     $task->setCommand('command_foo');
     $publisher->publish($task);
     $pheanstalk = new Pheanstalk($container->getParameter('ongr_task_messenger.publisher.default.beanstalkd.host'), $container->getParameter('ongr_task_messenger.publisher.default.beanstalkd.port'));
     $job = $pheanstalk->watch('general')->reserve();
     $jobData = json_decode($job->getData(), true);
     $this->assertEquals($jobData['task'], 'ongr.task.task_foo');
     $this->assertEquals($jobData['args'][0], 'command_foo -e test');
 }
 /**
  * @return array
  */
 public function getTestHandleEventData()
 {
     $out = [];
     // Case #0 convert.
     $event = new SyncTaskCompleteEvent();
     $event->setTaskType(SyncTaskCompleteEvent::TASK_TYPE_CONVERT);
     $event->setInputFile('file.xml');
     $event->setProvider('testProvider');
     $event->setDataType(SyncTaskCompleteEvent::DATA_TYPE_FULL_DOCUMENTS);
     $event->setOutputFile('file.xml.converted.json');
     $expected = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
     $expected->setName(SyncTaskCompleteEvent::TASK_TYPE_PUSH);
     $expected->setArguments(['file.xml.converted.json', '-p', 'testProvider']);
     $out[] = [$event, $expected];
     // Case #1 download.
     $event = new SyncTaskCompleteEvent();
     $event->setTaskType(SyncTaskCompleteEvent::TASK_TYPE_DOWNLOAD);
     $event->setProvider('testProvider');
     $event->setDataType(SyncTaskCompleteEvent::DATA_TYPE_FULL_DOCUMENTS);
     $event->setOutputFile('file.xml');
     $event->setDataDescription('delta');
     $expected = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
     $expected->setName(SyncTaskCompleteEvent::TASK_TYPE_CONVERT);
     $expected->setArguments(['testProvider', 'file.xml', '-t', 'delta']);
     $out[] = [$event, $expected];
     // Case #2 push.
     $event = new SyncTaskCompleteEvent();
     $event->setTaskType(SyncTaskCompleteEvent::TASK_TYPE_PUSH);
     $event->setProvider('testProvider');
     $event->setDataType(SyncTaskCompleteEvent::DATA_TYPE_FULL_DOCUMENTS);
     $out[] = [$event];
     // Case #3 convert partial.
     $event = new SyncTaskCompleteEvent();
     $event->setTaskType(SyncTaskCompleteEvent::TASK_TYPE_CONVERT);
     $event->setInputFile('file.xml');
     $event->setProvider('testProvider');
     $event->setDataType(SyncTaskCompleteEvent::DATA_TYPE_PARTIAL_DOCUMENTS);
     $event->setOutputFile('file.xml.converted.json');
     $expected = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
     $expected->setName(SyncTaskCompleteEvent::TASK_TYPE_PUSH);
     $expected->setArguments(['file.xml.converted.json', '-p', 'testProvider', '-d']);
     $out[] = [$event, $expected];
     return $out;
 }
 /**
  * Handles sync task complete event.
  *
  * @param SyncTaskCompleteEvent $event
  */
 public function handleEvent($event)
 {
     switch ($event->getTaskType()) {
         case SyncTaskCompleteEvent::TASK_TYPE_DOWNLOAD:
             $task = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
             $task->setName(SyncTaskCompleteEvent::TASK_TYPE_CONVERT);
             $task->setArguments([$event->getProvider(), $event->getOutputFile()]);
             if ($event->getDataDescription()) {
                 $task->setArguments(array_merge($task->getArguments(), ['-t', $event->getDataDescription()]));
             }
             $this->publisher->publish($task);
             break;
         case SyncTaskCompleteEvent::TASK_TYPE_CONVERT:
             $task = new SyncTask(SyncTask::SYNC_TASK_PRESERVEHOST);
             $task->setName(SyncTaskCompleteEvent::TASK_TYPE_PUSH);
             $task->setArguments([$event->getOutputFile(), '-p', $event->getProvider()]);
             switch ($event->getDataType()) {
                 case SyncTaskCompleteEvent::DATA_TYPE_PARTIAL_DOCUMENTS:
                     $task->setArguments(array_merge($task->getArguments(), ['-d']));
                     break;
                 default:
                     // No other cases.
                     break;
             }
             $this->publisher->publish($task);
             break;
         default:
             // No other cases.
             break;
     }
 }
 /**
  * Send message to AMQP server.
  *
  * @param SyncTask $task
  */
 protected function send($task)
 {
     $channel = $this->connection->channel();
     if ($channel) {
         $channel->exchange_declare($task->getExchange(), $task->getPublishingType(), false, true, false);
         $content = json_encode(['id' => $task->getId(), 'task' => 'ongr.acme_task.' . $task->getName(), 'args' => [implode(' ', array_merge([$task->getCommand(), '-e', $this->getEnvironment($task)], $task->getArguments()))]]);
         $message = new AMQPMessage($content, ['content_type' => 'application/json']);
         $this->logger && $this->logger->info('amqp publish', [$task->getName(), $task->getPublishingType(), $task->getHost()]);
         $channel->basic_publish($message, $task->getExchange(), $task->getHost());
         $channel->close();
     }
 }
 /**
  * Test to check if logging is working as expected.
  */
 public function testLogging()
 {
     $channelMock = $this->getMockBuilder('\\PhpAmqpLib\\Channel\\AMQPChannel')->disableOriginalConstructor()->getMock();
     $amqpConnection = $this->getMockBuilder('PhpAmqpLib\\Connection\\AMQPConnection')->disableOriginalConstructor()->getMock();
     $amqpConnection->expects($this->once())->method('channel')->willReturn($channelMock);
     $connectionFactory = $this->getMockBuilder('ONGR\\TaskMessengerBundle\\Publishers\\ConnectionFactory')->disableOriginalConstructor()->setMethods(['create'])->getMock();
     $connectionFactory->expects($this->once())->method('create')->willReturn($amqpConnection);
     $environment = 'dummy-environment';
     $publisher = new AMQPPublisher($connectionFactory, $environment);
     $task = new SyncTask(SyncTask::SYNC_TASK_BROADCAST);
     $task->setName('ongr:sync:download');
     $task->setCommand('ongr:sync:download');
     $publisher->setLogger($this->getLoggerMock('amqp publish', ['ongr:sync:download', 'fanout', '']));
     $publisher->publish($task);
 }
Ejemplo n.º 13
0
 /**
  * Method to test whether exception is being thrown when task name is not set.
  */
 public function testGetNameException()
 {
     $task = new SyncTask(SyncTask::SYNC_TASK_BROADCAST);
     $this->setExpectedException('InvalidArgumentException');
     $task->getName();
 }