123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\MessageQueue;
- /**
- * Test of communication configuration reading and parsing.
- *
- * @magentoCache config disabled
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class ConfigTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @magentoAppIsolation enabled
- */
- public function testGetConsumers()
- {
- $consumers = $this->getConfigData()->getConsumers();
- $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
- $this->assertEquals($expectedParsedConfig['consumers'], $consumers);
- }
- /**
- * @magentoAppIsolation enabled
- */
- public function testGetPublishers()
- {
- $publishers = $this->getConfigData()->getPublishers();
- $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
- $this->assertEquals($expectedParsedConfig['publishers'], $publishers);
- }
- /**
- * @magentoAppIsolation enabled
- */
- public function testGetBinds()
- {
- $binds = $this->getConfigData()->getBinds();
- $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
- $this->assertEquals($expectedParsedConfig['binds'], $binds);
- }
- /**
- * @magentoAppIsolation enabled
- */
- public function testGetMaps()
- {
- $topicName = 'topic.broker.test';
- $queue = $this->getConfigData()->getQueuesByTopic($topicName);
- $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
- $this->assertEquals(
- $expectedParsedConfig['exchange_topic_to_queues_map']['magento--topic.broker.test'],
- $queue
- );
- }
- /**
- * @magentoAppIsolation enabled
- */
- public function testGetTopic()
- {
- $topicName = 'topic.broker.test';
- $topic = $this->getConfigData()->getTopic($topicName);
- $expectedParsedConfig = include __DIR__ . '/_files/valid_expected_queue.php';
- $this->assertEquals($expectedParsedConfig['topics'][$topicName], $topic);
- }
- /**
- * Return mocked config data
- *
- * @return \Magento\Framework\MessageQueue\ConfigInterface
- */
- private function getConfigData()
- {
- return $this->getConfigInstance(
- [
- __DIR__ . '/_files/valid_new_queue.xml'
- ]
- );
- }
- /**
- * Create config instance initialized with configuration from $configFilePath
- *
- * @param string|string[] $configFilePath
- * @param string|null $envConfigFilePath
- * @return \Magento\Framework\MessageQueue\ConfigInterface
- */
- protected function getConfigInstance($configFilePath, $envConfigFilePath = null)
- {
- $content = [];
- if (is_array($configFilePath)) {
- foreach ($configFilePath as $file) {
- $content[] = file_get_contents($file);
- }
- } else {
- $content[] = file_get_contents($configFilePath);
- }
- $fileResolver = $this->getMockForAbstractClass(\Magento\Framework\Config\FileResolverInterface::class);
- $fileResolver->expects($this->any())
- ->method('get')
- ->willReturn($content);
- $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
- $topicConverter = $objectManager->create(
- \Magento\Framework\MessageQueue\Config\Reader\Xml\Converter\TopicConfig::class,
- [
- 'communicationConfig' => $this->getCommunicationConfigInstance()
- ]
- );
- $converter = $objectManager->create(
- \Magento\Framework\MessageQueue\Config\Reader\Xml\CompositeConverter::class,
- [
- 'converters' => [
- ['converter' => $topicConverter, 'sortOrder' => 10]
- ]
- ]
- );
- $xmlReader = $objectManager->create(
- \Magento\Framework\MessageQueue\Config\Reader\Xml::class,
- [
- 'fileResolver' => $fileResolver,
- 'converter' => $converter,
- ]
- );
- $deploymentConfigReader = $this->getMockBuilder(\Magento\Framework\App\DeploymentConfig\Reader::class)
- ->disableOriginalConstructor()
- ->setMethods([])
- ->getMock();
- $envConfigData = include $envConfigFilePath ?: __DIR__ . '/_files/valid_queue_input.php';
- $deploymentConfigReader->expects($this->any())->method('load')->willReturn($envConfigData);
- $deploymentConfig = $objectManager->create(
- \Magento\Framework\App\DeploymentConfig::class,
- ['reader' => $deploymentConfigReader]
- );
- $envReader = $objectManager->create(
- \Magento\Framework\MessageQueue\Config\Reader\Env::class,
- [
- 'deploymentConfig' => $deploymentConfig
- ]
- );
- $methodsMap = $objectManager->create(\Magento\Framework\Reflection\MethodsMap::class);
- $envValidator = $objectManager->create(
- \Magento\Framework\MessageQueue\Config\Reader\Env\Validator::class,
- [
- 'methodsMap' => $methodsMap
- ]
- );
- $compositeReader = $objectManager->create(
- \Magento\Framework\MessageQueue\Config\CompositeReader::class,
- [
- 'readers' => [
- ['reader' => $xmlReader, 'sortOrder' => 10],
- ['reader' => $envReader, 'sortOrder' => 20]
- ],
- ]
- );
- /** @var \Magento\Framework\MessageQueue\Config $configData */
- $configData = $objectManager->create(
- \Magento\Framework\MessageQueue\Config\Data::class,
- [
- 'reader' => $compositeReader,
- 'envValidator' => $envValidator
- ]
- );
- return $objectManager->create(
- \Magento\Framework\MessageQueue\Config::class,
- ['queueConfigData' => $configData]
- );
- }
- /**
- * Get mocked Communication Config Instance
- *
- * @return \Magento\Framework\Communication\ConfigInterface
- */
- private function getCommunicationConfigInstance()
- {
- $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
- $fileResolver = $this->getMockForAbstractClass(\Magento\Framework\Config\FileResolverInterface::class);
- $fileResolver->expects($this->any())
- ->method('get')
- ->willReturn([file_get_contents(__DIR__ . '/_files/communication.xml')]);
- $xmlReader = $objectManager->create(
- \Magento\Framework\Communication\Config\Reader\XmlReader::class,
- [
- 'fileResolver' => $fileResolver,
- ]
- );
- $compositeReader = $objectManager->create(
- \Magento\Framework\Communication\Config\CompositeReader::class,
- [
- 'readers' => [
- ['reader' => $xmlReader, 'sortOrder' => 10],
- [
- 'reader' => $objectManager->create(
- \Magento\Framework\Communication\Config\Reader\EnvReader::class
- ),
- 'sortOrder' => 20
- ]
- ],
- ]
- );
- /** @var \Magento\Framework\Communication\Config $configData */
- $configData = $objectManager->create(
- \Magento\Framework\Communication\Config\Data::class,
- [
- 'reader' => $compositeReader
- ]
- );
- $config = $objectManager->create(
- \Magento\Framework\Communication\ConfigInterface::class,
- [
- 'configData' => $configData
- ]
- );
- return $config;
- }
- }
|