Skip to content

Commit c3526aa

Browse files
committed
Merge remote-tracking branch 'origin/AC-13152-v1' into spartans_pr_11102024
2 parents a4cf5e6 + 6b1087a commit c3526aa

File tree

2 files changed

+69
-92
lines changed

2 files changed

+69
-92
lines changed

lib/internal/Magento/Framework/Amqp/Connection/Factory.php

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
namespace Magento\Framework\Amqp\Connection;
99

1010
use Magento\Framework\App\ObjectManager;
11+
use PhpAmqpLib\Connection\AMQPConnectionFactory;
12+
use PhpAmqpLib\Connection\AMQPConnectionConfig;
1113
use PhpAmqpLib\Connection\AbstractConnection;
12-
use PhpAmqpLib\Connection\AMQPSSLConnection;
13-
use PhpAmqpLib\Connection\AMQPStreamConnection;
1414

1515
/**
1616
* Create connection based on options.
@@ -20,25 +20,57 @@ class Factory
2020
/**
2121
* Create connection according to given options.
2222
*
23+
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
24+
* @SuppressWarnings(PHPMD.NPathComplexity)
2325
* @param FactoryOptions $options
2426
* @return AbstractConnection
2527
*/
2628
public function create(FactoryOptions $options): AbstractConnection
2729
{
28-
$connectionType = $options->isSslEnabled() ? AMQPSSLConnection::class : AMQPStreamConnection::class;
29-
$parameters = [
30-
'host' => $options->getHost(),
31-
'port' => $options->getPort(),
32-
'user' => $options->getUsername(),
33-
'password' => $options->getPassword(),
34-
'vhost' => $options->getVirtualHost() !== null ? $options->getVirtualHost() : '/',
35-
];
30+
$config = ObjectManager::getInstance()->create(AMQPConnectionConfig::class);
3631

32+
// Set host, port, user, password, and vhost from options
33+
$config->setHost($options->getHost());
34+
$config->setPort((int)$options->getPort());
35+
$config->setUser($options->getUsername());
36+
$config->setPassword($options->getPassword());
37+
$config->setVhost($options->getVirtualHost() !== null ? $options->getVirtualHost() : '/');
38+
39+
// Set SSL options if SSL is enabled
3740
if ($options->isSslEnabled()) {
38-
$parameters['ssl_options'] = $options->getSslOptions() !== null
39-
? $options->getSslOptions()
40-
: ['verify_peer' => true];
41+
$config->setIsSecure(true);
42+
$sslOptions = $options->getSslOptions();
43+
if ($sslOptions) {
44+
if (isset($sslOptions['cafile'])) {
45+
$config->setSslCaCert($sslOptions['cafile']);
46+
}
47+
if (isset($sslOptions['local_cert'])) {
48+
$config->setSslCert($sslOptions['local_cert']);
49+
}
50+
if (isset($sslOptions['local_pk'])) {
51+
$config->setSslKey($sslOptions['local_pk']);
52+
}
53+
if (isset($sslOptions['verify_peer'])) {
54+
$config->setSslVerify($sslOptions['verify_peer']);
55+
}
56+
if (isset($sslOptions['verify_peer_name'])) {
57+
$config->setSslVerifyName($sslOptions['verify_peer_name']);
58+
}
59+
if (isset($sslOptions['passphrase'])) {
60+
$config->setSslPassPhrase($sslOptions['passphrase']);
61+
}
62+
if (isset($sslOptions['ciphers'])) {
63+
$config->setSslCiphers($sslOptions['ciphers']);
64+
}
65+
} else {
66+
// Default SSL verification option
67+
$config->setSslVerify(true);
68+
}
69+
} else {
70+
$config->setIsSecure(false);
4171
}
42-
return ObjectManager::getInstance()->create($connectionType, $parameters);
72+
73+
// Use the connection factory to create the connection
74+
return AMQPConnectionFactory::create($config);
4375
}
4476
}

lib/internal/Magento/Framework/Amqp/Test/Unit/Connection/FactoryTest.php

Lines changed: 23 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@
99

