diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b34483e..591f131 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - php: [5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0] + php: [7.4, 8.0, 8.1] steps: - name: Checkout code diff --git a/composer.json b/composer.json index 8fbe65b..9fcb5ca 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name":"codeception/module-queue", "description":"Queue module for Codeception", "keywords":["codeception", "queue"], - "homepage":"http://codeception.com/", + "homepage":"https://codeception.com/", "type":"library", "license":"MIT", "authors":[ @@ -12,11 +12,13 @@ ], "minimum-stability": "RC", "require": { - "php": ">=5.6.0 <9.0", + "php": "^7.4 | ^8.0", "codeception/codeception": "^4.0" }, "require-dev": { - "pda/pheanstalk": "^3.0 | ^4.0" + "pda/pheanstalk": "^3.0 | ^4.0", + "iron-io/iron_mq": "^2.0 | ^3.0", + "aws/aws-sdk-php": "^3.199" }, "suggest": { "aws/aws-sdk-php": "For Amazon SQS", diff --git a/readme.md b/readme.md index 84af388..20d89a0 100644 --- a/readme.md +++ b/readme.md @@ -1,11 +1,16 @@ -# Queue module for Codeception +# Codeception Module Queue -![Build Status](https://github.com/Codeception/module-queue/workflows/CI/badge.svg) +Queue module for Codeception. + +[![Actions Status](https://github.com/Codeception/module-queue/workflows/CI/badge.svg)](https://github.com/Codeception/module-queue/actions) +[![Latest Stable Version](https://poser.pugx.org/codeception/module-queue/v/stable)](https://github.com/Codeception/module-queue/releases) +[![Total Downloads](https://poser.pugx.org/codeception/module-queue/downloads)](https://packagist.org/packages/codeception/module-queue) +[![License](https://poser.pugx.org/codeception/module-queue/license)](/LICENSE) ## Installation ``` -composer require --dev "codeception/module-queue" +composer require "codeception/module-queue" --dev ``` ## Documentation diff --git a/src/Codeception/Lib/Driver/AmazonSQS.php b/src/Codeception/Lib/Driver/AmazonSQS.php index 42ec4eb..a47441d 100644 --- a/src/Codeception/Lib/Driver/AmazonSQS.php +++ b/src/Codeception/Lib/Driver/AmazonSQS.php @@ -1,21 +1,22 @@ $config['region'], @@ -47,9 +48,9 @@ public function openConnection($config) * Post/Put a message on to the queue server * * @param string $message Message Body to be send - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function addMessageToQueue($message, $queue) + public function addMessageToQueue(string $message, string $queue) { $this->queue->sendMessage([ 'QueueUrl' => $this->getQueueURL($queue), @@ -68,19 +69,19 @@ public function getQueues() $queues = $this->queue->listQueues(['QueueNamePrefix' => ''])->get('QueueUrls'); foreach ($queues as $queue) { $tokens = explode('/', $queue); - $queueNames[] = $tokens[sizeof($tokens) - 1]; + $queueNames[] = $tokens[count($tokens) - 1]; } + return $queueNames; } /** * Count the current number of messages on the queue. * - * @param $queue Queue Name - * + * @param string $queue Queue name * @return int Count */ - public function getMessagesCurrentCountOnQueue($queue) + public function getMessagesCurrentCountOnQueue(string $queue) { return $this->queue->getQueueAttributes([ 'QueueUrl' => $this->getQueueURL($queue), @@ -91,11 +92,10 @@ public function getMessagesCurrentCountOnQueue($queue) /** * Count the total number of messages on the queue. * - * @param $queue Queue Name - * + * @param string $queue Queue name * @return int Count */ - public function getMessagesTotalCountOnQueue($queue) + public function getMessagesTotalCountOnQueue(string $queue) { return $this->queue->getQueueAttributes([ 'QueueUrl' => $this->getQueueURL($queue), @@ -103,7 +103,7 @@ public function getMessagesTotalCountOnQueue($queue) ])->get('Attributes')['ApproximateNumberOfMessages']; } - public function clearQueue($queue) + public function clearQueue(string $queue) { $queueURL = $this->getQueueURL($queue); while (true) { @@ -112,6 +112,7 @@ public function clearQueue($queue) if (!$res->getPath('Messages')) { return; } + foreach ($res->getPath('Messages') as $msg) { $this->queue->deleteMessage([ 'QueueUrl' => $queueURL, @@ -124,19 +125,19 @@ public function clearQueue($queue) /** * Get the queue/tube URL from the queue name (AWS function only) * - * @param $queue Queue Name - * + * @param string $queue Queue name * @return string Queue URL */ - private function getQueueURL($queue) + private function getQueueURL(string $queue) { $queues = $this->queue->listQueues(['QueueNamePrefix' => ''])->get('QueueUrls'); foreach ($queues as $queueURL) { $tokens = explode('/', $queueURL); - if (strtolower($queue) == strtolower($tokens[sizeof($tokens) - 1])) { + if (strtolower($queue) === strtolower($tokens[count($tokens) - 1])) { return $queueURL; } } + throw new TestRuntimeException('queue [' . $queue . '] not found'); } diff --git a/src/Codeception/Lib/Driver/Beanstalk.php b/src/Codeception/Lib/Driver/Beanstalk.php index 8215ddb..9bbe092 100644 --- a/src/Codeception/Lib/Driver/Beanstalk.php +++ b/src/Codeception/Lib/Driver/Beanstalk.php @@ -1,19 +1,19 @@ queue = new Pheanstalk($config['host'], $config['port'], $config['timeout']); } @@ -22,9 +22,9 @@ public function openConnection($config) * Post/Put a message on to the queue server * * @param string $message Message Body to be send - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function addMessageToQueue($message, $queue) + public function addMessageToQueue(string $message, string $queue) { $this->queue->putInTube($queue, $message); } @@ -32,20 +32,19 @@ public function addMessageToQueue($message, $queue) /** * Count the total number of messages on the queue. * - * @param $queue Queue Name - * + * @param string $queue Queue name * @return int Count */ - public function getMessagesTotalCountOnQueue($queue) + public function getMessagesTotalCountOnQueue(string $queue) { try { return $this->queue->statsTube($queue)['total-jobs']; - } catch (ConnectionException $ex) { - \PHPUnit\Framework\Assert::fail("queue [$queue] not found"); + } catch (ConnectionException $connectionException) { + Assert::fail(sprintf('queue [%s] not found', $queue)); } } - public function clearQueue($queue = 'default') + public function clearQueue(string $queue = 'default') { while ($job = $this->queue->reserveFromTube($queue, 0)) { $this->queue->delete($job); @@ -65,16 +64,15 @@ public function getQueues() /** * Count the current number of messages on the queue. * - * @param $queue Queue Name - * + * @param string $queue Queue name * @return int Count */ - public function getMessagesCurrentCountOnQueue($queue) + public function getMessagesCurrentCountOnQueue(string $queue) { try { return $this->queue->statsTube($queue)['current-jobs-ready']; } catch (ConnectionException $e) { - \PHPUnit\Framework\Assert::fail("queue [$queue] not found"); + Assert::fail(sprintf('queue [%s] not found', $queue)); } } diff --git a/src/Codeception/Lib/Driver/Iron.php b/src/Codeception/Lib/Driver/Iron.php index d7cd0cb..904e9e2 100644 --- a/src/Codeception/Lib/Driver/Iron.php +++ b/src/Codeception/Lib/Driver/Iron.php @@ -1,29 +1,30 @@ queue = new \IronMQ([ + $this->queue = new IronMQ([ "token" => $config['token'], "project_id" => $config['project'], "host" => $config['host'] ]); if (!$this->queue) { - \PHPUnit\Framework\Assert::fail('connection failed or timed-out.'); + Assert::fail('connection failed or timed-out.'); } } @@ -31,9 +32,9 @@ public function openConnection($config) * Post/Put a message on to the queue server * * @param string $message Message Body to be send - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function addMessageToQueue($message, $queue) + public function addMessageToQueue(string $message, string $queue) { $this->queue->postMessage($queue, $message); } @@ -56,41 +57,39 @@ public function getQueues() /** * Count the current number of messages on the queue. * - * @param $queue Queue Name - * + * @param string $queue Queue name * @return int Count */ - public function getMessagesCurrentCountOnQueue($queue) + public function getMessagesCurrentCountOnQueue(string $queue) { try { return $this->queue->getQueue($queue)->size; - } catch (\Http_Exception $ex) { - \PHPUnit\Framework\Assert::fail("queue [$queue] not found"); + } catch (Http_Exception $ex) { + Assert::fail("queue [$queue] not found"); } } /** * Count the total number of messages on the queue. * - * @param $queue Queue Name - * + * @param string $queue Queue name * @return int Count */ - public function getMessagesTotalCountOnQueue($queue) + public function getMessagesTotalCountOnQueue(string $queue) { try { return $this->queue->getQueue($queue)->total_messages; - } catch (\Http_Exception $e) { - \PHPUnit\Framework\Assert::fail("queue [$queue] not found"); + } catch (Http_Exception $e) { + Assert::fail("queue [$queue] not found"); } } - public function clearQueue($queue) + public function clearQueue(string $queue) { try { $this->queue->clearQueue($queue); - } catch (\Http_Exception $ex) { - \PHPUnit\Framework\Assert::fail("queue [$queue] not found"); + } catch (Http_Exception $ex) { + Assert::fail("queue [$queue] not found"); } } diff --git a/src/Codeception/Lib/Driver/Pheanstalk4.php b/src/Codeception/Lib/Driver/Pheanstalk4.php index 429cc6c..f355232 100644 --- a/src/Codeception/Lib/Driver/Pheanstalk4.php +++ b/src/Codeception/Lib/Driver/Pheanstalk4.php @@ -1,23 +1,21 @@ queue = Pheanstalk::create($config['host'], $config['port'], $config['timeout']); } @@ -25,7 +23,7 @@ public function openConnection($config) /** * @inheritDoc */ - public function addMessageToQueue($message, $queue) + public function addMessageToQueue(string $message, string $queue) { $this->queue->useTube($queue); $this->queue->put($message); @@ -42,7 +40,7 @@ public function getQueues() /** * @inheritDoc */ - public function getMessagesCurrentCountOnQueue($queue) + public function getMessagesCurrentCountOnQueue(string $queue) { $response = $this->queue->statsTube($queue); return $response->getResponseName() !== ResponseInterface::RESPONSE_NOT_FOUND @@ -53,7 +51,7 @@ public function getMessagesCurrentCountOnQueue($queue) /** * @inheritDoc */ - public function getMessagesTotalCountOnQueue($queue) + public function getMessagesTotalCountOnQueue(string $queue) { $response = $this->queue->statsTube($queue); return $response->getResponseName() !== ResponseInterface::RESPONSE_NOT_FOUND @@ -61,15 +59,17 @@ public function getMessagesTotalCountOnQueue($queue) : 0; } - public function clearQueue($queue) + public function clearQueue(string $queue) { $this->queue->useTube($queue); while (null !== $job = $this->queue->peekBuried()) { $this->queue->delete($job); } + while (null !== $job = $this->queue->peekDelayed()) { $this->queue->delete($job); } + while (null !== $job = $this->queue->peekReady()) { $this->queue->delete($job); } @@ -84,4 +84,4 @@ public function getDefaultConfig() { return ['port' => 11300, 'timeout' => 90, 'host' => 'localhost']; } -} \ No newline at end of file +} diff --git a/src/Codeception/Lib/Interfaces/Queue.php b/src/Codeception/Lib/Interfaces/Queue.php index 9558096..106c0ff 100644 --- a/src/Codeception/Lib/Interfaces/Queue.php +++ b/src/Codeception/Lib/Interfaces/Queue.php @@ -1,23 +1,23 @@ config['type']) { case 'aws': @@ -169,7 +167,7 @@ protected function createQueueDriver() case 'beanstalkd': case 'beanstalkq': // Account for different versions of Pheanstalk. - if (interface_exists(\Pheanstalk\Contract\JobIdInterface::class)) { + if (interface_exists(PheanstalkJobIdInterface::class)) { return new Pheanstalk4(); } else { return new Beanstalk(); @@ -190,12 +188,11 @@ protected function createQueueDriver() * ```php * seeQueueExists('default'); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function seeQueueExists($queue) + public function seeQueueExists(string $queue) { $this->assertContains($queue, $this->queueDriver->getQueues()); } @@ -206,12 +203,11 @@ public function seeQueueExists($queue) * ```php * dontSeeQueueExists('default'); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function dontSeeQueueExists($queue) + public function dontSeeQueueExists(string $queue) { $this->assertNotContains($queue, $this->queueDriver->getQueues()); } @@ -222,12 +218,11 @@ public function dontSeeQueueExists($queue) * ```php * seeEmptyQueue('default'); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function seeEmptyQueue($queue) + public function seeEmptyQueue(string $queue) { $this->assertEquals(0, $this->queueDriver->getMessagesCurrentCountOnQueue($queue)); } @@ -238,12 +233,11 @@ public function seeEmptyQueue($queue) * ```php * dontSeeEmptyQueue('default'); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function dontSeeEmptyQueue($queue) + public function dontSeeEmptyQueue(string $queue) { $this->assertNotEquals(0, $this->queueDriver->getMessagesCurrentCountOnQueue($queue)); } @@ -254,13 +248,12 @@ public function dontSeeEmptyQueue($queue) * ```php * seeQueueHasCurrentCount('default', 10); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name * @param int $expected Number of messages expected */ - public function seeQueueHasCurrentCount($queue, $expected) + public function seeQueueHasCurrentCount(string $queue, int $expected) { $this->assertEquals($expected, $this->queueDriver->getMessagesCurrentCountOnQueue($queue)); } @@ -271,13 +264,12 @@ public function seeQueueHasCurrentCount($queue, $expected) * ```php * dontSeeQueueHasCurrentCount('default', 10); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name * @param int $expected Number of messages expected */ - public function dontSeeQueueHasCurrentCount($queue, $expected) + public function dontSeeQueueHasCurrentCount(string $queue, int $expected) { $this->assertNotEquals($expected, $this->queueDriver->getMessagesCurrentCountOnQueue($queue)); } @@ -288,13 +280,12 @@ public function dontSeeQueueHasCurrentCount($queue, $expected) * ```php * seeQueueHasTotalCount('default', 10); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name * @param int $expected Number of messages expected */ - public function seeQueueHasTotalCount($queue, $expected) + public function seeQueueHasTotalCount(string $queue, int $expected) { $this->assertEquals($expected, $this->queueDriver->getMessagesTotalCountOnQueue($queue)); } @@ -305,13 +296,12 @@ public function seeQueueHasTotalCount($queue, $expected) * ```php * dontSeeQueueHasTotalCount('default', 10); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name * @param int $expected Number of messages expected */ - public function dontSeeQueueHasTotalCount($queue, $expected) + public function dontSeeQueueHasTotalCount(string $queue, int $expected) { $this->assertNotEquals($expected, $this->queueDriver->getMessagesTotalCountOnQueue($queue)); } @@ -324,13 +314,12 @@ public function dontSeeQueueHasTotalCount($queue, $expected) * ```php * addMessageToQueue('this is a messages', 'default'); - * ?> * ``` * * @param string $message Message Body - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function addMessageToQueue($message, $queue) + public function addMessageToQueue(string $message, string $queue) { $this->queueDriver->addMessageToQueue($message, $queue); } @@ -341,12 +330,11 @@ public function addMessageToQueue($message, $queue) * ```php * clearQueue('default'); - * ?> * ``` * - * @param string $queue Queue Name + * @param string $queue Queue name */ - public function clearQueue($queue) + public function clearQueue(string $queue) { $this->queueDriver->clearQueue($queue); } @@ -359,7 +347,6 @@ public function clearQueue($queue) * ```php * grabQueues(); - * ?> * ``` * * @return array List of Queues/Tubes @@ -375,13 +362,12 @@ public function grabQueues() * ```php * grabQueueCurrentCount('default'); - * ?> * ``` - * @param string $queue Queue Name * + * @param string $queue Queue name * @return int Count */ - public function grabQueueCurrentCount($queue) + public function grabQueueCurrentCount(string $queue) { return $this->queueDriver->getMessagesCurrentCountOnQueue($queue); } @@ -392,14 +378,12 @@ public function grabQueueCurrentCount($queue) * ```php * grabQueueTotalCount('default'); - * ?> * ``` * - * @param $queue Queue Name - * + * @param string $queue Queue name * @return int Count */ - public function grabQueueTotalCount($queue) + public function grabQueueTotalCount(string $queue) { return $this->queueDriver->getMessagesTotalCountOnQueue($queue); } diff --git a/tests/unit/Codeception/Module/BeanstalkdTest.php b/tests/unit/Codeception/Module/BeanstalkdTest.php index 90473ae..89ead97 100644 --- a/tests/unit/Codeception/Module/BeanstalkdTest.php +++ b/tests/unit/Codeception/Module/BeanstalkdTest.php @@ -1,8 +1,10 @@ _before(Stub::makeEmpty(TestInterface::class)); try { $module->clearQueue('default'); - } catch (\Throwable $t) { + } catch (Throwable $throwable) { $this->markTestSkipped("Connection failed for: " . print_r($config, true)); } + $initialCount = $module->grabQueueTotalCount('default'); $module->addMessageToQueue('hello world - ' . date('d-m-y'), 'default'); $module->clearQueue('default'); @@ -44,4 +46,4 @@ public function testFlow($config) $module->grabQueues(); } -} \ No newline at end of file +}