Skip to content

Commit 518ee0c

Browse files
committed
Merge remote-tracking branch 'github-magento2ce/MAGETWO-91717' into EPAM-PR-12
2 parents 65550ba + b7f7a58 commit 518ee0c

File tree

2 files changed

+119
-6
lines changed

2 files changed

+119
-6
lines changed

lib/internal/Magento/Framework/MessageQueue/Test/Unit/Consumer/Config/XsdTest.php

Lines changed: 117 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,26 @@ class XsdTest extends \PHPUnit\Framework\TestCase
1010
/**
1111
* @var string
1212
*/
13-
protected $_schemaFile;
13+
private $schemaFile;
1414

15+
/**
16+
* @var string
17+
*/
18+
private $schemaQueueFile;
19+
20+
/**
21+
* Set up.
22+
*
23+
* @return void
24+
*/
1525
protected function setUp()
1626
{
1727
if (!function_exists('libxml_set_external_entity_loader')) {
1828
$this->markTestSkipped('Skipped on HHVM. Will be fixed in MAGETWO-45033');
1929
}
2030
$urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
21-
$this->_schemaFile = $urnResolver->getRealPath('urn:magento:framework-message-queue:etc/consumer.xsd');
31+
$this->schemaFile = $urnResolver->getRealPath('urn:magento:framework-message-queue:etc/consumer.xsd');
32+
$this->schemaQueueFile = $urnResolver->getRealPath('urn:magento:framework-message-queue:etc/queue.xsd');
2233
}
2334

