WildcardTopicTest.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\MessageQueue\UseCase;
  7. use Magento\TestModuleAsyncAmqp\Model\AsyncTestData;
  8. class WildcardTopicTest extends QueueTestCaseAbstract
  9. {
  10. /**
  11. * @var string[]
  12. */
  13. protected $consumers = [
  14. 'wildcard.queue.one.consumer',
  15. 'wildcard.queue.two.consumer',
  16. 'wildcard.queue.three.consumer',
  17. 'wildcard.queue.four.consumer',
  18. ];
  19. /**
  20. * @param string $topic
  21. * @param string[] $matchingQueues
  22. * @param string[] $nonMatchingQueues
  23. *
  24. * @dataProvider wildCardTopicsDataProvider
  25. */
  26. public function testWildCardMatchingTopic($topic, $matchingQueues, $nonMatchingQueues)
  27. {
  28. $testObject = $this->generateTestObject();
  29. $this->publisher->publish($topic, $testObject);
  30. $this->waitForAsynchronousResult(count($matchingQueues), $this->logFilePath);
  31. $this->assertTrue(file_exists($this->logFilePath), "No handlers invoked (log file was not created).");
  32. foreach ($nonMatchingQueues as $queueName) {
  33. $this->assertNotContains($queueName, file_get_contents($this->logFilePath));
  34. }
  35. foreach ($matchingQueues as $queueName) {
  36. $this->assertContains($queueName, file_get_contents($this->logFilePath));
  37. }
  38. }
  39. public function wildCardTopicsDataProvider()
  40. {
  41. return [
  42. 'segment1.segment2.segment3.wildcard' => [
  43. 'segment1.segment2.segment3.wildcard',
  44. ['wildcard.queue.one', 'wildcard.queue.two', 'wildcard.queue.four'],
  45. ['wildcard.queue.three']
  46. ],
  47. 'segment2.segment3.wildcard' => [
  48. 'segment2.segment3.wildcard',
  49. ['wildcard.queue.one', 'wildcard.queue.three', 'wildcard.queue.four'],
  50. ['wildcard.queue.two']
  51. ]
  52. ];
  53. }
  54. public function testWildCardNonMatchingTopic()
  55. {
  56. $testObject = $this->generateTestObject();
  57. $this->publisher->publish('not.matching.wildcard.topic', $testObject);
  58. sleep(2);
  59. $this->assertFalse(file_exists($this->logFilePath), "No log file must be created for non-matching topic.");
  60. }
  61. /**
  62. * @return AsyncTestData
  63. */
  64. private function generateTestObject()
  65. {
  66. $testObject = $this->objectManager->create(AsyncTestData::class);
  67. $testObject->setValue('||Message Contents||');
  68. $testObject->setTextFilePath($this->logFilePath);
  69. return $testObject;
  70. }
  71. }