1
1
<?php
2
+
3
+ declare (strict_types=1 );
4
+
2
5
namespace Codeception \Module ;
3
6
4
7
use Codeception \Exception \ModuleException ;
5
- use Codeception \Module as CodeceptionModule ;
8
+ use Codeception \Lib \Interfaces \RequiresPackage ;
9
+ use Codeception \Module ;
6
10
use Codeception \TestInterface ;
7
11
use Exception ;
8
12
use PhpAmqpLib \Channel \AMQPChannel ;
45
49
*
46
50
* * connection - AMQPStreamConnection - current connection
47
51
*/
48
- class AMQP extends CodeceptionModule
52
+ class AMQP extends Module implements RequiresPackage
49
53
{
54
+ /**
55
+ * @var array
56
+ */
50
57
protected $ config = [
51
58
'host ' => 'localhost ' ,
52
59
'username ' => 'guest ' ,
@@ -58,18 +65,20 @@ class AMQP extends CodeceptionModule
58
65
'queues ' => []
59
66
];
60
67
61
- /**
62
- * @var AMQPStreamConnection
63
- */
64
- public $ connection ;
68
+ public ?AMQPStreamConnection $ connection = null ;
69
+
70
+ protected ?int $ channelId = null ;
65
71
66
72
/**
67
- * @var int
73
+ * @var string[]
68
74
*/
69
- protected $ channelId ;
70
-
71
75
protected $ requiredFields = ['host ' , 'username ' , 'password ' , 'vhost ' ];
72
76
77
+ public function _requires ()
78
+ {
79
+ return [AMQPStreamConnection::class => '"php-amqplib/php-amqplib": "~2.4" ' ];
80
+ }
81
+
73
82
public function _initialize ()
74
83
{
75
84
$ host = $ this ->config ['host ' ];
@@ -80,8 +89,8 @@ public function _initialize()
80
89
81
90
try {
82
91
$ this ->connection = new AMQPStreamConnection ($ host , $ port , $ username , $ password , $ vhost );
83
- } catch (Exception $ e ) {
84
- throw new ModuleException (__CLASS__ , $ e ->getMessage () . ' while establishing connection to MQ server ' );
92
+ } catch (Exception $ exception ) {
93
+ throw new ModuleException (__CLASS__ , $ exception ->getMessage () . ' while establishing connection to MQ server ' );
85
94
}
86
95
}
87
96
@@ -101,14 +110,11 @@ public function _before(TestInterface $test)
101
110
* $I->pushToExchange('exchange.emails', 'thanks');
102
111
* $I->pushToExchange('exchange.emails', new AMQPMessage('Thanks!'));
103
112
* $I->pushToExchange('exchange.emails', new AMQPMessage('Thanks!'), 'severity');
104
- * ?>
105
113
* ```
106
114
*
107
- * @param string $exchange
108
- * @param string|\PhpAmqpLib\Message\AMQPMessage $message
109
- * @param string $routing_key
115
+ * @param string|AMQPMessage $message
110
116
*/
111
- public function pushToExchange ($ exchange , $ message , $ routing_key = null )
117
+ public function pushToExchange (string $ exchange , $ message , string $ routing_key = null ): void
112
118
{
113
119
$ message = $ message instanceof AMQPMessage
114
120
? $ message
@@ -123,13 +129,11 @@ public function pushToExchange($exchange, $message, $routing_key = null)
123
129
* <?php
124
130
* $I->pushToQueue('queue.jobs', 'create user');
125
131
* $I->pushToQueue('queue.jobs', new AMQPMessage('create'));
126
- * ?>
127
132
* ```
128
133
*
129
- * @param string $queue
130
- * @param string|\PhpAmqpLib\Message\AMQPMessage $message
134
+ * @param string|AMQPMessage $message
131
135
*/
132
- public function pushToQueue ($ queue , $ message )
136
+ public function pushToQueue (string $ queue , $ message ): void
133
137
{
134
138
$ message = $ message instanceof AMQPMessage
135
139
? $ message
@@ -152,27 +156,18 @@ public function pushToQueue($queue, $message)
152
156
* )
153
157
* ```
154
158
*
155
- * @param string $exchange
156
- * @param string $type
157
- * @param bool $passive
158
- * @param bool $durable
159
- * @param bool $auto_delete
160
- * @param bool $internal
161
- * @param bool $nowait
162
- * @param array $arguments
163
- * @param int $ticket
164
- * @return mixed|null
159
+ * @return mixed
165
160
*/
166
161
public function declareExchange (
167
- $ exchange ,
168
- $ type ,
169
- $ passive = false ,
170
- $ durable = false ,
171
- $ auto_delete = true ,
172
- $ internal = false ,
173
- $ nowait = false ,
174
- $ arguments = null ,
175
- $ ticket = null
162
+ string $ exchange ,
163
+ string $ type ,
164
+ bool $ passive = false ,
165
+ bool $ durable = false ,
166
+ bool $ auto_delete = true ,
167
+ bool $ internal = false ,
168
+ bool $ nowait = false ,
169
+ array $ arguments = null ,
170
+ int $ ticket = null
176
171
) {
177
172
return $ this ->getChannel ()->exchange_declare (
178
173
$ exchange ,
@@ -199,26 +194,18 @@ public function declareExchange(
199
194
* )
200
195
* ```
201
196
*
202
- * @param string $queue
203
- * @param bool $passive
204
- * @param bool $durable
205
- * @param bool $exclusive
206
- * @param bool $auto_delete
207
- * @param bool $nowait
208
- * @param array $arguments
209
- * @param int $ticket
210
- * @return mixed|null
197
+ * @return mixed
211
198
*/
212
199
public function declareQueue (
213
- $ queue = '' ,
214
- $ passive = false ,
215
- $ durable = false ,
216
- $ exclusive = false ,
217
- $ auto_delete = true ,
218
- $ nowait = false ,
219
- $ arguments = null ,
220
- $ ticket = null
221
- ) {
200
+ string $ queue = '' ,
201
+ bool $ passive = false ,
202
+ bool $ durable = false ,
203
+ bool $ exclusive = false ,
204
+ bool $ auto_delete = true ,
205
+ bool $ nowait = false ,
206
+ array $ arguments = null ,
207
+ int $ ticket = null
208
+ ): ? array {
222
209
return $ this ->getChannel ()->queue_declare (
223
210
$ queue ,
224
211
$ passive ,
@@ -245,21 +232,15 @@ public function declareQueue(
245
232
* )
246
233
* ```
247
234
*
248
- * @param string $queue
249
- * @param string $exchange
250
- * @param string $routing_key
251
- * @param bool $nowait
252
- * @param array $arguments
253
- * @param int $ticket
254
- * @return mixed|null
235
+ * @return mixed
255
236
*/
256
237
public function bindQueueToExchange (
257
- $ queue ,
258
- $ exchange ,
259
- $ routing_key = '' ,
260
- $ nowait = false ,
261
- $ arguments = null ,
262
- $ ticket = null
238
+ string $ queue ,
239
+ string $ exchange ,
240
+ string $ routing_key = '' ,
241
+ bool $ nowait = false ,
242
+ array $ arguments = null ,
243
+ int $ ticket = null
263
244
) {
264
245
return $ this ->getChannel ()->queue_bind (
265
246
$ queue ,
@@ -273,10 +254,8 @@ public function bindQueueToExchange(
273
254
274
255
/**
275
256
* Add a queue to purge list
276
- *
277
- * @param string $queue
278
257
*/
279
- public function scheduleQueueCleanup ($ queue )
258
+ public function scheduleQueueCleanup (string $ queue ): void
280
259
{
281
260
if (!in_array ($ queue , $ this ->config ['queues ' ])) {
282
261
$ this ->config ['queues ' ][] = $ queue ;
@@ -293,21 +272,19 @@ public function scheduleQueueCleanup($queue)
293
272
* <?php
294
273
* $I->pushToQueue('queue.emails', 'Hello, davert');
295
274
* $I->seeMessageInQueueContainsText('queue.emails','davert');
296
- * ?>
297
275
* ```
298
- *
299
- * @param string $queue
300
- * @param string $text
301
276
*/
302
- public function seeMessageInQueueContainsText ($ queue , $ text )
277
+ public function seeMessageInQueueContainsText (string $ queue , string $ text ): void
303
278
{
304
279
$ msg = $ this ->getChannel ()->basic_get ($ queue );
305
- if (!$ msg ) {
280
+ if (!$ msg instanceof AMQPMessage ) {
306
281
$ this ->fail ("Message was not received " );
307
282
}
283
+
308
284
if (!$ msg instanceof AMQPMessage) {
309
285
$ this ->fail ("Received message is not format of AMQPMessage " );
310
286
}
287
+
311
288
$ this ->debugSection ("Message " , $ msg ->body );
312
289
$ this ->assertStringContainsString ($ text , $ msg ->body );
313
290
@@ -316,14 +293,10 @@ public function seeMessageInQueueContainsText($queue, $text)
316
293
317
294
/**
318
295
* Count messages in queue.
319
- *
320
- * @param string $queue
321
- *
322
- * @return int
323
296
*/
324
- public function _countMessage ($ queue )
297
+ public function _countMessage (string $ queue ): int
325
298
{
326
- list ( $ queue , $ messageCount) = $ this ->getChannel ()->queue_declare ($ queue , true );
299
+ [ $ queue , $ messageCount] = $ this ->getChannel ()->queue_declare ($ queue , true );
327
300
return $ messageCount ;
328
301
}
329
302
@@ -334,13 +307,9 @@ public function _countMessage($queue)
334
307
* <?php
335
308
* $I->pushToQueue('queue.emails', 'Hello, davert');
336
309
* $I->seeNumberOfMessagesInQueue('queue.emails',1);
337
- * ?>
338
310
* ```
339
- *
340
- * @param string $queue
341
- * @param int $expected
342
311
*/
343
- public function seeNumberOfMessagesInQueue ($ queue , $ expected )
312
+ public function seeNumberOfMessagesInQueue (string $ queue , int $ expected ): void
344
313
{
345
314
$ messageCount = $ this ->_countMessage ($ queue );
346
315
$ this ->assertEquals ($ expected , $ messageCount );
@@ -354,13 +323,9 @@ public function seeNumberOfMessagesInQueue($queue, $expected)
354
323
* $I->pushToQueue('queue.emails', 'Hello, davert');
355
324
* $I->purgeQueue('queue.emails');
356
325
* $I->seeQueueIsEmpty('queue.emails');
357
- * ?>
358
326
* ```
359
- *
360
- * @param string $queue
361
- * @param int $expected
362
327
*/
363
- public function seeQueueIsEmpty ($ queue )
328
+ public function seeQueueIsEmpty (string $ queue ): void
364
329
{
365
330
$ messageCount = $ this ->_countMessage ($ queue );
366
331
$ this ->assertEquals (0 , $ messageCount );
@@ -373,12 +338,9 @@ public function seeQueueIsEmpty($queue)
373
338
* <?php
374
339
* $I->pushToQueue('queue.emails', 'Hello, davert');
375
340
* $I->dontSeeQueueIsEmpty('queue.emails');
376
- * ?>
377
341
* ```
378
- *
379
- * @param string $queue
380
342
*/
381
- public function dontSeeQueueIsEmpty ($ queue )
343
+ public function dontSeeQueueIsEmpty (string $ queue ): void
382
344
{
383
345
$ messageCount = $ this ->_countMessage ($ queue );
384
346
$ this ->assertNotEquals (0 , $ messageCount );
@@ -390,16 +352,11 @@ public function dontSeeQueueIsEmpty($queue)
390
352
* ``` php
391
353
* <?php
392
354
* $message = $I->grabMessageFromQueue('queue.emails');
393
- * ?>
394
355
* ```
395
- *
396
- * @param string $queue
397
- * @return \PhpAmqpLib\Message\AMQPMessage
398
356
*/
399
- public function grabMessageFromQueue ($ queue )
357
+ public function grabMessageFromQueue (string $ queue ): ? AMQPMessage
400
358
{
401
- $ message = $ this ->getChannel ()->basic_get ($ queue );
402
- return $ message ;
359
+ return $ this ->getChannel ()->basic_get ($ queue );
403
360
}
404
361
405
362
/**
@@ -408,15 +365,12 @@ public function grabMessageFromQueue($queue)
408
365
* ``` php
409
366
* <?php
410
367
* $I->purgeQueue('queue.emails');
411
- * ?>
412
368
* ```
413
- *
414
- * @param string $queueName
415
369
*/
416
- public function purgeQueue ($ queueName = '' )
370
+ public function purgeQueue (string $ queueName = '' ): void
417
371
{
418
372
if (! in_array ($ queueName , $ this ->config ['queues ' ])) {
419
- throw new ModuleException (__CLASS__ , "' $ queueName' doesn't exist in queues config list " );
373
+ throw new ModuleException (__CLASS__ , "' { $ queueName} ' doesn't exist in queues config list " );
420
374
}
421
375
422
376
$ this ->getChannel ()->queue_purge ($ queueName , true );
@@ -428,40 +382,39 @@ public function purgeQueue($queueName = '')
428
382
* ``` php
429
383
* <?php
430
384
* $I->purgeAllQueues();
431
- * ?>
432
385
* ```
433
386
*/
434
- public function purgeAllQueues ()
387
+ public function purgeAllQueues (): void
435
388
{
436
389
$ this ->cleanup ();
437
390
}
438
391
439
- /**
440
- * @return \PhpAmqpLib\Channel\AMQPChannel
441
- */
442
- protected function getChannel ()
392
+ protected function getChannel (): AMQPChannel
443
393
{
444
394
if ($ this ->config ['single_channel ' ] && $ this ->channelId === null ) {
445
395
$ this ->channelId = $ this ->connection ->get_free_channel_id ();
446
396
}
397
+
447
398
return $ this ->connection ->channel ($ this ->channelId );
448
399
}
449
400
450
- protected function cleanup ()
401
+ protected function cleanup (): void
451
402
{
452
403
if (!isset ($ this ->config ['queues ' ])) {
453
404
throw new ModuleException (__CLASS__ , "please set queues for cleanup " );
454
405
}
406
+
455
407
if (!$ this ->connection ) {
456
408
return ;
457
409
}
410
+
458
411
foreach ($ this ->config ['queues ' ] as $ queue ) {
459
412
try {
460
413
$ this ->getChannel ()->queue_purge ($ queue );
461
- } catch (AMQPProtocolChannelException $ e ) {
414
+ } catch (AMQPProtocolChannelException $ exception ) {
462
415
// ignore if exchange/queue doesn't exist and rethrow exception if it's something else
463
- if ($ e ->getCode () !== 404 ) {
464
- throw $ e ;
416
+ if ($ exception ->getCode () !== 404 ) {
417
+ throw $ exception ;
465
418
}
466
419
}
467
420
}
0 commit comments