33 * Copyright © Magento, Inc. All rights reserved.
44 * See COPYING.txt for license details.
55 */
6+ declare (strict_types=1 );
67namespace Magento \MysqlMq \Model ;
78
89/**
@@ -23,27 +24,26 @@ class QueueManagementTest extends \PHPUnit\Framework\TestCase
2324 protected function setUp ()
2425 {
2526 $ this ->objectManager = \Magento \TestFramework \Helper \Bootstrap::getObjectManager ();
26- $ this ->queueManagement = $ this ->objectManager ->create (\ Magento \ MysqlMq \ Model \ QueueManagement::class);
27+ $ this ->queueManagement = $ this ->objectManager ->create (QueueManagement::class);
2728 }
2829
2930 /**
3031 * @magentoDataFixture Magento/MysqlMq/_files/queues.php
3132 */
32- public function testAllFlows ()
33+ public function testMessageReading ()
3334 {
34- $ this ->queueManagement ->addMessageToQueues ('topic1 ' , 'messageBody1 ' , ['queue1 ' , 'queue2 ' ]);
35- $ this ->queueManagement ->addMessageToQueues ('topic2 ' , 'messageBody2 ' , ['queue2 ' , 'queue3 ' ]);
36- $ this ->queueManagement ->addMessageToQueues ('topic3 ' , 'messageBody3 ' , ['queue1 ' , 'queue3 ' ]);
37- $ this ->queueManagement ->addMessageToQueues ('topic4 ' , 'messageBody4 ' , ['queue1 ' , 'queue2 ' , 'queue3 ' ]);
35+ $ this ->queueManagement ->addMessageToQueues ('topic1 ' , 'messageBody1 ' , ['queue1 ' ]);
36+ $ this ->queueManagement ->addMessageToQueues ('topic2 ' , 'messageBody2 ' , ['queue1 ' ]);
37+ $ this ->queueManagement ->addMessageToQueues ('topic3 ' , 'messageBody3 ' , ['queue1 ' ]);
3838 $ maxMessagesNumber = 2 ;
39- $ messages = $ this ->queueManagement ->readMessages ('queue3 ' , $ maxMessagesNumber );
39+ $ messages = $ this ->queueManagement ->readMessages ('queue1 ' , $ maxMessagesNumber );
4040
4141 $ this ->assertCount ($ maxMessagesNumber , $ messages );
4242
4343 $ firstMessage = array_shift ($ messages );
44- $ this ->assertEquals ('topic2 ' , $ firstMessage [QueueManagement::MESSAGE_TOPIC ]);
45- $ this ->assertEquals ('messageBody2 ' , $ firstMessage [QueueManagement::MESSAGE_BODY ]);
46- $ this ->assertEquals ('queue3 ' , $ firstMessage [QueueManagement::MESSAGE_QUEUE_NAME ]);
44+ $ this ->assertEquals ('topic1 ' , $ firstMessage [QueueManagement::MESSAGE_TOPIC ]);
45+ $ this ->assertEquals ('messageBody1 ' , $ firstMessage [QueueManagement::MESSAGE_BODY ]);
46+ $ this ->assertEquals ('queue1 ' , $ firstMessage [QueueManagement::MESSAGE_QUEUE_NAME ]);
4747 $ this ->assertEquals (
4848 QueueManagement::MESSAGE_STATUS_IN_PROGRESS ,
4949 $ firstMessage [QueueManagement::MESSAGE_STATUS ]
@@ -55,9 +55,9 @@ public function testAllFlows()
5555 $ this ->assertCount (12 , date_parse ($ firstMessage [QueueManagement::MESSAGE_UPDATED_AT ]));
5656
5757 $ secondMessage = array_shift ($ messages );
58- $ this ->assertEquals ('topic3 ' , $ secondMessage [QueueManagement::MESSAGE_TOPIC ]);
59- $ this ->assertEquals ('messageBody3 ' , $ secondMessage [QueueManagement::MESSAGE_BODY ]);
60- $ this ->assertEquals ('queue3 ' , $ secondMessage [QueueManagement::MESSAGE_QUEUE_NAME ]);
58+ $ this ->assertEquals ('topic2 ' , $ secondMessage [QueueManagement::MESSAGE_TOPIC ]);
59+ $ this ->assertEquals ('messageBody2 ' , $ secondMessage [QueueManagement::MESSAGE_BODY ]);
60+ $ this ->assertEquals ('queue1 ' , $ secondMessage [QueueManagement::MESSAGE_QUEUE_NAME ]);
6161 $ this ->assertEquals (
6262 QueueManagement::MESSAGE_STATUS_IN_PROGRESS ,
6363 $ secondMessage [QueueManagement::MESSAGE_STATUS ]
@@ -67,35 +67,128 @@ public function testAllFlows()
6767 $ this ->assertTrue (is_numeric ($ secondMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]));
6868 $ this ->assertEquals (0 , $ secondMessage [QueueManagement::MESSAGE_NUMBER_OF_TRIALS ]);
6969 $ this ->assertCount (12 , date_parse ($ secondMessage [QueueManagement::MESSAGE_UPDATED_AT ]));
70+ }
71+
72+ /**
73+ * @magentoDataFixture Magento/MysqlMq/_files/queues.php
74+ */
75+ public function testMessageReadingMultipleQueues ()
76+ {
77+ $ this ->queueManagement ->addMessageToQueues ('topic1 ' , 'messageBody1 ' , ['queue1 ' ]);
78+ $ this ->queueManagement ->addMessageToQueues ('topic2 ' , 'messageBody2 ' , ['queue1 ' , 'queue2 ' ]);
79+ $ this ->queueManagement ->addMessageToQueues ('topic3 ' , 'messageBody3 ' , ['queue2 ' ]);
80+
81+ $ maxMessagesNumber = 2 ;
82+ $ messages = $ this ->queueManagement ->readMessages ('queue1 ' , $ maxMessagesNumber );
83+ $ this ->assertCount ($ maxMessagesNumber , $ messages );
84+
85+ $ message = array_shift ($ messages );
86+ $ this ->assertEquals ('topic1 ' , $ message [QueueManagement::MESSAGE_TOPIC ]);
87+ $ this ->assertEquals ('messageBody1 ' , $ message [QueueManagement::MESSAGE_BODY ]);
88+ $ this ->assertEquals ('queue1 ' , $ message [QueueManagement::MESSAGE_QUEUE_NAME ]);
89+ $ this ->assertEquals (
90+ QueueManagement::MESSAGE_STATUS_IN_PROGRESS ,
91+ $ message [QueueManagement::MESSAGE_STATUS ]
92+ );
93+
94+ $ message = array_shift ($ messages );
95+ $ this ->assertEquals ('topic2 ' , $ message [QueueManagement::MESSAGE_TOPIC ]);
96+ $ this ->assertEquals ('messageBody2 ' , $ message [QueueManagement::MESSAGE_BODY ]);
97+ $ this ->assertEquals ('queue1 ' , $ message [QueueManagement::MESSAGE_QUEUE_NAME ]);
98+ $ this ->assertEquals (
99+ QueueManagement::MESSAGE_STATUS_IN_PROGRESS ,
100+ $ message [QueueManagement::MESSAGE_STATUS ]
101+ );
102+
103+ $ maxMessagesNumber = 2 ;
104+ $ messages = $ this ->queueManagement ->readMessages ('queue2 ' , $ maxMessagesNumber );
105+ $ this ->assertCount ($ maxMessagesNumber , $ messages );
106+
107+ $ message = array_shift ($ messages );
108+ $ this ->assertEquals ('topic2 ' , $ message [QueueManagement::MESSAGE_TOPIC ]);
109+ $ this ->assertEquals ('messageBody2 ' , $ message [QueueManagement::MESSAGE_BODY ]);
110+ $ this ->assertEquals ('queue2 ' , $ message [QueueManagement::MESSAGE_QUEUE_NAME ]);
111+ $ this ->assertEquals (
112+ QueueManagement::MESSAGE_STATUS_IN_PROGRESS ,
113+ $ message [QueueManagement::MESSAGE_STATUS ]
114+ );
115+
116+ $ message = array_shift ($ messages );
117+ $ this ->assertEquals ('topic3 ' , $ message [QueueManagement::MESSAGE_TOPIC ]);
118+ $ this ->assertEquals ('messageBody3 ' , $ message [QueueManagement::MESSAGE_BODY ]);
119+ $ this ->assertEquals ('queue2 ' , $ message [QueueManagement::MESSAGE_QUEUE_NAME ]);
120+ $ this ->assertEquals (
121+ QueueManagement::MESSAGE_STATUS_IN_PROGRESS ,
122+ $ message [QueueManagement::MESSAGE_STATUS ]
123+ );
124+ }
125+
126+ /**
127+ * @magentoDataFixture Magento/MysqlMq/_files/queues.php
128+ */
129+ public function testChangingMessageStatus ()
130+ {
131+ $ this ->queueManagement ->addMessageToQueues ('topic1 ' , 'messageBody1 ' , ['queue1 ' ]);
132+ $ this ->queueManagement ->addMessageToQueues ('topic2 ' , 'messageBody2 ' , ['queue1 ' ]);
133+ $ this ->queueManagement ->addMessageToQueues ('topic3 ' , 'messageBody3 ' , ['queue1 ' ]);
134+ $ this ->queueManagement ->addMessageToQueues ('topic4 ' , 'messageBody4 ' , ['queue1 ' ]);
135+
136+ $ maxMessagesNumber = 4 ;
137+ $ messages = $ this ->queueManagement ->readMessages ('queue1 ' , $ maxMessagesNumber );
138+ $ this ->assertCount ($ maxMessagesNumber , $ messages );
139+
140+ $ firstMessage = array_shift ($ messages );
141+ $ secondMessage = array_shift ($ messages );
142+ $ thirdMessage = array_shift ($ messages );
143+ $ fourthMessage = array_shift ($ messages );
144+
145+ $ this ->queueManagement ->changeStatus (
146+ [
147+ $ firstMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]
148+ ],
149+ QueueManagement::MESSAGE_STATUS_ERROR
150+ );
70151
71- /** Mark one message as complete or failed and make sure it is not displayed in the list of read messages */
72152 $ this ->queueManagement ->changeStatus (
73153 [
74154 $ secondMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]
75155 ],
76156 QueueManagement::MESSAGE_STATUS_COMPLETE
77157 );
78- $ messages = $ this ->queueManagement ->readMessages ('queue3 ' , $ maxMessagesNumber );
79- $ this ->assertCount (1 , $ messages );
80158
81159 $ this ->queueManagement ->changeStatus (
82160 [
83- $ firstMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]
161+ $ thirdMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]
84162 ],
85- QueueManagement::MESSAGE_STATUS_ERROR
163+ QueueManagement::MESSAGE_STATUS_NEW
164+ );
165+
166+ $ this ->queueManagement ->changeStatus (
167+ [
168+ $ fourthMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]
169+ ],
170+ QueueManagement::MESSAGE_STATUS_RETRY_REQUIRED
86171 );
87- $ messages = $ this ->queueManagement ->readMessages ('queue3 ' , $ maxMessagesNumber );
88- $ this ->assertCount (0 , $ messages );
89172
90- /** Ensure that message for retry is still accessible when reading messages from the queue */
91- $ messages = $ this ->queueManagement ->readMessages ('queue2 ' , 1 );
173+ $ messages = $ this ->queueManagement ->readMessages ('queue1 ' );
174+ $ this ->assertCount (2 , $ messages );
175+ }
176+
177+ /**
178+ * @magentoDataFixture Magento/MysqlMq/_files/queues.php
179+ */
180+ public function testMessageRetry ()
181+ {
182+ $ this ->queueManagement ->addMessageToQueues ('topic1 ' , 'messageBody1 ' , ['queue1 ' ]);
183+
184+ $ messages = $ this ->queueManagement ->readMessages ('queue1 ' , 1 );
92185 $ message = array_shift ($ messages );
93186 $ messageRelationId = $ message [QueueManagement::MESSAGE_QUEUE_RELATION_ID ];
94187
95188 for ($ i = 0 ; $ i < 2 ; $ i ++) {
96189 $ this ->assertEquals ($ i , $ message [QueueManagement::MESSAGE_NUMBER_OF_TRIALS ]);
97190 $ this ->queueManagement ->pushToQueueForRetry ($ message [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]);
98- $ messages = $ this ->queueManagement ->readMessages ('queue2 ' , 1 );
191+ $ messages = $ this ->queueManagement ->readMessages ('queue1 ' , 1 );
99192 $ message = array_shift ($ messages );
100193 $ this ->assertEquals ($ messageRelationId , $ message [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]);
101194 }
0 commit comments