magento2-docker/dev/tests/integration/testsuite/Magento/Framework/MessageQueue/ConfigTest.php

230 lines
7.7 KiB
PHP
Executable File

<?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;
}
}