'iron', * 'host' => 'mq-aws-us-east-1.iron.io', * 'token' => 'your-token', * 'project' => 'your-project-id' * * #### Example (AWS SQS) * * modules: * enabled: [Queue] * config: * Queue: * 'type' => 'aws', * 'key' => 'your-public-key', * 'secret' => 'your-secret-key', * 'region' => 'us-west-2' * * #### Example AWS SQS using profile credentials * * modules: * enabled: [Queue] * config: * Queue: * 'type' => 'aws', * 'profile' => 'project1', //see documentation * 'region' => 'us-west-2' * * #### Example AWS SQS running on Anazon EC2 instance * * modules: * enabled: [Queue] * config: * Queue: * 'type' => 'aws', * 'region' => 'us-west-2' * */ class Queue extends CodeceptionModule { /** * @var \Codeception\Lib\Interfaces\Queue */ public $queueDriver; /** * Setup connection and open/setup the connection with config settings * * @param \Codeception\TestInterface $test */ public function _before(TestInterface $test) { $this->queueDriver->openConnection($this->config); } /** * Provide and override for the config settings and allow custom settings depending on the service being used. */ protected function validateConfig() { $this->queueDriver = $this->createQueueDriver(); $this->requiredFields = $this->queueDriver->getRequiredConfig(); $this->config = array_merge($this->queueDriver->getDefaultConfig(), $this->config); parent::validateConfig(); } /** * @return \Codeception\Lib\Interfaces\Queue * @throws ModuleConfigException */ protected function createQueueDriver() { switch ($this->config['type']) { case 'aws': case 'sqs': case 'aws_sqs': return new AmazonSQS(); case 'iron': case 'iron_mq': return new Iron(); case 'beanstalk': case 'beanstalkd': case 'beanstalkq': return new Beanstalk(); default: throw new ModuleConfigException( __CLASS__, "Unknown queue type {$this->config}; Supported queue types are: aws, iron, beanstalk" ); } } // ----------- SEARCH METHODS BELOW HERE ------------------------// /** * Check if a queue/tube exists on the queueing server. * * ```php * seeQueueExists('default'); * ?> * ``` * * @param string $queue Queue Name */ public function seeQueueExists($queue) { $this->assertContains($queue, $this->queueDriver->getQueues()); } /** * Check if a queue/tube does NOT exist on the queueing server. * * ```php * dontSeeQueueExists('default'); * ?> * ``` * * @param string $queue Queue Name */ public function dontSeeQueueExists($queue) { $this->assertNotContains($queue, $this->queueDriver->getQueues()); } /** * Check if a queue/tube is empty of all messages * * ```php * seeEmptyQueue('default'); * ?> * ``` * * @param string $queue Queue Name */ public function seeEmptyQueue($queue) { $this->assertEquals(0, $this->queueDriver->getMessagesCurrentCountOnQueue($queue)); } /** * Check if a queue/tube is NOT empty of all messages * * ```php * dontSeeEmptyQueue('default'); * ?> * ``` * * @param string $queue Queue Name */ public function dontSeeEmptyQueue($queue) { $this->assertNotEquals(0, $this->queueDriver->getMessagesCurrentCountOnQueue($queue)); } /** * Check if a queue/tube has a given current number of messages * * ```php * seeQueueHasCurrentCount('default', 10); * ?> * ``` * * @param string $queue Queue Name * @param int $expected Number of messages expected */ public function seeQueueHasCurrentCount($queue, $expected) { $this->assertEquals($expected, $this->queueDriver->getMessagesCurrentCountOnQueue($queue)); } /** * Check if a queue/tube does NOT have a given current number of messages * * ```php * dontSeeQueueHasCurrentCount('default', 10); * ?> * ``` * * @param string $queue Queue Name * @param int $expected Number of messages expected */ public function dontSeeQueueHasCurrentCount($queue, $expected) { $this->assertNotEquals($expected, $this->queueDriver->getMessagesCurrentCountOnQueue($queue)); } /** * Check if a queue/tube has a given total number of messages * * ```php * seeQueueHasTotalCount('default', 10); * ?> * ``` * * @param string $queue Queue Name * @param int $expected Number of messages expected */ public function seeQueueHasTotalCount($queue, $expected) { $this->assertEquals($expected, $this->queueDriver->getMessagesTotalCountOnQueue($queue)); } /** * Check if a queue/tube does NOT have a given total number of messages * * ```php * dontSeeQueueHasTotalCount('default', 10); * ?> * ``` * * @param string $queue Queue Name * @param int $expected Number of messages expected */ public function dontSeeQueueHasTotalCount($queue, $expected) { $this->assertNotEquals($expected, $this->queueDriver->getMessagesTotalCountOnQueue($queue)); } // ----------- UTILITY METHODS BELOW HERE -------------------------// /** * Add a message to a queue/tube * * ```php * addMessageToQueue('this is a messages', 'default'); * ?> * ``` * * @param string $message Message Body * @param string $queue Queue Name */ public function addMessageToQueue($message, $queue) { $this->queueDriver->addMessageToQueue($message, $queue); } /** * Clear all messages of the queue/tube * * ```php * clearQueue('default'); * ?> * ``` * * @param string $queue Queue Name */ public function clearQueue($queue) { $this->queueDriver->clearQueue($queue); } // ----------- GRABBER METHODS BELOW HERE -----------------------// /** * Grabber method to get the list of queues/tubes on the server * * ```php * grabQueues(); * ?> * ``` * * @return array List of Queues/Tubes */ public function grabQueues() { return $this->queueDriver->getQueues(); } /** * Grabber method to get the current number of messages on the queue/tube (pending/ready) * * ```php * grabQueueCurrentCount('default'); * ?> * ``` * @param string $queue Queue Name * * @return int Count */ public function grabQueueCurrentCount($queue) { return $this->queueDriver->getMessagesCurrentCountOnQueue($queue); } /** * Grabber method to get the total number of messages on the queue/tube * * ```php * grabQueueTotalCount('default'); * ?> * ``` * * @param $queue Queue Name * * @return int Count */ public function grabQueueTotalCount($queue) { return $this->queueDriver->getMessagesTotalCountOnQueue($queue); } }