diff --git a/CHANGELOG.md b/CHANGELOG.md index d17f3004d..c445a59f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Change Log +## [0.7.5](https://github.com/php-enqueue/enqueue-dev/tree/0.7.5) (2017-08-16) +[Full Changelog](https://github.com/php-enqueue/enqueue-dev/compare/0.7.4...0.7.5) + +- Bundle disable async events by default [\#169](https://github.com/php-enqueue/enqueue-dev/pull/169) ([makasim](https://github.com/makasim)) +- Delay Strategy Configuration [\#162](https://github.com/php-enqueue/enqueue-dev/pull/162) ([ASKozienko](https://github.com/ASKozienko)) + +## [0.7.4](https://github.com/php-enqueue/enqueue-dev/tree/0.7.4) (2017-08-10) +[Full Changelog](https://github.com/php-enqueue/enqueue-dev/compare/0.7.3...0.7.4) + ## [0.7.3](https://github.com/php-enqueue/enqueue-dev/tree/0.7.3) (2017-08-09) [Full Changelog](https://github.com/php-enqueue/enqueue-dev/compare/0.7.2...0.7.3) diff --git a/docs/bundle/config_reference.md b/docs/bundle/config_reference.md index cfb08fa08..6f684ee42 100644 --- a/docs/bundle/config_reference.md +++ b/docs/bundle/config_reference.md @@ -105,8 +105,8 @@ enqueue: # The receive strategy to be used. We suggest to use basic_consume as it is more performant. Though you need AMQP extension 1.9.1 or higher receive_method: basic_get # One of "basic_get"; "basic_consume" - # The option tells whether RabbitMQ broker has delay plugin installed or not - delay_plugin_installed: false + # The delay strategy to be used. Possible values are "dlx", "delayed_message_plugin" or service id + delay_strategy: dlx amqp_lib: # The connection to AMQP broker set as a string. Other parameters are ignored if set @@ -182,8 +182,8 @@ enqueue: receive_method: basic_get # One of "basic_get"; "basic_consume" heartbeat: 0 - # The option tells whether RabbitMQ broker has delay plugin installed or not - delay_plugin_installed: false + # The delay strategy to be used. Possible values are "dlx", "delayed_message_plugin" or service id + delay_strategy: dlx fs: # The path to a directory where to store messages given as DSN. For example file://tmp/foo @@ -287,8 +287,8 @@ enqueue: receive_method: basic_get # One of "basic_get"; "basic_consume" heartbeat: 0 - # The option tells whether RabbitMQ broker has delay plugin installed or not - delay_plugin_installed: false + # The delay strategy to be used. Possible values are "dlx", "delayed_message_plugin" or service id + delay_strategy: dlx client: traceable_producer: false prefix: enqueue diff --git a/docs/laravel/queues.md b/docs/laravel/queues.md index 2aac7d95d..a49b7832c 100644 --- a/docs/laravel/queues.md +++ b/docs/laravel/queues.md @@ -71,6 +71,9 @@ return [ // connects to localhost 'dsn' => 'amqp://', + + // could be "rabbitmq_dlx", "rabbitmq_delay_plugin", instance of DelayStrategy interface or null + // 'delay_strategy' => 'rabbitmq_dlx' ], ], ]; diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 451898eb0..881e59e28 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -25,10 +25,22 @@ pkg/amqp-ext/Tests + + pkg/amqp-lib/Tests + + pkg/amqp-bunny/Tests + + pkg/amqp-lib/Tests + + + + pkg/amqp-tools/Tests + + pkg/fs/Tests diff --git a/pkg/amqp-bunny/.travis.yml b/pkg/amqp-bunny/.travis.yml index a3f4ced92..09a25c9e0 100644 --- a/pkg/amqp-bunny/.travis.yml +++ b/pkg/amqp-bunny/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php diff --git a/pkg/amqp-bunny/Symfony/RabbitMqAmqpBunnyTransportFactory.php b/pkg/amqp-bunny/Symfony/RabbitMqAmqpBunnyTransportFactory.php index 20de33382..95341671f 100644 --- a/pkg/amqp-bunny/Symfony/RabbitMqAmqpBunnyTransportFactory.php +++ b/pkg/amqp-bunny/Symfony/RabbitMqAmqpBunnyTransportFactory.php @@ -2,6 +2,7 @@ namespace Enqueue\AmqpBunny\Symfony; +use Enqueue\AmqpTools\DelayStrategyTransportFactoryTrait; use Enqueue\Client\Amqp\RabbitMqDriver; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -10,6 +11,8 @@ class RabbitMqAmqpBunnyTransportFactory extends AmqpBunnyTransportFactory { + use DelayStrategyTransportFactoryTrait; + /** * @param string $name */ @@ -27,13 +30,25 @@ public function addConfiguration(ArrayNodeDefinition $builder) $builder ->children() - ->booleanNode('delay_plugin_installed') - ->defaultFalse() - ->info('The option tells whether RabbitMQ broker has delay plugin installed or not') + ->scalarNode('delay_strategy') + ->defaultValue('dlx') + ->info('The delay strategy to be used. Possible values are "dlx", "delayed_message_plugin" or service id') ->end() ; } + /** + * {@inheritdoc} + */ + public function createConnectionFactory(ContainerBuilder $container, array $config) + { + $factoryId = parent::createConnectionFactory($container, $config); + + $this->registerDelayStrategy($container, $config, $factoryId, $this->getName()); + + return $factoryId; + } + /** * {@inheritdoc} */ diff --git a/pkg/amqp-bunny/Tests/Symfony/RabbitMqAmqpBunnyTransportFactoryTest.php b/pkg/amqp-bunny/Tests/Symfony/RabbitMqAmqpBunnyTransportFactoryTest.php index 4dd11871b..555ad777e 100644 --- a/pkg/amqp-bunny/Tests/Symfony/RabbitMqAmqpBunnyTransportFactoryTest.php +++ b/pkg/amqp-bunny/Tests/Symfony/RabbitMqAmqpBunnyTransportFactoryTest.php @@ -58,7 +58,7 @@ public function testShouldAllowAddConfiguration() 'user' => 'guest', 'pass' => 'guest', 'vhost' => '/', - 'delay_plugin_installed' => false, + 'delay_strategy' => 'dlx', 'lazy' => true, 'receive_method' => 'basic_get', 'heartbeat' => 0, @@ -78,7 +78,7 @@ public function testShouldCreateConnectionFactory() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]); $this->assertTrue($container->hasDefinition($serviceId)); @@ -91,7 +91,7 @@ public function testShouldCreateConnectionFactory() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]], $factory->getArguments()); } @@ -108,7 +108,7 @@ public function testShouldCreateContext() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]); $this->assertEquals('enqueue.transport.rabbitmq_amqp_bunny.context', $serviceId); diff --git a/pkg/amqp-bunny/composer.json b/pkg/amqp-bunny/composer.json index 5aa095ef6..0baa84433 100644 --- a/pkg/amqp-bunny/composer.json +++ b/pkg/amqp-bunny/composer.json @@ -17,7 +17,9 @@ "enqueue/test": "^0.7@dev", "enqueue/enqueue": "^0.7@dev", "enqueue/null": "^0.7@dev", - "queue-interop/queue-spec": "^0.5@dev" + "queue-interop/queue-spec": "^0.5@dev", + "symfony/dependency-injection": "^2.8|^3", + "symfony/config": "^2.8|^3" }, "autoload": { "psr-4": { "Enqueue\\AmqpBunny\\": "" }, diff --git a/pkg/amqp-ext/.travis.yml b/pkg/amqp-ext/.travis.yml index 2f48cf85d..658dcabad 100644 --- a/pkg/amqp-ext/.travis.yml +++ b/pkg/amqp-ext/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php diff --git a/pkg/amqp-ext/Symfony/RabbitMqAmqpTransportFactory.php b/pkg/amqp-ext/Symfony/RabbitMqAmqpTransportFactory.php index 11ef70342..8ab200e14 100644 --- a/pkg/amqp-ext/Symfony/RabbitMqAmqpTransportFactory.php +++ b/pkg/amqp-ext/Symfony/RabbitMqAmqpTransportFactory.php @@ -2,6 +2,7 @@ namespace Enqueue\AmqpExt\Symfony; +use Enqueue\AmqpTools\DelayStrategyTransportFactoryTrait; use Enqueue\Client\Amqp\RabbitMqDriver; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -10,6 +11,8 @@ class RabbitMqAmqpTransportFactory extends AmqpTransportFactory { + use DelayStrategyTransportFactoryTrait; + /** * @param string $name */ @@ -27,13 +30,25 @@ public function addConfiguration(ArrayNodeDefinition $builder) $builder ->children() - ->booleanNode('delay_plugin_installed') - ->defaultFalse() - ->info('The option tells whether RabbitMQ broker has delay plugin installed or not') + ->scalarNode('delay_strategy') + ->defaultValue('dlx') + ->info('The delay strategy to be used. Possible values are "dlx", "delayed_message_plugin" or service id') ->end() ; } + /** + * {@inheritdoc} + */ + public function createConnectionFactory(ContainerBuilder $container, array $config) + { + $factoryId = parent::createConnectionFactory($container, $config); + + $this->registerDelayStrategy($container, $config, $factoryId, $this->getName()); + + return $factoryId; + } + /** * {@inheritdoc} */ diff --git a/pkg/amqp-ext/Tests/Symfony/RabbitMqAmqpTransportFactoryTest.php b/pkg/amqp-ext/Tests/Symfony/RabbitMqAmqpTransportFactoryTest.php index 46f530042..31853492a 100644 --- a/pkg/amqp-ext/Tests/Symfony/RabbitMqAmqpTransportFactoryTest.php +++ b/pkg/amqp-ext/Tests/Symfony/RabbitMqAmqpTransportFactoryTest.php @@ -59,7 +59,7 @@ public function testShouldAllowAddConfiguration() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => 'dlx', 'lazy' => true, 'receive_method' => 'basic_get', ], $config); @@ -78,7 +78,7 @@ public function testShouldCreateConnectionFactory() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]); $this->assertTrue($container->hasDefinition($serviceId)); @@ -91,7 +91,7 @@ public function testShouldCreateConnectionFactory() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]], $factory->getArguments()); } @@ -108,7 +108,7 @@ public function testShouldCreateContext() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]); $this->assertEquals('enqueue.transport.rabbitmq_amqp.context', $serviceId); diff --git a/pkg/amqp-lib/.travis.yml b/pkg/amqp-lib/.travis.yml index aaa1849c3..b9cf57fc9 100644 --- a/pkg/amqp-lib/.travis.yml +++ b/pkg/amqp-lib/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php @@ -15,7 +15,7 @@ cache: install: - composer self-update - - composer install --prefer-source --ignore-platform-reqs + - composer install --prefer-source script: - vendor/bin/phpunit --exclude-group=functional diff --git a/pkg/amqp-lib/Symfony/RabbitMqAmqpLibTransportFactory.php b/pkg/amqp-lib/Symfony/RabbitMqAmqpLibTransportFactory.php index 20765c6b1..43a88a2da 100644 --- a/pkg/amqp-lib/Symfony/RabbitMqAmqpLibTransportFactory.php +++ b/pkg/amqp-lib/Symfony/RabbitMqAmqpLibTransportFactory.php @@ -2,6 +2,7 @@ namespace Enqueue\AmqpLib\Symfony; +use Enqueue\AmqpTools\DelayStrategyTransportFactoryTrait; use Enqueue\Client\Amqp\RabbitMqDriver; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -10,6 +11,8 @@ class RabbitMqAmqpLibTransportFactory extends AmqpLibTransportFactory { + use DelayStrategyTransportFactoryTrait; + /** * @param string $name */ @@ -27,13 +30,25 @@ public function addConfiguration(ArrayNodeDefinition $builder) $builder ->children() - ->booleanNode('delay_plugin_installed') - ->defaultFalse() - ->info('The option tells whether RabbitMQ broker has delay plugin installed or not') + ->scalarNode('delay_strategy') + ->defaultValue('dlx') + ->info('The delay strategy to be used. Possible values are "dlx", "delayed_message_plugin" or service id') ->end() ; } + /** + * {@inheritdoc} + */ + public function createConnectionFactory(ContainerBuilder $container, array $config) + { + $factoryId = parent::createConnectionFactory($container, $config); + + $this->registerDelayStrategy($container, $config, $factoryId, $this->getName()); + + return $factoryId; + } + /** * {@inheritdoc} */ diff --git a/pkg/amqp-lib/Tests/AmqpConsumerTest.php b/pkg/amqp-lib/Tests/AmqpConsumerTest.php index f4462e2ad..46bb138e2 100644 --- a/pkg/amqp-lib/Tests/AmqpConsumerTest.php +++ b/pkg/amqp-lib/Tests/AmqpConsumerTest.php @@ -101,7 +101,9 @@ public function testShouldReturnMessageOnReceiveNoWait() { $amqpMessage = new \PhpAmqpLib\Message\AMQPMessage('body'); $amqpMessage->delivery_info['delivery_tag'] = 'delivery-tag'; + $amqpMessage->delivery_info['routing_key'] = 'routing-key'; $amqpMessage->delivery_info['redelivered'] = true; + $amqpMessage->delivery_info['routing_key'] = 'routing-key'; $channel = $this->createChannelMock(); $channel @@ -120,6 +122,7 @@ public function testShouldReturnMessageOnReceiveNoWait() $this->assertInstanceOf(AmqpMessage::class, $message); $this->assertSame('body', $message->getBody()); $this->assertSame('delivery-tag', $message->getDeliveryTag()); + $this->assertSame('routing-key', $message->getRoutingKey()); $this->assertTrue($message->isRedelivered()); } @@ -127,6 +130,7 @@ public function testShouldReturnMessageOnReceiveWithReceiveMethodBasicGet() { $amqpMessage = new \PhpAmqpLib\Message\AMQPMessage('body'); $amqpMessage->delivery_info['delivery_tag'] = 'delivery-tag'; + $amqpMessage->delivery_info['routing_key'] = 'routing-key'; $amqpMessage->delivery_info['redelivered'] = true; $channel = $this->createChannelMock(); @@ -146,6 +150,7 @@ public function testShouldReturnMessageOnReceiveWithReceiveMethodBasicGet() $this->assertInstanceOf(AmqpMessage::class, $message); $this->assertSame('body', $message->getBody()); $this->assertSame('delivery-tag', $message->getDeliveryTag()); + $this->assertSame('routing-key', $message->getRoutingKey()); $this->assertTrue($message->isRedelivered()); } diff --git a/pkg/amqp-lib/Tests/AmqpContextTest.php b/pkg/amqp-lib/Tests/AmqpContextTest.php index 80dee492a..be52235e7 100644 --- a/pkg/amqp-lib/Tests/AmqpContextTest.php +++ b/pkg/amqp-lib/Tests/AmqpContextTest.php @@ -8,6 +8,7 @@ use Interop\Amqp\Impl\AmqpTopic; use PhpAmqpLib\Channel\AMQPChannel; use PhpAmqpLib\Connection\AbstractConnection; +use PhpAmqpLib\Wire\AMQPTable; use PHPUnit\Framework\TestCase; class AmqpContextTest extends TestCase @@ -26,7 +27,7 @@ public function testShouldDeclareTopic() $this->isTrue(), $this->isTrue(), $this->isTrue(), - $this->identicalTo(['key' => 'value']), + $this->isInstanceOf(AMQPTable::class), $this->isNull() ) ; @@ -94,7 +95,7 @@ public function testShouldDeclareQueue() $this->isTrue(), $this->isTrue(), $this->isTrue(), - $this->identicalTo(['key' => 'value']), + $this->isInstanceOf(AMQPTable::class), $this->isNull() ) ; diff --git a/pkg/amqp-lib/Tests/AmqpProducerTest.php b/pkg/amqp-lib/Tests/AmqpProducerTest.php index 1d389bf3c..8ccf419ac 100644 --- a/pkg/amqp-lib/Tests/AmqpProducerTest.php +++ b/pkg/amqp-lib/Tests/AmqpProducerTest.php @@ -2,6 +2,7 @@ namespace Enqueue\AmqpLib\Tests; +use Enqueue\AmqpLib\AmqpContext; use Enqueue\AmqpLib\AmqpProducer; use Enqueue\Test\ClassExtensionTrait; use Interop\Amqp\Impl\AmqpMessage; @@ -23,7 +24,7 @@ class AmqpProducerTest extends TestCase public function testCouldBeConstructedWithRequiredArguments() { - new AmqpProducer($this->createAmqpChannelMock()); + new AmqpProducer($this->createAmqpChannelMock(), $this->createContextMock()); } public function testShouldImplementPsrProducerInterface() @@ -33,7 +34,7 @@ public function testShouldImplementPsrProducerInterface() public function testShouldThrowExceptionWhenDestinationTypeIsInvalid() { - $producer = new AmqpProducer($this->createAmqpChannelMock()); + $producer = new AmqpProducer($this->createAmqpChannelMock(), $this->createContextMock()); $this->expectException(InvalidDestinationException::class); $this->expectExceptionMessage('The destination must be an instance of Interop\Amqp\AmqpQueue but got'); @@ -43,7 +44,7 @@ public function testShouldThrowExceptionWhenDestinationTypeIsInvalid() public function testShouldThrowExceptionWhenMessageTypeIsInvalid() { - $producer = new AmqpProducer($this->createAmqpChannelMock()); + $producer = new AmqpProducer($this->createAmqpChannelMock(), $this->createContextMock()); $this->expectException(InvalidMessageException::class); $this->expectExceptionMessage('The message must be an instance of Interop\Amqp\AmqpMessage but it is'); @@ -70,7 +71,7 @@ public function testShouldPublishMessageToTopic() $message = new AmqpMessage('body'); $message->setRoutingKey('routing-key'); - $producer = new AmqpProducer($channel); + $producer = new AmqpProducer($channel, $this->createContextMock()); $producer->send($topic, $message); $this->assertEquals('body', $amqpMessage->getBody()); @@ -92,7 +93,7 @@ public function testShouldPublishMessageToQueue() $queue = new AmqpQueue('queue'); - $producer = new AmqpProducer($channel); + $producer = new AmqpProducer($channel, $this->createContextMock()); $producer->send($queue, new AmqpMessage('body')); $this->assertEquals('body', $amqpMessage->getBody()); @@ -111,7 +112,7 @@ public function testShouldSetMessageHeaders() })) ; - $producer = new AmqpProducer($channel); + $producer = new AmqpProducer($channel, $this->createContextMock()); $producer->send(new AmqpTopic('name'), new AmqpMessage('body', [], ['content_type' => 'text/plain'])); $this->assertEquals(['content_type' => 'text/plain'], $amqpMessage->get_properties()); @@ -130,7 +131,7 @@ public function testShouldSetMessageProperties() })) ; - $producer = new AmqpProducer($channel); + $producer = new AmqpProducer($channel, $this->createContextMock()); $producer->send(new AmqpTopic('name'), new AmqpMessage('body', ['key' => 'value'])); $properties = $amqpMessage->get_properties(); @@ -163,4 +164,12 @@ private function createAmqpChannelMock() { return $this->createMock(AMQPChannel::class); } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject|AmqpContext + */ + private function createContextMock() + { + return $this->createMock(AmqpContext::class); + } } diff --git a/pkg/amqp-lib/Tests/Spec/AmqpSendToTopicAndReceiveFromQueueWithBasicConsumeMethodTest.php b/pkg/amqp-lib/Tests/Spec/AmqpSendToTopicAndReceiveFromQueueWithBasicConsumeMethodTest.php index 5947a7cd1..0c6eb8cd2 100644 --- a/pkg/amqp-lib/Tests/Spec/AmqpSendToTopicAndReceiveFromQueueWithBasicConsumeMethodTest.php +++ b/pkg/amqp-lib/Tests/Spec/AmqpSendToTopicAndReceiveFromQueueWithBasicConsumeMethodTest.php @@ -3,7 +3,7 @@ namespace Enqueue\AmqpLib\Tests\Spec; use Enqueue\AmqpLib\AmqpConnectionFactory; -use Enqueue\AmqpLib\AmqpContext; +use Interop\Amqp\AmqpContext; use Interop\Amqp\AmqpTopic; use Interop\Amqp\Impl\AmqpBind; use Interop\Queue\PsrContext; @@ -14,6 +14,8 @@ */ class AmqpSendToTopicAndReceiveFromQueueWithBasicConsumeMethodTest extends SendToTopicAndReceiveFromQueueSpec { + private $topic; + /** * {@inheritdoc} */ @@ -31,13 +33,17 @@ protected function createContext() */ protected function createQueue(PsrContext $context, $queueName) { - $queueName .= '_basic_consume'; + $queue = $context->createQueue('send_to_topic_and_receive_from_queue_spec_basic_consume'); + + try { + $context->deleteQueue($queue); + } catch (\Exception $e) { + } - $queue = $context->createQueue($queueName); $context->declareQueue($queue); $context->purgeQueue($queue); - $context->bind(new AmqpBind($context->createTopic($queueName), $queue)); + $context->bind(new AmqpBind($this->topic, $queue)); return $queue; } @@ -49,13 +55,17 @@ protected function createQueue(PsrContext $context, $queueName) */ protected function createTopic(PsrContext $context, $topicName) { - $topicName .= '_basic_consume'; - - $topic = $context->createTopic($topicName); + $topic = $context->createTopic('send_to_topic_and_receive_from_queue_spec_basic_consume'); $topic->setType(AmqpTopic::TYPE_FANOUT); $topic->addFlag(AmqpTopic::FLAG_DURABLE); + + try { + $context->deleteTopic($topic); + } catch (\Exception $e) { + } + $context->declareTopic($topic); - return $topic; + return $this->topic = $topic; } } diff --git a/pkg/amqp-lib/Tests/Symfony/RabbitMqAmqpLibTransportFactoryTest.php b/pkg/amqp-lib/Tests/Symfony/RabbitMqAmqpLibTransportFactoryTest.php index 22b1b4354..b86a57bdf 100644 --- a/pkg/amqp-lib/Tests/Symfony/RabbitMqAmqpLibTransportFactoryTest.php +++ b/pkg/amqp-lib/Tests/Symfony/RabbitMqAmqpLibTransportFactoryTest.php @@ -58,7 +58,7 @@ public function testShouldAllowAddConfiguration() 'user' => 'guest', 'pass' => 'guest', 'vhost' => '/', - 'delay_plugin_installed' => false, + 'delay_strategy' => 'dlx', 'lazy' => true, 'receive_method' => 'basic_get', 'connection_timeout' => 3.0, @@ -85,7 +85,7 @@ public function testShouldCreateConnectionFactory() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]); $this->assertTrue($container->hasDefinition($serviceId)); @@ -98,7 +98,7 @@ public function testShouldCreateConnectionFactory() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]], $factory->getArguments()); } @@ -115,7 +115,7 @@ public function testShouldCreateContext() 'pass' => 'guest', 'vhost' => '/', 'persisted' => false, - 'delay_plugin_installed' => false, + 'delay_strategy' => null, ]); $this->assertEquals('enqueue.transport.rabbitmq_amqp_lib.context', $serviceId); diff --git a/pkg/amqp-tools/DelayStrategyTransportFactoryTrait.php b/pkg/amqp-tools/DelayStrategyTransportFactoryTrait.php new file mode 100644 index 000000000..dbcb71f5a --- /dev/null +++ b/pkg/amqp-tools/DelayStrategyTransportFactoryTrait.php @@ -0,0 +1,37 @@ +getDefinition($factoryId); + + if (false == is_a($factory->getClass(), DelayStrategyAware::class, true)) { + throw new \LogicException('Connection factory does not support delays'); + } + + if (strtolower($config['delay_strategy']) === 'dlx') { + $delayId = sprintf('enqueue.client.%s.delay_strategy', $factoryName); + $container->register($delayId, RabbitMqDlxDelayStrategy::class); + + $factory->addMethodCall('setDelayStrategy', [new Reference($delayId)]); + } elseif (strtolower($config['delay_strategy']) === 'delayed_message_plugin') { + $delayId = sprintf('enqueue.client.%s.delay_strategy', $factoryName); + $container->register($delayId, RabbitMqDelayPluginDelayStrategy::class); + + $factory->addMethodCall('setDelayStrategy', [new Reference($delayId)]); + } else { + $factory->addMethodCall('setDelayStrategy', [new Reference($config['delay_strategy'])]); + } + } + } +} diff --git a/pkg/amqp-tools/Tests/DelayStrategyTransportFactoryTraitTest.php b/pkg/amqp-tools/Tests/DelayStrategyTransportFactoryTraitTest.php new file mode 100644 index 000000000..879059497 --- /dev/null +++ b/pkg/amqp-tools/Tests/DelayStrategyTransportFactoryTraitTest.php @@ -0,0 +1,84 @@ +register('factoryId', DelayStrategyTransportFactoryImpl::class); + + $trait = new DelayStrategyTransportFactoryTraitImpl(); + $trait->registerDelayStrategy($container, ['delay_strategy' => 'dlx'], 'factoryId', 'name'); + + $factory = $container->getDefinition('factoryId'); + + $calls = $factory->getMethodCalls(); + + $this->assertSame('setDelayStrategy', $calls[0][0]); + $this->assertInstanceOf(Reference::class, $calls[0][1][0]); + $this->assertSame('enqueue.client.name.delay_strategy', (string) $calls[0][1][0]); + + $strategy = $container->getDefinition('enqueue.client.name.delay_strategy'); + + $this->assertSame(RabbitMqDlxDelayStrategy::class, $strategy->getClass()); + } + + public function testShouldRegisterDelayMessagePluginStrategy() + { + $container = new ContainerBuilder(); + $container->register('factoryId', DelayStrategyTransportFactoryImpl::class); + + $trait = new DelayStrategyTransportFactoryTraitImpl(); + $trait->registerDelayStrategy($container, ['delay_strategy' => 'delayed_message_plugin'], 'factoryId', 'name'); + + $factory = $container->getDefinition('factoryId'); + + $calls = $factory->getMethodCalls(); + + $this->assertSame('setDelayStrategy', $calls[0][0]); + $this->assertInstanceOf(Reference::class, $calls[0][1][0]); + $this->assertSame('enqueue.client.name.delay_strategy', (string) $calls[0][1][0]); + + $strategy = $container->getDefinition('enqueue.client.name.delay_strategy'); + + $this->assertSame(RabbitMqDelayPluginDelayStrategy::class, $strategy->getClass()); + } + + public function testShouldRegisterDelayStrategyService() + { + $container = new ContainerBuilder(); + $container->register('factoryId', DelayStrategyTransportFactoryImpl::class); + + $trait = new DelayStrategyTransportFactoryTraitImpl(); + $trait->registerDelayStrategy($container, ['delay_strategy' => 'service_name'], 'factoryId', 'name'); + + $factory = $container->getDefinition('factoryId'); + + $calls = $factory->getMethodCalls(); + + $this->assertSame('setDelayStrategy', $calls[0][0]); + $this->assertInstanceOf(Reference::class, $calls[0][1][0]); + $this->assertSame('service_name', (string) $calls[0][1][0]); + } +} + +class DelayStrategyTransportFactoryTraitImpl +{ + use DelayStrategyTransportFactoryTrait; +} + +class DelayStrategyTransportFactoryImpl implements DelayStrategyAware +{ + use DelayStrategyAwareTrait; +} diff --git a/pkg/async-event-dispatcher/.travis.yml b/pkg/async-event-dispatcher/.travis.yml index aaa1849c3..b9cf57fc9 100644 --- a/pkg/async-event-dispatcher/.travis.yml +++ b/pkg/async-event-dispatcher/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php @@ -15,7 +15,7 @@ cache: install: - composer self-update - - composer install --prefer-source --ignore-platform-reqs + - composer install --prefer-source script: - vendor/bin/phpunit --exclude-group=functional diff --git a/pkg/async-event-dispatcher/Tests/Functional/UseCasesTest.php b/pkg/async-event-dispatcher/Tests/Functional/UseCasesTest.php index 1878d67b4..1c2768d51 100644 --- a/pkg/async-event-dispatcher/Tests/Functional/UseCasesTest.php +++ b/pkg/async-event-dispatcher/Tests/Functional/UseCasesTest.php @@ -18,6 +18,9 @@ use Symfony\Component\EventDispatcher\GenericEvent; use Symfony\Component\Filesystem\Filesystem; +/** + * @group functional + */ class UseCasesTest extends TestCase { /** diff --git a/pkg/async-event-dispatcher/composer.json b/pkg/async-event-dispatcher/composer.json index d243aba67..f34253cff 100644 --- a/pkg/async-event-dispatcher/composer.json +++ b/pkg/async-event-dispatcher/composer.json @@ -6,7 +6,7 @@ "license": "MIT", "require": { "php": ">=5.6", - "queue-interop/queue-interop": "^0.6@dev", + "enqueue/enqueue": "^0.7@dev", "symfony/event-dispatcher": "^2.8|^3" }, "require-dev": { @@ -15,7 +15,9 @@ "symfony/config": "^2.8|^3", "symfony/http-kernel": "^2.8|^3", "symfony/filesystem": "^2.8|^3", - "enqueue/null": "^0.7@dev" + "enqueue/null": "^0.7@dev", + "enqueue/fs": "^0.7@dev", + "enqueue/test": "^0.7@dev" }, "suggest": { "symfony/dependency-injection": "^2.8|^3 If you'd like to use async event dispatcher container extension." @@ -26,7 +28,6 @@ "/Tests/" ] }, - "minimum-stability": "dev", "extra": { "branch-alias": { "dev-master": "0.7.x-dev" diff --git a/pkg/dbal/.travis.yml b/pkg/dbal/.travis.yml index 42374ddc7..b9cf57fc9 100644 --- a/pkg/dbal/.travis.yml +++ b/pkg/dbal/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php diff --git a/pkg/enqueue-bundle/.travis.yml b/pkg/enqueue-bundle/.travis.yml index aaa1849c3..566e0af94 100644 --- a/pkg/enqueue-bundle/.travis.yml +++ b/pkg/enqueue-bundle/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php @@ -14,8 +14,9 @@ cache: - $HOME/.composer/cache install: + - php Tests/fix_composer_json.php - composer self-update - - composer install --prefer-source --ignore-platform-reqs + - composer install --prefer-source script: - vendor/bin/phpunit --exclude-group=functional diff --git a/pkg/enqueue-bundle/DependencyInjection/Configuration.php b/pkg/enqueue-bundle/DependencyInjection/Configuration.php index c02b0c508..c5c0877f5 100644 --- a/pkg/enqueue-bundle/DependencyInjection/Configuration.php +++ b/pkg/enqueue-bundle/DependencyInjection/Configuration.php @@ -52,6 +52,7 @@ public function getConfigTreeBuilder() ->end()->end() ->booleanNode('job')->defaultFalse()->end() ->arrayNode('async_events') + ->addDefaultsIfNotSet() ->canBeEnabled() ->end() ->arrayNode('extensions')->addDefaultsIfNotSet()->children() diff --git a/pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php b/pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php index 18a5e0207..f138d60fa 100644 --- a/pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php +++ b/pkg/enqueue-bundle/DependencyInjection/EnqueueExtension.php @@ -118,7 +118,7 @@ public function load(array $configs, ContainerBuilder $container) $loader->load('job.yml'); } - if (isset($config['async_events']['enabled'])) { + if ($config['async_events']['enabled']) { $extension = new AsyncEventDispatcherExtension(); $extension->load([[ 'context_service' => 'enqueue.transport.default.context', diff --git a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php index bd3162a43..53e54819d 100644 --- a/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php +++ b/pkg/enqueue-bundle/Tests/Unit/DependencyInjection/ConfigurationTest.php @@ -376,4 +376,51 @@ public function testReplyExtensionCouldBeDisabled() ], ], $config); } + + public function testShouldDisableAsyncEventsByDefault() + { + $configuration = new Configuration([]); + + $processor = new Processor(); + $config = $processor->processConfiguration($configuration, [[ + 'transport' => [], + ]]); + + $this->assertArraySubset([ + 'async_events' => [ + 'enabled' => false, + ], + ], $config); + } + + public function testShouldAllowEnableAsyncEvents() + { + $configuration = new Configuration([]); + + $processor = new Processor(); + + $config = $processor->processConfiguration($configuration, [[ + 'transport' => [], + 'async_events' => true, + ]]); + + $this->assertArraySubset([ + 'async_events' => [ + 'enabled' => true, + ], + ], $config); + + $config = $processor->processConfiguration($configuration, [[ + 'transport' => [], + 'async_events' => [ + 'enabled' => true, + ], + ]]); + + $this->assertArraySubset([ + 'async_events' => [ + 'enabled' => true, + ], + ], $config); + } } diff --git a/pkg/enqueue-bundle/Tests/fix_composer_json.php b/pkg/enqueue-bundle/Tests/fix_composer_json.php new file mode 100644 index 000000000..fc430e276 --- /dev/null +++ b/pkg/enqueue-bundle/Tests/fix_composer_json.php @@ -0,0 +1,9 @@ +createTransportMessage($message); $destination = $this->createQueue($queueName); + $producer = $this->context->createProducer(); if ($message->getDelay()) { - $destination = $this->createDelayedTopic($destination); + $producer->setDeliveryDelay($message->getDelay() * 1000); } - $this->context->createProducer()->send($destination, $transportMessage); + $producer->send($destination, $transportMessage); } /** @@ -117,11 +114,11 @@ public function createTransportMessage(Message $message) } if ($message->getDelay()) { - if (false == $this->config->getTransportOption('delay_plugin_installed', false)) { - throw new LogicException('The message delaying is not supported. In order to use delay feature install RabbitMQ delay plugin.'); + if (false == $this->config->getTransportOption('delay_strategy', false)) { + throw new LogicException('The message delaying is not supported. In order to use delay feature install RabbitMQ delay strategy.'); } - $transportMessage->setProperty('x-delay', (string) ($message->getDelay() * 1000)); + $transportMessage->setProperty('enqueue-delay', $message->getDelay() * 1000); } return $transportMessage; @@ -144,9 +141,9 @@ public function createClientMessage(PsrMessage $message) $clientMessage->setPriority($clientPriority); } - if ($delay = $message->getProperty('x-delay')) { + if ($delay = $message->getProperty('enqueue-delay')) { if (false == is_numeric($delay)) { - throw new \LogicException(sprintf('x-delay header is not numeric. "%s"', $delay)); + throw new \LogicException(sprintf('"enqueue-delay" header is not numeric. "%s"', $delay)); } $clientMessage->setDelay((int) ((int) $delay) / 1000); @@ -154,53 +151,4 @@ public function createClientMessage(PsrMessage $message) return $clientMessage; } - - /** - * {@inheritdoc} - */ - public function setupBroker(LoggerInterface $logger = null) - { - $logger = $logger ?: new NullLogger(); - - parent::setupBroker($logger); - - $log = function ($text, ...$args) use ($logger) { - $logger->debug(sprintf('[RabbitMqDriver] '.$text, ...$args)); - }; - - // setup delay exchanges - if ($this->config->getTransportOption('delay_plugin_installed', false)) { - foreach ($this->queueMetaRegistry->getQueuesMeta() as $meta) { - $queue = $this->createQueue($meta->getClientName()); - - $delayTopic = $this->createDelayedTopic($queue); - - $log('Declare delay exchange: %s', $delayTopic->getTopicName()); - $this->context->declareTopic($delayTopic); - - $log('Bind processor queue to delay exchange: %s -> %s', $queue->getQueueName(), $delayTopic->getTopicName()); - $this->context->bind(new AmqpBind($delayTopic, $queue, $queue->getQueueName())); - } - } - } - - /** - * @param AmqpQueue $queue - * - * @return AmqpTopic - */ - private function createDelayedTopic(AmqpQueue $queue) - { - $queueName = $queue->getQueueName(); - - // in order to use delay feature make sure the rabbitmq_delayed_message_exchange plugin is installed. - $delayTopic = $this->context->createTopic($queueName.'.delayed'); - $delayTopic->setType('x-delayed-message'); - $delayTopic->addFlag(AmqpTopic::FLAG_DURABLE); - $delayTopic->setArguments([ - 'x-delayed-type' => 'direct', - ]); - - return $delayTopic; - } } diff --git a/pkg/enqueue/Tests/Client/Amqp/RabbitMqDriverTest.php b/pkg/enqueue/Tests/Client/Amqp/RabbitMqDriverTest.php index 698fc5c3e..3b67ef52e 100644 --- a/pkg/enqueue/Tests/Client/Amqp/RabbitMqDriverTest.php +++ b/pkg/enqueue/Tests/Client/Amqp/RabbitMqDriverTest.php @@ -97,7 +97,7 @@ public function testShouldConvertTransportMessageToClientMessage() $transportMessage->setBody('body'); $transportMessage->setHeaders(['hkey' => 'hval']); $transportMessage->setProperties(['key' => 'val']); - $transportMessage->setProperty('x-delay', '5678000'); + $transportMessage->setProperty('enqueue-delay', '5678000'); $transportMessage->setHeader('content_type', 'ContentType'); $transportMessage->setHeader('expiration', '12345000'); $transportMessage->setHeader('priority', 3); @@ -108,7 +108,7 @@ public function testShouldConvertTransportMessageToClientMessage() $driver = new RabbitMqDriver( $this->createAmqpContextMock(), - new Config('', '', '', '', '', '', ['delay_plugin_installed' => true]), + new Config('', '', '', '', '', '', ['delay_strategy' => 'dlx']), $this->createDummyQueueMetaRegistry() ); @@ -128,7 +128,7 @@ public function testShouldConvertTransportMessageToClientMessage() ], $clientMessage->getHeaders()); $this->assertSame([ 'key' => 'val', - 'x-delay' => '5678000', + 'enqueue-delay' => '5678000', ], $clientMessage->getProperties()); $this->assertSame('MessageId', $clientMessage->getMessageId()); $this->assertSame(12345, $clientMessage->getExpire()); @@ -143,7 +143,7 @@ public function testShouldConvertTransportMessageToClientMessage() public function testShouldThrowExceptionIfXDelayIsNotNumeric() { $transportMessage = new AmqpMessage(); - $transportMessage->setProperty('x-delay', 'is-not-numeric'); + $transportMessage->setProperty('enqueue-delay', 'is-not-numeric'); $driver = new RabbitMqDriver( $this->createAmqpContextMock(), @@ -152,7 +152,7 @@ public function testShouldThrowExceptionIfXDelayIsNotNumeric() ); $this->expectException(\LogicException::class); - $this->expectExceptionMessage('x-delay header is not numeric. "is-not-numeric"'); + $this->expectExceptionMessage('"enqueue-delay" header is not numeric. "is-not-numeric"'); $driver->createClientMessage($transportMessage); } @@ -239,7 +239,7 @@ public function testShouldConvertClientMessageToTransportMessage() $driver = new RabbitMqDriver( $context, - new Config('', '', '', '', '', '', ['delay_plugin_installed' => true]), + new Config('', '', '', '', '', '', ['delay_strategy' => 'dlx']), $this->createDummyQueueMetaRegistry() ); @@ -260,7 +260,7 @@ public function testShouldConvertClientMessageToTransportMessage() ], $transportMessage->getHeaders()); $this->assertSame([ 'key' => 'val', - 'x-delay' => '432000', + 'enqueue-delay' => 432000, ], $transportMessage->getProperties()); $this->assertSame('MessageId', $transportMessage->getMessageId()); $this->assertSame(1000, $transportMessage->getTimestamp()); @@ -282,12 +282,12 @@ public function testThrowIfDelayNotSupportedOnConvertClientMessageToTransportMes $driver = new RabbitMqDriver( $context, - new Config('', '', '', '', '', '', ['delay_plugin_installed' => false]), + new Config('', '', '', '', '', '', ['delay_strategy' => null]), $this->createDummyQueueMetaRegistry() ); $this->expectException(\LogicException::class); - $this->expectExceptionMessage('The message delaying is not supported. In order to use delay feature install RabbitMQ delay plugin.'); + $this->expectExceptionMessage('The message delaying is not supported. In order to use delay feature install RabbitMQ delay strategy.'); $driver->createTransportMessage($clientMessage); } @@ -386,17 +386,21 @@ public function testShouldSendMessageToProcessor() $driver->sendToProcessor($message); } - public function testShouldSendMessageToDelayExchangeIfDelaySet() + public function testShouldSendMessageToProcessorWithDeliveryDelay() { $queue = new AmqpQueue(''); - $delayTopic = new AmqpTopic(''); $transportMessage = new AmqpMessage(); $producer = $this->createAmqpProducerMock(); $producer ->expects($this->once()) ->method('send') - ->with($this->identicalTo($delayTopic), $this->identicalTo($transportMessage)) + ->with($this->identicalTo($queue), $this->identicalTo($transportMessage)) + ; + $producer + ->expects($this->once()) + ->method('setDeliveryDelay') + ->with($this->identicalTo(10000)) ; $context = $this->createAmqpContextMock(); $context @@ -404,11 +408,6 @@ public function testShouldSendMessageToDelayExchangeIfDelaySet() ->method('createQueue') ->willReturn($queue) ; - $context - ->expects($this->once()) - ->method('createTopic') - ->willReturn($delayTopic) - ; $context ->expects($this->once()) ->method('createProducer') @@ -422,7 +421,7 @@ public function testShouldSendMessageToDelayExchangeIfDelaySet() $driver = new RabbitMqDriver( $context, - new Config('', '', '', '', '', '', ['delay_plugin_installed' => true]), + new Config('', '', '', '', '', '', ['delay_strategy' => 'dlx']), $this->createDummyQueueMetaRegistry() ); @@ -506,7 +505,7 @@ public function testShouldSetupBrokerWhenDelayPluginNotInstalled() ->willReturn($processorQueue) ; - $config = Config::create('', '', '', '', '', '', ['delay_plugin_installed' => false]); + $config = Config::create('', '', '', '', '', '', ['delay_strategy' => null]); $meta = new QueueMetaRegistry($config, ['default' => []]); @@ -521,7 +520,6 @@ public function testShouldSetupBroker() $routerQueue = new AmqpQueue(''); $processorQueue = new AmqpQueue(''); - $delayTopic = new AmqpTopic(''); $context = $this->createAmqpContextMock(); // setup router @@ -561,29 +559,8 @@ public function testShouldSetupBroker() ->method('declareQueue') ->with($this->identicalTo($processorQueue)) ; - $context - ->expects($this->at(7)) - ->method('createQueue') - ->willReturn($processorQueue) - ; - $context - ->expects($this->at(8)) - ->method('createTopic') - ->willReturn($delayTopic) - ; - $context - ->expects($this->at(9)) - ->method('declareTopic') - ->with($this->identicalTo($delayTopic)) - ; - - $context - ->expects($this->at(10)) - ->method('bind') - ->with($this->isInstanceOf(AmqpBind::class)) - ; - $config = Config::create('', '', '', '', '', '', ['delay_plugin_installed' => true]); + $config = Config::create('', '', '', '', '', '', ['delay_strategy' => 'dlx']); $meta = new QueueMetaRegistry($config, ['default' => []]); diff --git a/pkg/fs/.travis.yml b/pkg/fs/.travis.yml index 42374ddc7..1a44d0c7e 100644 --- a/pkg/fs/.travis.yml +++ b/pkg/fs/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php @@ -18,4 +18,4 @@ install: - composer install --prefer-source script: - - vendor/bin/phpunit --exclude-group=functional + - SYMFONY_DEPRECATIONS_HELPER=weak vendor/bin/phpunit --exclude-group=functional diff --git a/pkg/fs/composer.json b/pkg/fs/composer.json index b79d5d557..5494b705e 100644 --- a/pkg/fs/composer.json +++ b/pkg/fs/composer.json @@ -6,19 +6,19 @@ "license": "MIT", "require": { "php": ">=5.6", - "queue-interop/queue-interop": "^0.6@dev", - "symfony/filesystem": "^2.8|^3", - "makasim/temp-file": "^0.2", - "psr/log": "^1" + "queue-interop/queue-interop": "^0.6", + "symfony/filesystem": "^2.8|^3@stable", + "makasim/temp-file": "^0.2@stable" }, "require-dev": { "phpunit/phpunit": "~5.5", - "enqueue/enqueue": "^0.7@dev", - "enqueue/null": "^0.7@dev", - "enqueue/test": "^0.7@dev", - "queue-interop/queue-spec": "^0.5@dev", - "symfony/dependency-injection": "^2.8|^3", - "symfony/config": "^2.8|^3" + "enqueue/enqueue": "^0.7", + "enqueue/null": "^0.7", + "enqueue/test": "^0.7", + "queue-interop/queue-spec": "^0.5", + "symfony/dependency-injection": "^2.8|^3@stable", + "symfony/config": "^2.8|^3@stable", + "symfony/phpunit-bridge": "^2.8|^3@stable" }, "autoload": { "psr-4": { "Enqueue\\Fs\\": "" }, diff --git a/pkg/fs/phpunit.xml.dist b/pkg/fs/phpunit.xml.dist index 0ba207de0..9754bd41f 100644 --- a/pkg/fs/phpunit.xml.dist +++ b/pkg/fs/phpunit.xml.dist @@ -18,6 +18,10 @@ + + + + . diff --git a/pkg/gearman/.travis.yml b/pkg/gearman/.travis.yml index 42374ddc7..b1a480247 100644 --- a/pkg/gearman/.travis.yml +++ b/pkg/gearman/.travis.yml @@ -1,19 +1,19 @@ -sudo: false - git: - depth: 1 + depth: 10 language: php php: - '5.6' - - '7.0' cache: directories: - $HOME/.composer/cache install: + - sudo apt-get update + - sudo apt-get install libgearman-dev -y --no-install-recommends --no-install-suggests + - pecl install gearman - composer self-update - composer install --prefer-source diff --git a/pkg/gearman/phpunit.xml.dist b/pkg/gearman/phpunit.xml.dist new file mode 100644 index 000000000..626570c00 --- /dev/null +++ b/pkg/gearman/phpunit.xml.dist @@ -0,0 +1,30 @@ + + + + + + + ./Tests + + + + + + . + + ./vendor + ./Tests + + + + diff --git a/pkg/job-queue/.travis.yml b/pkg/job-queue/.travis.yml index 42374ddc7..b9cf57fc9 100644 --- a/pkg/job-queue/.travis.yml +++ b/pkg/job-queue/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php diff --git a/pkg/null/.travis.yml b/pkg/null/.travis.yml index 42374ddc7..b9cf57fc9 100644 --- a/pkg/null/.travis.yml +++ b/pkg/null/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php diff --git a/pkg/pheanstalk/.travis.yml b/pkg/pheanstalk/.travis.yml index 42374ddc7..b9cf57fc9 100644 --- a/pkg/pheanstalk/.travis.yml +++ b/pkg/pheanstalk/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php diff --git a/pkg/rdkafka/.travis.yml b/pkg/rdkafka/.travis.yml index 2f48cf85d..658dcabad 100644 --- a/pkg/rdkafka/.travis.yml +++ b/pkg/rdkafka/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php diff --git a/pkg/rdkafka/Tests/Spec/RdKafkaSendToAndReceiveFromTopicTest.php b/pkg/rdkafka/Tests/Spec/RdKafkaSendToAndReceiveFromTopicTest.php index c01a79951..3f94a14b6 100644 --- a/pkg/rdkafka/Tests/Spec/RdKafkaSendToAndReceiveFromTopicTest.php +++ b/pkg/rdkafka/Tests/Spec/RdKafkaSendToAndReceiveFromTopicTest.php @@ -8,7 +8,7 @@ /** * @group functional - * @retry 10 + * @retry 5 */ class RdKafkaSendToAndReceiveFromTopicTest extends SendToAndReceiveFromTopicSpec { @@ -45,6 +45,10 @@ protected function createContext() ], ]; - return (new RdKafkaConnectionFactory($config))->createContext(); + $context = (new RdKafkaConnectionFactory($config))->createContext(); + + sleep(3); + + return $context; } } diff --git a/pkg/redis/.travis.yml b/pkg/redis/.travis.yml index 42374ddc7..b9cf57fc9 100644 --- a/pkg/redis/.travis.yml +++ b/pkg/redis/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php diff --git a/pkg/simple-client/.travis.yml b/pkg/simple-client/.travis.yml index aaa1849c3..566e0af94 100644 --- a/pkg/simple-client/.travis.yml +++ b/pkg/simple-client/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php @@ -14,8 +14,9 @@ cache: - $HOME/.composer/cache install: + - php Tests/fix_composer_json.php - composer self-update - - composer install --prefer-source --ignore-platform-reqs + - composer install --prefer-source script: - vendor/bin/phpunit --exclude-group=functional diff --git a/pkg/simple-client/Tests/fix_composer_json.php b/pkg/simple-client/Tests/fix_composer_json.php new file mode 100644 index 000000000..fc430e276 --- /dev/null +++ b/pkg/simple-client/Tests/fix_composer_json.php @@ -0,0 +1,9 @@ +context && $this->queue) { + $this->context->deleteQueue($this->queue); + } + } + /** * {@inheritdoc} */ @@ -27,7 +47,7 @@ protected function createContext() 'region' => getenv('AWS__SQS__REGION'), ]); - return $factory->createContext(); + return $this->context = $factory->createContext(); } /** @@ -39,9 +59,9 @@ protected function createQueue(PsrContext $context, $queueName) { $queueName = $queueName.time(); - $queue = $context->createQueue($queueName); - $context->declareQueue($queue); + $this->queue = $context->createQueue($queueName); + $context->declareQueue($this->queue); - return $queue; + return $this->queue; } } diff --git a/pkg/sqs/Tests/Spec/SqsSendToAndReceiveFromQueueTest.php b/pkg/sqs/Tests/Spec/SqsSendToAndReceiveFromQueueTest.php index 3e73cd489..9bfb753f4 100644 --- a/pkg/sqs/Tests/Spec/SqsSendToAndReceiveFromQueueTest.php +++ b/pkg/sqs/Tests/Spec/SqsSendToAndReceiveFromQueueTest.php @@ -4,6 +4,7 @@ use Enqueue\Sqs\SqsConnectionFactory; use Enqueue\Sqs\SqsContext; +use Enqueue\Sqs\SqsDestination; use Interop\Queue\PsrContext; use Interop\Queue\Spec\SendToAndReceiveFromQueueSpec; @@ -12,6 +13,25 @@ */ class SqsSendToAndReceiveFromQueueTest extends SendToAndReceiveFromQueueSpec { + /** + * @var SqsContext + */ + private $context; + + /** + * @var SqsDestination + */ + private $queue; + + protected function tearDown() + { + parent::tearDown(); + + if ($this->context && $this->queue) { + $this->context->deleteQueue($this->queue); + } + } + /** * {@inheritdoc} */ @@ -23,7 +43,7 @@ protected function createContext() 'region' => getenv('AWS__SQS__REGION'), ]); - return $factory->createContext(); + return $this->context = $factory->createContext(); } /** @@ -35,9 +55,9 @@ protected function createQueue(PsrContext $context, $queueName) { $queueName = $queueName.time(); - $queue = $context->createQueue($queueName); - $context->declareQueue($queue); + $this->queue = $context->createQueue($queueName); + $context->declareQueue($this->queue); - return $queue; + return $this->queue; } } diff --git a/pkg/sqs/Tests/Spec/SqsSendToAndReceiveFromTopicTest.php b/pkg/sqs/Tests/Spec/SqsSendToAndReceiveFromTopicTest.php index 5c4595e88..cb611d6df 100644 --- a/pkg/sqs/Tests/Spec/SqsSendToAndReceiveFromTopicTest.php +++ b/pkg/sqs/Tests/Spec/SqsSendToAndReceiveFromTopicTest.php @@ -4,6 +4,7 @@ use Enqueue\Sqs\SqsConnectionFactory; use Enqueue\Sqs\SqsContext; +use Enqueue\Sqs\SqsDestination; use Interop\Queue\PsrContext; use Interop\Queue\Spec\SendToAndReceiveFromTopicSpec; @@ -12,6 +13,25 @@ */ class SqsSendToAndReceiveFromTopicTest extends SendToAndReceiveFromTopicSpec { + /** + * @var SqsContext + */ + private $context; + + /** + * @var SqsDestination + */ + private $queue; + + protected function tearDown() + { + parent::tearDown(); + + if ($this->context && $this->queue) { + $this->context->deleteQueue($this->queue); + } + } + /** * {@inheritdoc} */ @@ -23,7 +43,7 @@ protected function createContext() 'region' => getenv('AWS__SQS__REGION'), ]); - return $factory->createContext(); + return $this->context = $factory->createContext(); } /** @@ -35,9 +55,9 @@ protected function createTopic(PsrContext $context, $topicName) { $topicName = $topicName.time(); - $topic = $context->createTopic($topicName); - $context->declareQueue($topic); + $this->queue = $context->createTopic($topicName); + $context->declareQueue($this->queue); - return $topic; + return $this->queue; } } diff --git a/pkg/stomp/.travis.yml b/pkg/stomp/.travis.yml index 42374ddc7..b9cf57fc9 100644 --- a/pkg/stomp/.travis.yml +++ b/pkg/stomp/.travis.yml @@ -1,7 +1,7 @@ sudo: false git: - depth: 1 + depth: 10 language: php