3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
+ declare (strict_types=1 );
6
7
namespace Magento \MysqlMq \Model ;
7
8
8
9
/**
@@ -23,27 +24,26 @@ class QueueManagementTest extends \PHPUnit\Framework\TestCase
23
24
protected function setUp ()
24
25
{
25
26
$ 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);
27
28
}
28
29
29
30
/**
30
31
* @magentoDataFixture Magento/MysqlMq/_files/queues.php
31
32
*/
32
- public function testAllFlows ()
33
+ public function testMessageReading ()
33
34
{
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 ' ]);
38
38
$ maxMessagesNumber = 2 ;
39
- $ messages = $ this ->queueManagement ->readMessages ('queue3 ' , $ maxMessagesNumber );
39
+ $ messages = $ this ->queueManagement ->readMessages ('queue1 ' , $ maxMessagesNumber );
40
40
41
41
$ this ->assertCount ($ maxMessagesNumber , $ messages );
42
42
43
43
$ 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 ]);
47
47
$ this ->assertEquals (
48
48
QueueManagement::MESSAGE_STATUS_IN_PROGRESS ,
49
49
$ firstMessage [QueueManagement::MESSAGE_STATUS ]
@@ -55,9 +55,9 @@ public function testAllFlows()
55
55
$ this ->assertCount (12 , date_parse ($ firstMessage [QueueManagement::MESSAGE_UPDATED_AT ]));
56
56
57
57
$ 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 ]);
61
61
$ this ->assertEquals (
62
62
QueueManagement::MESSAGE_STATUS_IN_PROGRESS ,
63
63
$ secondMessage [QueueManagement::MESSAGE_STATUS ]
@@ -67,35 +67,128 @@ public function testAllFlows()
67
67
$ this ->assertTrue (is_numeric ($ secondMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]));
68
68
$ this ->assertEquals (0 , $ secondMessage [QueueManagement::MESSAGE_NUMBER_OF_TRIALS ]);
69
69
$ 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
+ );
70
151
71
- /** Mark one message as complete or failed and make sure it is not displayed in the list of read messages */
72
152
$ this ->queueManagement ->changeStatus (
73
153
[
74
154
$ secondMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]
75
155
],
76
156
QueueManagement::MESSAGE_STATUS_COMPLETE
77
157
);
78
- $ messages = $ this ->queueManagement ->readMessages ('queue3 ' , $ maxMessagesNumber );
79
- $ this ->assertCount (1 , $ messages );
80
158
81
159
$ this ->queueManagement ->changeStatus (
82
160
[
83
- $ firstMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]
161
+ $ thirdMessage [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]
84
162
],
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
86
171
);
87
- $ messages = $ this ->queueManagement ->readMessages ('queue3 ' , $ maxMessagesNumber );
88
- $ this ->assertCount (0 , $ messages );
89
172
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 );
92
185
$ message = array_shift ($ messages );
93
186
$ messageRelationId = $ message [QueueManagement::MESSAGE_QUEUE_RELATION_ID ];
94
187
95
188
for ($ i = 0 ; $ i < 2 ; $ i ++) {
96
189
$ this ->assertEquals ($ i , $ message [QueueManagement::MESSAGE_NUMBER_OF_TRIALS ]);
97
190
$ this ->queueManagement ->pushToQueueForRetry ($ message [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]);
98
- $ messages = $ this ->queueManagement ->readMessages ('queue2 ' , 1 );
191
+ $ messages = $ this ->queueManagement ->readMessages ('queue1 ' , 1 );
99
192
$ message = array_shift ($ messages );
100
193
$ this ->assertEquals ($ messageRelationId , $ message [QueueManagement::MESSAGE_QUEUE_RELATION_ID ]);
101
194
}
0 commit comments