/**
  * Do the actual work of the script.
  */
 public function execute()
 {
     $basePath = 'maintenance/consume-pending/';
     $consumer = new PendingQueueConsumer($this->getOption('queue'), $this->getOptionOrConfig('time-limit', $basePath . 'time-limit'), $this->getOptionOrConfig('max-messages', $basePath . 'message-limit'));
     $startTime = time();
     $messageCount = $consumer->dequeueMessages();
     $elapsedTime = time() - $startTime;
     Logger::info("Processed {$messageCount} pending messages in {$elapsedTime} seconds.");
 }
 /**
  * We refuse to consume a message and drop it if the corresponding
  * payments_initial row is failed.
  */
 public function testPendingMessageInitialFailed()
 {
     $initRow = PaymentsInitialDatabaseTest::generateTestMessage();
     $initRow['payments_final_status'] = 'failed';
     $initRow['validation_action'] = 'reject';
     $this->paymentsInitialDb->storeMessage($initRow);
     $message = self::generatePendingMessageFromInitial($initRow);
     $consumer = new PendingQueueConsumer('pending', 1000, 1000);
     $consumer->processMessage($message);
     $fetched = $this->pendingDb->fetchMessageByGatewayOrderId($message['gateway'], $message['order_id']);
     $this->assertNull($fetched, 'Message consumed and not stored in the pending database.');
 }