Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 5 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -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":[
Expand All @@ -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",
Expand Down
11 changes: 8 additions & 3 deletions readme.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
41 changes: 21 additions & 20 deletions src/Codeception/Lib/Driver/AmazonSQS.php
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
<?php

declare(strict_types=1);

namespace Codeception\Lib\Driver;

use Aws\Credentials\Credentials;
use Aws\Sqs\SqsClient;
use Codeception\Exception\TestRuntimeException;
use Codeception\Lib\Interfaces\Queue;
use Aws\Sqs\SqsClient;
use Aws\Credentials\Credentials;

class AmazonSQS implements Queue
{
protected $queue;
protected ?SqsClient $queue = null;

/**
* Connect to the queueing server. (AWS, Iron.io and Beanstalkd)
* @param array $config
* @return
*/
public function openConnection($config)
public function openConnection(array $config)
{
$params = [
'region' => $config['region'],
Expand Down Expand Up @@ -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),
Expand All @@ -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),
Expand All @@ -91,19 +92,18 @@ 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),
'AttributeNames' => ['ApproximateNumberOfMessages'],
])->get('Attributes')['ApproximateNumberOfMessages'];
}

public function clearQueue($queue)
public function clearQueue(string $queue)
{
$queueURL = $this->getQueueURL($queue);
while (true) {
Expand All @@ -112,6 +112,7 @@ public function clearQueue($queue)
if (!$res->getPath('Messages')) {
return;
}

foreach ($res->getPath('Messages') as $msg) {
$this->queue->deleteMessage([
'QueueUrl' => $queueURL,
Expand All @@ -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');
}

Expand Down
36 changes: 17 additions & 19 deletions src/Codeception/Lib/Driver/Beanstalk.php
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
<?php

declare(strict_types=1);

namespace Codeception\Lib\Driver;

use Codeception\Lib\Interfaces\Queue;
use Pheanstalk\Pheanstalk;
use Pheanstalk\Exception\ConnectionException;
use Pheanstalk\Pheanstalk;
use PHPUnit\Framework\Assert;

class Beanstalk implements Queue
{
protected ?Pheanstalk $queue = null;

/**
* @var Pheanstalk
*/
protected $queue;

public function openConnection($config)
public function openConnection(array $config)
{
$this->queue = new Pheanstalk($config['host'], $config['port'], $config['timeout']);
}
Expand All @@ -22,30 +22,29 @@ 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);
}

/**
* 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);
Expand All @@ -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));
}
}

Expand Down
47 changes: 23 additions & 24 deletions src/Codeception/Lib/Driver/Iron.php
Original file line number Diff line number Diff line change
@@ -1,39 +1,40 @@
<?php

declare(strict_types=1);

namespace Codeception\Lib\Driver;

use Codeception\Lib\Interfaces\Queue;
use Http_Exception;
use IronMQ;
use PHPUnit\Framework\Assert;

class Iron implements Queue
{
/**
* @var \IronMQ
*/
protected $queue;
protected ?IronMQ $queue = null;

/**
* Connect to the queueing server. (AWS, Iron.io and Beanstalkd)
* @param array $config
* @return
*/
public function openConnection($config)
public function openConnection(array $config)
{
$this->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.');
}
}

/**
* 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);
}
Expand All @@ -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");
}
}

Expand Down
Loading