2435
/**
@@ -29,13 +40,13 @@ protected function setUp()
2940
public function testExemplarXml($fixtureXml, array $expectedErrors)
3041
{
3142
$validationState = $this->createMock(\Magento\Framework\Config\ValidationStateInterface::class);
32-
$validationState->expects($this->any())
43+
$validationState->expects($this->atLeastOnce())
3344
->method('isValidationRequired')
3445
->willReturn(true);
3546
$messageFormat = '%message%';
3647
$dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationState, [], null, null, $messageFormat);
3748
$actualErrors = [];
38-
$actualResult = $dom->validate($this->_schemaFile, $actualErrors);
49+
$actualResult = $dom->validate($this->schemaFile, $actualErrors);
3950
$this->assertEquals(empty($expectedErrors), $actualResult, "Validation result is invalid.");
4051
$this->assertEquals($expectedErrors, $actualErrors, "Validation errors does not match.");
4152
}
@@ -125,4 +136,106 @@ public function exemplarXmlDataProvider()
125136
];
126137
// @codingStandardsIgnoreEnd
127138
}
139+
140+
/**
141+
* @param string $fixtureXml
142+
* @param array $expectedErrors
143+
* @dataProvider exemplarQueueXmlDataProvider
144+
*/
145+
public function testExemplarQueueXml($fixtureXml, array $expectedErrors)
146+
{
147+
$validationState = $this->createMock(\Magento\Framework\Config\ValidationStateInterface::class);
148+
$validationState->expects($this->atLeastOnce())
149+
->method('isValidationRequired')
150+
->willReturn(true);
151+
$messageFormat = '%message%';
152+
$dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationState, [], null, null, $messageFormat);
153+
$actualErrors = [];
154+
$actualResult = $dom->validate($this->schemaQueueFile, $actualErrors);
155+
$this->assertEquals(empty($expectedErrors), $actualResult, "Validation result is invalid.");
156+
$this->assertEquals($expectedErrors, $actualErrors, "Validation errors does not match.");
157+
}
158+
159+
/**
160+
* @return array
161+
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
162+
*/
163+
public function exemplarQueueXmlDataProvider()
164+
{
165+
// @codingStandardsIgnoreStart
166+
return [
167+
'valid' => [
168+
'<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
169+
<broker topic="asd" >
170+
<queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="5"/>
171+
<queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass2" maxMessages="5"/>
172+
</broker>
173+
</config>',
174+
[],
175+
],
176+
'invalid handler format' => [
177+
'<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
178+
<broker topic="asd" >
179+
<queue name="queue1" consumer="consumer1" handler="handlerClass_One1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="5"/>
180+
<queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handler_Method2" consumerInstance="consumerClass2" maxMessages="5"/>
181+
</broker>
182+
</config>',
183+
[
184+
"Element 'queue', attribute 'handler': [facet 'pattern'] The value 'handlerClass_One1::handlerMethod1' is not accepted by the pattern '[a-zA-Z0-9\\\\]+::[a-zA-Z0-9]+'.",
185+
"Element 'queue', attribute 'handler': 'handlerClass_One1::handlerMethod1' is not a valid value of the atomic type 'handlerType'.",
186+
"Element 'queue', attribute 'handler': [facet 'pattern'] The value 'handlerClassOne2::handler_Method2' is not accepted by the pattern '[a-zA-Z0-9\\\\]+::[a-zA-Z0-9]+'.",
187+
"Element 'queue', attribute 'handler': 'handlerClassOne2::handler_Method2' is not a valid value of the atomic type 'handlerType'.",
188+
],
189+
],
190+
'invalid instance format' => [
191+
'<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
192+
<broker topic="asd" >
193+
<queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumer_Class1" maxMessages="5"/>
194+
<queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass_2" maxMessages="5"/>
195+
</broker>
196+
</config>',
197+
[
198+
"Element 'queue', attribute 'consumerInstance': [facet 'pattern'] The value 'consumer_Class1' is not accepted by the pattern '[a-zA-Z0-9\\\\]+'.",
199+
"Element 'queue', attribute 'consumerInstance': 'consumer_Class1' is not a valid value of the atomic type 'instanceType'.",
200+
"Element 'queue', attribute 'consumerInstance': [facet 'pattern'] The value 'consumerClass_2' is not accepted by the pattern '[a-zA-Z0-9\\\\]+'.",
201+
"Element 'queue', attribute 'consumerInstance': 'consumerClass_2' is not a valid value of the atomic type 'instanceType'.",
202+
],
203+
],
204+
'invalid maxMessages format' => [
205+
'<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
206+
<broker topic="asd" >
207+
<queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="ABC"/>
208+
<queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass2" maxMessages="5"/>
209+
</broker>
210+
</config>',
211+
[
212+
"Element 'queue', attribute 'maxMessages': 'ABC' is not a valid value of the atomic type 'xs:integer'.",
213+
],
214+
],
215+
'unexpected element' => [
216+
'<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
217+
<broker topic="asd" >
218+
<queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="2"/>
219+
<queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass2" maxMessages="5"/>
220+
<unexpected name="queue2"/>
221+
</broker>
222+
</config>',
223+
[
224+
"Element 'unexpected': This element is not expected. Expected is ( queue ).",
225+
],
226+
],
227+
'unexpected attribute' => [
228+
'<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
229+
<broker topic="asd" >
230+
<queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="2"/>
231+
<queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass2" maxMessages="5" unexpected="unexpected"/>
232+
</broker>
233+
</config>',
234+
[
235+
"Element 'queue', attribute 'unexpected': The attribute 'unexpected' is not allowed.",
236+
],
237+
],
238+
];
239+
// @codingStandardsIgnoreEnd
240+
}
128241
}

lib/internal/Magento/Framework/MessageQueue/etc/queue_base.xsd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
</xs:documentation>
4242
</xs:annotation>
4343
<xs:restriction base="xs:string">
44-
<xs:pattern value="[a-zA-Z\\]+" />
44+
<xs:pattern value="[a-zA-Z0-9\\]+" />
4545
<xs:minLength value="4" />
4646
</xs:restriction>
4747
</xs:simpleType>
@@ -53,7 +53,7 @@
5353
</xs:documentation>
5454
</xs:annotation>
5555
<xs:restriction base="xs:string">
56-
<xs:pattern value="[a-zA-Z\\]+::[a-zA-Z]+" />
56+
<xs:pattern value="[a-zA-Z0-9\\]+::[a-zA-Z0-9]+" />
5757
<xs:minLength value="5" />
5858
</xs:restriction>
5959
</xs:simpleType>

0 commit comments

Comments
 (0)