ConfigTest.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\MessageQueue;
  7. /**
  8. * Test of communication configuration reading and parsing.
  9. *
  10. * @magentoCache config disabled
  11. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  12. */
  13. class ConfigTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /**
  16. * @magentoAppIsolation enabled
  17. */
  18. public function testGetConsumers()
  19. {
  20. $consumers = $this->getConfigData()->getConsumers();
  21. $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
  22. $this->assertEquals($expectedParsedConfig['consumers'], $consumers);
  23. }
  24. /**
  25. * @magentoAppIsolation enabled
  26. */
  27. public function testGetPublishers()
  28. {
  29. $publishers = $this->getConfigData()->getPublishers();
  30. $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
  31. $this->assertEquals($expectedParsedConfig['publishers'], $publishers);
  32. }
  33. /**
  34. * @magentoAppIsolation enabled
  35. */
  36. public function testGetBinds()
  37. {
  38. $binds = $this->getConfigData()->getBinds();
  39. $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
  40. $this->assertEquals($expectedParsedConfig['binds'], $binds);
  41. }
  42. /**
  43. * @magentoAppIsolation enabled
  44. */
  45. public function testGetMaps()
  46. {
  47. $topicName = 'topic.broker.test';
  48. $queue = $this->getConfigData()->getQueuesByTopic($topicName);
  49. $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
  50. $this->assertEquals(
  51. $expectedParsedConfig['exchange_topic_to_queues_map']['magento--topic.broker.test'],
  52. $queue
  53. );
  54. }
  55. /**
  56. * @magentoAppIsolation enabled
  57. */
  58. public function testGetTopic()
  59. {
  60. $topicName = 'topic.broker.test';
  61. $topic = $this->getConfigData()->getTopic($topicName);
  62. $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
  63. $this->assertEquals($expectedParsedConfig['topics'][$topicName], $topic);
  64. }
  65. /**
  66. * Return mocked config data
  67. *
  68. * @return \Magento\Framework\MessageQueue\ConfigInterface
  69. */
  70. private function getConfigData()
  71. {
  72. return $this->getConfigInstance(
  73. [
  74. __DIR__ . '/_files/valid_new_queue.xml'
  75. ]
  76. );
  77. }
  78. /**
  79. * Create config instance initialized with configuration from $configFilePath
  80. *
  81. * @param string|string[] $configFilePath
  82. * @param string|null $envConfigFilePath
  83. * @return \Magento\Framework\MessageQueue\ConfigInterface
  84. */
  85. protected function getConfigInstance($configFilePath, $envConfigFilePath = null)
  86. {
  87. $content = [];
  88. if (is_array($configFilePath)) {
  89. foreach ($configFilePath as $file) {
  90. $content[] = file_get_contents($file);
  91. }
  92. } else {
  93. $content[] = file_get_contents($configFilePath);
  94. }
  95. $fileResolver = $this->getMockForAbstractClass(\Magento\Framework\Config\FileResolverInterface::class);
  96. $fileResolver->expects($this->any())
  97. ->method('get')
  98. ->willReturn($content);
  99. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  100. $topicConverter = $objectManager->create(
  101. \Magento\Framework\MessageQueue\Config\Reader\Xml\Converter\TopicConfig::class,
  102. [
  103. 'communicationConfig' => $this->getCommunicationConfigInstance()
  104. ]
  105. );
  106. $converter = $objectManager->create(
  107. \Magento\Framework\MessageQueue\Config\Reader\Xml\CompositeConverter::class,
  108. [
  109. 'converters' => [
  110. ['converter' => $topicConverter, 'sortOrder' => 10]
  111. ]
  112. ]
  113. );
  114. $xmlReader = $objectManager->create(
  115. \Magento\Framework\MessageQueue\Config\Reader\Xml::class,
  116. [
  117. 'fileResolver' => $fileResolver,
  118. 'converter' => $converter,
  119. ]
  120. );
  121. $deploymentConfigReader = $this->getMockBuilder(\Magento\Framework\App\DeploymentConfig\Reader::class)
  122. ->disableOriginalConstructor()
  123. ->setMethods([])
  124. ->getMock();
  125. $envConfigData = include $envConfigFilePath ?: __DIR__ . '/_files/valid_queue_input.php';
  126. $deploymentConfigReader->expects($this->any())->method('load')->willReturn($envConfigData);
  127. $deploymentConfig = $objectManager->create(
  128. \Magento\Framework\App\DeploymentConfig::class,
  129. ['reader' => $deploymentConfigReader]
  130. );
  131. $envReader = $objectManager->create(
  132. \Magento\Framework\MessageQueue\Config\Reader\Env::class,
  133. [
  134. 'deploymentConfig' => $deploymentConfig
  135. ]
  136. );
  137. $methodsMap = $objectManager->create(\Magento\Framework\Reflection\MethodsMap::class);
  138. $envValidator = $objectManager->create(
  139. \Magento\Framework\MessageQueue\Config\Reader\Env\Validator::class,
  140. [
  141. 'methodsMap' => $methodsMap
  142. ]
  143. );
  144. $compositeReader = $objectManager->create(
  145. \Magento\Framework\MessageQueue\Config\CompositeReader::class,
  146. [
  147. 'readers' => [
  148. ['reader' => $xmlReader, 'sortOrder' => 10],
  149. ['reader' => $envReader, 'sortOrder' => 20]
  150. ],
  151. ]
  152. );
  153. /** @var \Magento\Framework\MessageQueue\Config $configData */
  154. $configData = $objectManager->create(
  155. \Magento\Framework\MessageQueue\Config\Data::class,
  156. [
  157. 'reader' => $compositeReader,
  158. 'envValidator' => $envValidator
  159. ]
  160. );
  161. return $objectManager->create(
  162. \Magento\Framework\MessageQueue\Config::class,
  163. ['queueConfigData' => $configData]
  164. );
  165. }
  166. /**
  167. * Get mocked Communication Config Instance
  168. *
  169. * @return \Magento\Framework\Communication\ConfigInterface
  170. */
  171. private function getCommunicationConfigInstance()
  172. {
  173. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  174. $fileResolver = $this->getMockForAbstractClass(\Magento\Framework\Config\FileResolverInterface::class);
  175. $fileResolver->expects($this->any())
  176. ->method('get')
  177. ->willReturn([file_get_contents(__DIR__ . '/_files/communication.xml')]);
  178. $xmlReader = $objectManager->create(
  179. \Magento\Framework\Communication\Config\Reader\XmlReader::class,
  180. [
  181. 'fileResolver' => $fileResolver,
  182. ]
  183. );
  184. $compositeReader = $objectManager->create(
  185. \Magento\Framework\Communication\Config\CompositeReader::class,
  186. [
  187. 'readers' => [
  188. ['reader' => $xmlReader, 'sortOrder' => 10],
  189. [
  190. 'reader' => $objectManager->create(
  191. \Magento\Framework\Communication\Config\Reader\EnvReader::class
  192. ),
  193. 'sortOrder' => 20
  194. ]
  195. ],
  196. ]
  197. );
  198. /** @var \Magento\Framework\Communication\Config $configData */
  199. $configData = $objectManager->create(
  200. \Magento\Framework\Communication\Config\Data::class,
  201. [
  202. 'reader' => $compositeReader
  203. ]
  204. );
  205. $config = $objectManager->create(
  206. \Magento\Framework\Communication\ConfigInterface::class,
  207. [
  208. 'configData' => $configData
  209. ]
  210. );
  211. return $config;
  212. }
  213. }