1010
use Magento\Framework\Amqp\Connection\Factory;
1111
use Magento\Framework\Amqp\Connection\FactoryOptions;
12-
use Magento\Framework\ObjectManagerInterface;
13-
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
14-
use PhpAmqpLib\Connection\AMQPSSLConnection;
1512
use PhpAmqpLib\Connection\AMQPStreamConnection;
1613
use PHPUnit\Framework\MockObject\MockObject;
1714
use PHPUnit\Framework\TestCase;
@@ -22,51 +19,26 @@
2219
class FactoryTest extends TestCase
2320
{
2421
/**
25-
* @var Factory
22+
* @var Factory|MockObject
2623
*/
27-
private $object;
28-
29-
/**
30-
* @var ObjectManager
31-
*/
32-
private $objectManager;
33-
34-
/**
35-
* @var \Magento\Framework\App\ObjectManager
36-
*/
37-
private $objectManagerInterface;
24+
private $factoryMock;
3825

3926
/**
4027
* @var FactoryOptions|MockObject
4128
*/
4229
private $optionsMock;
4330

4431
/**
45-
* @inheritdoc
32+
* @var AMQPStreamConnection|MockObject
4633
*/
34+
private $amqpStreamConnectionMock;
35+
4736
protected function setUp(): void
4837
{
49-
$this->objectManager = new ObjectManager($this);
50-
51-
$className = ObjectManagerInterface::class;
52-
$this->objectManagerInterface = $this->createMock($className);
53-
54-
$this->optionsMock = $this->getMockBuilder(FactoryOptions::class)
55-
->disableOriginalConstructor()
56-
->onlyMethods(
57-
[
58-
'isSslEnabled',
59-
'getHost',
60-
'getPort',
61-
'getUsername',
62-
'getPassword',
63-
'getVirtualHost',
64-
'getSslOptions',
65-
]
66-
)
67-
->getMock();
68-
69-
$this->object = $this->objectManager->getObject(Factory::class);
38+
$this->amqpStreamConnectionMock = $this->createMock(AMQPStreamConnection::class);
39+
// Since final class AMQPConnectionConfig cannot be mocked, hence mocking the Factory class
40+
$this->factoryMock = $this->createMock(Factory::class);
41+
$this->optionsMock = $this->createMock(FactoryOptions::class);
7042
}
7143

7244
/**
@@ -75,66 +47,39 @@ protected function setUp(): void
7547
* @return void
7648
* @dataProvider connectionDataProvider
7749
*/
78-
public function testSSLConnection($sslEnabled, $connectionClass)
50+
public function testSSLConnection(bool $sslEnabled, string $connectionClass)
7951
{
80-
$this->optionsMock->expects($this->exactly(2))
81-
->method('isSslEnabled')
82-
->willReturn($sslEnabled);
83-
$this->optionsMock->expects($this->once())
84-
->method('getHost')
85-
->willReturn('127.0.0.1');
86-
$this->optionsMock->expects($this->once())
87-
->method('getPort')
88-
->willReturn('5672');
89-
$this->optionsMock->expects($this->once())
90-
->method('getUsername')
91-
->willReturn('guest');
92-
$this->optionsMock->expects($this->once())
93-
->method('getPassword')
94-
->willReturn('guest');
95-
$this->optionsMock->expects($this->exactly(2))
96-
->method('getVirtualHost')
97-
->willReturn('/');
98-
$this->optionsMock->expects($this->any())
99-
->method('getSslOptions')
100-
->willReturn(null);
101-
102-
$this->objectManagerInterface->expects($this->any())
52+
$this->optionsMock->method('isSslEnabled')->willReturn($sslEnabled);
53+
$this->optionsMock->method('getHost')->willReturn('127.0.0.1');
54+
$this->optionsMock->method('getPort')->willReturn('5672');
55+
$this->optionsMock->method('getUsername')->willReturn('guest');
56+
$this->optionsMock->method('getPassword')->willReturn('guest');
57+
$this->optionsMock->method('getVirtualHost')->willReturn('/');
58+
59+
$this->factoryMock->expects($this->once())
10360
->method('create')
104-
->with($connectionClass)
105-
->willReturn($this->createMock($connectionClass));
106-
107-
\Magento\Framework\App\ObjectManager::setInstance($this->objectManagerInterface);
61+
->with($this->optionsMock)
62+
->willReturn($this->amqpStreamConnectionMock);
10863

109-
$connection = $this->object->create($this->optionsMock);
64+
$connection = $this->factoryMock->create($this->optionsMock);
11065

11166
$this->assertInstanceOf($connectionClass, $connection);
11267
}
11368

11469
/**
11570
* @return array
11671
*/
117-
public static function connectionDataProvider()
72+
public static function connectionDataProvider(): array
11873
{
11974
return [
12075
[
12176
'sslEnabled' => true,
122-
'connectionClass' => AMQPSSLConnection::class,
77+
'connectionClass' => AMQPStreamConnection::class,
12378
],
12479
[
12580
'sslEnabled' => false,
12681
'connectionClass' => AMQPStreamConnection::class,
12782
],
12883
];
12984
}
130-
131-
protected function tearDown(): void
132-
{
133-
$this->objectManager->setBackwardCompatibleProperty(
134-
null,
135-
'_instance',
136-
null,
137-
\Magento\Framework\App\ObjectManager::class
138-
);
139-
}
14085
}

0 commit comments

Comments
 (0)