queueDriver->openConnection($this->config); } /** * Provide and override for the config settings and allow custom settings depending on the service being used. */ protected function validateConfig(): void { $this->queueDriver = $this->createQueueDriver(); $this->requiredFields = $this->queueDriver->getRequiredConfig(); $this->config = array_merge($this->queueDriver->getDefaultConfig(), $this->config); parent::validateConfig(); } /** * @throws ModuleConfigException */ protected function createQueueDriver(): \Codeception\Lib\Interfaces\Queue { 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': // Account for different versions of Pheanstalk. if (interface_exists(PheanstalkJobIdInterface::class)) { return new Pheanstalk4(); } else { return new Beanstalk(); } default: throw new ModuleConfigException( __CLASS__, "Unknown queue type {$this->config['type']}; 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(string $queue): void { $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(string $queue): void { $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(string $queue): void { $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(string $queue): void { $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(string $queue, int $expected): void { $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(string $queue, int $expected): void { $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(string $queue, int $expected): void { $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(string $queue, int $expected): void { $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(string $message, string $queue): void { $this->queueDriver->addMessageToQueue($message, $queue); } /** * Clear all messages of the queue/tube * * ```php * clearQueue('default'); * ``` * * @param string $queue Queue name */ public function clearQueue(string $queue): void { $this->queueDriver->clearQueue($queue); } // ----------- GRABBER METHODS BELOW HERE -----------------------// /** * Grabber method to get the list of queues/tubes on the server * * ```php * grabQueues(); * ``` * * @return string[] List of Queues/Tubes */ public function grabQueues(): array { 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(string $queue) { return $this->queueDriver->getMessagesCurrentCountOnQueue($queue); } /** * Grabber method to get the total number of messages on the queue/tube * * ```php * grabQueueTotalCount('default'); * ``` * * @param string $queue Queue name * @return int Count */ public function grabQueueTotalCount(string $queue) { return $this->queueDriver->getMessagesTotalCountOnQueue($queue); } }