198 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\MysqlMq\Model;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test for Queue Management class.
 | 
						|
 */
 | 
						|
class QueueManagementTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var QueueManagement
 | 
						|
     */
 | 
						|
    protected $queueManagement;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var \Magento\Framework\ObjectManagerInterface
 | 
						|
     */
 | 
						|
    protected $objectManager;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
        $this->queueManagement = $this->objectManager->create(QueueManagement::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/MysqlMq/_files/queues.php
 | 
						|
     */
 | 
						|
    public function testMessageReading()
 | 
						|
    {
 | 
						|
        $this->queueManagement->addMessageToQueues('topic1', 'messageBody1', ['queue1']);
 | 
						|
        $this->queueManagement->addMessageToQueues('topic2', 'messageBody2', ['queue1']);
 | 
						|
        $this->queueManagement->addMessageToQueues('topic3', 'messageBody3', ['queue1']);
 | 
						|
        $maxMessagesNumber = 2;
 | 
						|
        $messages = $this->queueManagement->readMessages('queue1', $maxMessagesNumber);
 | 
						|
 | 
						|
        $this->assertCount($maxMessagesNumber, $messages);
 | 
						|
 | 
						|
        $firstMessage = array_shift($messages);
 | 
						|
        $this->assertEquals('topic1', $firstMessage[QueueManagement::MESSAGE_TOPIC]);
 | 
						|
        $this->assertEquals('messageBody1', $firstMessage[QueueManagement::MESSAGE_BODY]);
 | 
						|
        $this->assertEquals('queue1', $firstMessage[QueueManagement::MESSAGE_QUEUE_NAME]);
 | 
						|
        $this->assertEquals(
 | 
						|
            QueueManagement::MESSAGE_STATUS_IN_PROGRESS,
 | 
						|
            $firstMessage[QueueManagement::MESSAGE_STATUS]
 | 
						|
        );
 | 
						|
        $this->assertIsNumeric($firstMessage[QueueManagement::MESSAGE_QUEUE_ID]);
 | 
						|
        $this->assertIsNumeric($firstMessage[QueueManagement::MESSAGE_ID]);
 | 
						|
        $this->assertIsNumeric($firstMessage[QueueManagement::MESSAGE_QUEUE_RELATION_ID]);
 | 
						|
        $this->assertEquals(0, $firstMessage[QueueManagement::MESSAGE_NUMBER_OF_TRIALS]);
 | 
						|
        $this->assertCount(12, date_parse($firstMessage[QueueManagement::MESSAGE_UPDATED_AT]));
 | 
						|
 | 
						|
        $secondMessage = array_shift($messages);
 | 
						|
        $this->assertEquals('topic2', $secondMessage[QueueManagement::MESSAGE_TOPIC]);
 | 
						|
        $this->assertEquals('messageBody2', $secondMessage[QueueManagement::MESSAGE_BODY]);
 | 
						|
        $this->assertEquals('queue1', $secondMessage[QueueManagement::MESSAGE_QUEUE_NAME]);
 | 
						|
        $this->assertEquals(
 | 
						|
            QueueManagement::MESSAGE_STATUS_IN_PROGRESS,
 | 
						|
            $secondMessage[QueueManagement::MESSAGE_STATUS]
 | 
						|
        );
 | 
						|
        $this->assertIsNumeric($secondMessage[QueueManagement::MESSAGE_QUEUE_ID]);
 | 
						|
        $this->assertIsNumeric($secondMessage[QueueManagement::MESSAGE_ID]);
 | 
						|
        $this->assertIsNumeric($secondMessage[QueueManagement::MESSAGE_QUEUE_RELATION_ID]);
 | 
						|
        $this->assertEquals(0, $secondMessage[QueueManagement::MESSAGE_NUMBER_OF_TRIALS]);
 | 
						|
        $this->assertCount(12, date_parse($secondMessage[QueueManagement::MESSAGE_UPDATED_AT]));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/MysqlMq/_files/queues.php
 | 
						|
     */
 | 
						|
    public function testMessageReadingMultipleQueues()
 | 
						|
    {
 | 
						|
        $this->queueManagement->addMessageToQueues('topic1', 'messageBody1', ['queue1']);
 | 
						|
        $this->queueManagement->addMessageToQueues('topic2', 'messageBody2', ['queue1', 'queue2']);
 | 
						|
        $this->queueManagement->addMessageToQueues('topic3', 'messageBody3', ['queue2']);
 | 
						|
 | 
						|
        $maxMessagesNumber = 2;
 | 
						|
        $messages = $this->queueManagement->readMessages('queue1', $maxMessagesNumber);
 | 
						|
        $this->assertCount($maxMessagesNumber, $messages);
 | 
						|
 | 
						|
        $message = array_shift($messages);
 | 
						|
        $this->assertEquals('topic1', $message[QueueManagement::MESSAGE_TOPIC]);
 | 
						|
        $this->assertEquals('messageBody1', $message[QueueManagement::MESSAGE_BODY]);
 | 
						|
        $this->assertEquals('queue1', $message[QueueManagement::MESSAGE_QUEUE_NAME]);
 | 
						|
        $this->assertEquals(
 | 
						|
            QueueManagement::MESSAGE_STATUS_IN_PROGRESS,
 | 
						|
            $message[QueueManagement::MESSAGE_STATUS]
 | 
						|
        );
 | 
						|
 | 
						|
        $message= array_shift($messages);
 | 
						|
        $this->assertEquals('topic2', $message[QueueManagement::MESSAGE_TOPIC]);
 | 
						|
        $this->assertEquals('messageBody2', $message[QueueManagement::MESSAGE_BODY]);
 | 
						|
        $this->assertEquals('queue1', $message[QueueManagement::MESSAGE_QUEUE_NAME]);
 | 
						|
        $this->assertEquals(
 | 
						|
            QueueManagement::MESSAGE_STATUS_IN_PROGRESS,
 | 
						|
            $message[QueueManagement::MESSAGE_STATUS]
 | 
						|
        );
 | 
						|
 | 
						|
        $maxMessagesNumber = 2;
 | 
						|
        $messages = $this->queueManagement->readMessages('queue2', $maxMessagesNumber);
 | 
						|
        $this->assertCount($maxMessagesNumber, $messages);
 | 
						|
 | 
						|
        $message= array_shift($messages);
 | 
						|
        $this->assertEquals('topic2', $message[QueueManagement::MESSAGE_TOPIC]);
 | 
						|
        $this->assertEquals('messageBody2', $message[QueueManagement::MESSAGE_BODY]);
 | 
						|
        $this->assertEquals('queue2', $message[QueueManagement::MESSAGE_QUEUE_NAME]);
 | 
						|
        $this->assertEquals(
 | 
						|
            QueueManagement::MESSAGE_STATUS_IN_PROGRESS,
 | 
						|
            $message[QueueManagement::MESSAGE_STATUS]
 | 
						|
        );
 | 
						|
 | 
						|
        $message = array_shift($messages);
 | 
						|
        $this->assertEquals('topic3', $message[QueueManagement::MESSAGE_TOPIC]);
 | 
						|
        $this->assertEquals('messageBody3', $message[QueueManagement::MESSAGE_BODY]);
 | 
						|
        $this->assertEquals('queue2', $message[QueueManagement::MESSAGE_QUEUE_NAME]);
 | 
						|
        $this->assertEquals(
 | 
						|
            QueueManagement::MESSAGE_STATUS_IN_PROGRESS,
 | 
						|
            $message[QueueManagement::MESSAGE_STATUS]
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/MysqlMq/_files/queues.php
 | 
						|
     */
 | 
						|
    public function testChangingMessageStatus()
 | 
						|
    {
 | 
						|
        $this->queueManagement->addMessageToQueues('topic1', 'messageBody1', ['queue1']);
 | 
						|
        $this->queueManagement->addMessageToQueues('topic2', 'messageBody2', ['queue1']);
 | 
						|
        $this->queueManagement->addMessageToQueues('topic3', 'messageBody3', ['queue1']);
 | 
						|
        $this->queueManagement->addMessageToQueues('topic4', 'messageBody4', ['queue1']);
 | 
						|
 | 
						|
        $maxMessagesNumber = 4;
 | 
						|
        $messages = $this->queueManagement->readMessages('queue1', $maxMessagesNumber);
 | 
						|
        $this->assertCount($maxMessagesNumber, $messages);
 | 
						|
 | 
						|
        $firstMessage = array_shift($messages);
 | 
						|
        $secondMessage = array_shift($messages);
 | 
						|
        $thirdMessage = array_shift($messages);
 | 
						|
        $fourthMessage = array_shift($messages);
 | 
						|
 | 
						|
        $this->queueManagement->changeStatus(
 | 
						|
            [
 | 
						|
                $firstMessage[QueueManagement::MESSAGE_QUEUE_RELATION_ID]
 | 
						|
            ],
 | 
						|
            QueueManagement::MESSAGE_STATUS_ERROR
 | 
						|
        );
 | 
						|
 | 
						|
        $this->queueManagement->changeStatus(
 | 
						|
            [
 | 
						|
                $secondMessage[QueueManagement::MESSAGE_QUEUE_RELATION_ID]
 | 
						|
            ],
 | 
						|
            QueueManagement::MESSAGE_STATUS_COMPLETE
 | 
						|
        );
 | 
						|
 | 
						|
        $this->queueManagement->changeStatus(
 | 
						|
            [
 | 
						|
                $thirdMessage[QueueManagement::MESSAGE_QUEUE_RELATION_ID]
 | 
						|
            ],
 | 
						|
            QueueManagement::MESSAGE_STATUS_NEW
 | 
						|
        );
 | 
						|
 | 
						|
        $this->queueManagement->changeStatus(
 | 
						|
            [
 | 
						|
                $fourthMessage[QueueManagement::MESSAGE_QUEUE_RELATION_ID]
 | 
						|
            ],
 | 
						|
            QueueManagement::MESSAGE_STATUS_RETRY_REQUIRED
 | 
						|
        );
 | 
						|
 | 
						|
        $messages = $this->queueManagement->readMessages('queue1');
 | 
						|
        $this->assertCount(2, $messages);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDataFixture Magento/MysqlMq/_files/queues.php
 | 
						|
     */
 | 
						|
    public function testMessageRetry()
 | 
						|
    {
 | 
						|
        $this->queueManagement->addMessageToQueues('topic1', 'messageBody1', ['queue1']);
 | 
						|
 | 
						|
        $messages = $this->queueManagement->readMessages('queue1', 1);
 | 
						|
        $message = array_shift($messages);
 | 
						|
        $messageRelationId = $message[QueueManagement::MESSAGE_QUEUE_RELATION_ID];
 | 
						|
 | 
						|
        for ($i = 0; $i < 2; $i++) {
 | 
						|
            $this->assertEquals($i, $message[QueueManagement::MESSAGE_NUMBER_OF_TRIALS]);
 | 
						|
            $this->queueManagement->pushToQueueForRetry($message[QueueManagement::MESSAGE_QUEUE_RELATION_ID]);
 | 
						|
            $messages = $this->queueManagement->readMessages('queue1', 1);
 | 
						|
            $message = array_shift($messages);
 | 
						|
            $this->assertEquals($messageRelationId, $message[QueueManagement::MESSAGE_QUEUE_RELATION_ID]);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |