Skip to content

Commit aeaaa58

Browse files
committed
MC-20710: Add Elasticsearch configuration parameters to console
1 parent 772d330 commit aeaaa58

File tree

14 files changed

+74
-76
lines changed

14 files changed

+74
-76
lines changed

app/code/Magento/Elasticsearch/Setup/ConnectionValidator.php

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
namespace Magento\Elasticsearch\Setup;
99

1010
use Magento\AdvancedSearch\Model\Client\ClientResolver;
11-
use Magento\Setup\Model\SearchConfigOptionsList;
1211

1312
/**
1413
* Validate Elasticsearch connection
@@ -31,23 +30,13 @@ public function __construct(ClientResolver $clientResolver)
3130
/**
3231
* Checks Elasticsearch Connection
3332
*
34-
* @param array $configuration
33+
* @param string $searchEngine
3534
* @return bool true if the connection succeeded, false otherwise
3635
*/
37-
public function validate($configuration)
36+
public function validate(string $searchEngine): bool
3837
{
39-
$configOptions = [
40-
'hostname' => $configuration[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_HOST] ?? null,
41-
'port' => $configuration[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_PORT] ?? null,
42-
'index' => $configuration[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_INDEX_PREFIX] ?? null,
43-
'enableAuth' => $configuration[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_ENABLE_AUTH] ?? false,
44-
'username' => $configuration[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_USERNAME] ?? null,
45-
'password' => $configuration[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_PASSWORD] ?? null,
46-
'timeout' => $configuration[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_TIMEOUT] ?? null
47-
];
48-
4938
try {
50-
$client = $this->clientResolver->create($configuration['search-engine'], $configOptions);
39+
$client = $this->clientResolver->create($searchEngine);
5140
return $client->testConnection();
5241
} catch (\Exception $e) {
5342
return false;

app/code/Magento/Elasticsearch/Setup/InstallConfig.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,24 @@ public function __construct(
5656
*/
5757
public function configure(array $inputOptions)
5858
{
59-
if ($this->doValidation($inputOptions)) {
60-
if (!$this->validator->validate($inputOptions)) {
61-
throw new InputException(__('Could not connect to Elasticsearch server.'));
62-
}
63-
}
64-
6559
foreach ($inputOptions as $inputKey => $inputValue) {
6660
if (null === $inputValue || !isset($this->searchConfigMapping[$inputKey])) {
6761
continue;
6862
}
6963
$configKey = $this->searchConfigMapping[$inputKey];
7064
$this->configWriter->save(self::CATALOG_SEARCH . $configKey, $inputValue);
7165
}
66+
67+
if ($this->doValidation($inputOptions)) {
68+
if (!$this->validator->validate($inputOptions[SearchConfigOptionsList::INPUT_KEY_SEARCH_ENGINE])) {
69+
throw new InputException(
70+
__(
71+
'Connection to Elasticsearch cannot be established. '
72+
. 'Please check the configuration and try again.'
73+
)
74+
);
75+
}
76+
}
7277
}
7378

7479
/**
@@ -77,7 +82,7 @@ public function configure(array $inputOptions)
7782
* @param array $inputOptions
7883
* @return bool
7984
*/
80-
private function doValidation(array $inputOptions)
85+
private function doValidation(array $inputOptions): bool
8186
{
8287
if (isset($inputOptions[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_SKIP_VALIDATION])) {
8388
return !$inputOptions[SearchConfigOptionsList::INPUT_KEY_ELASTICSEARCH_SKIP_VALIDATION];

app/code/Magento/Elasticsearch/Test/Unit/Setup/ConnectionValidatorTest.php

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,24 @@
1111
use Magento\Elasticsearch\Setup\ConnectionValidator;
1212
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
1313
use Magento\Elasticsearch\Elasticsearch5\Model\Client\Elasticsearch;
14+
use PHPUnit\Framework\MockObject\MockObject;
1415
use PHPUnit\Framework\TestCase;
1516

1617
class ConnectionValidatorTest extends TestCase
1718
{
19+
/**
20+
* @var ConnectionValidator
21+
*/
1822
private $connectionValidator;
1923

24+
/**
25+
* @var ClientResolver|MockObject
26+
*/
2027
private $clientResolverMock;
2128

29+
/**
30+
* @var Elasticsearch|MockObject
31+
*/
2232
private $elasticsearchClientMock;
2333

2434
protected function setUp()
@@ -41,61 +51,29 @@ protected function setUp()
4151

4252
public function testValidate()
4353
{
44-
$configuration = [
45-
'search-engine' => 'elasticsearch5',
46-
'elasticsearch-host' => 'localhost',
47-
'elasticsearch-port' => '9200',
48-
'elasticsearch-index-prefix' => 'm2',
49-
'elasticsearch-enable-auth' => false,
50-
'elasticsearch-timeout' => 20
51-
];
52-
$mappedConfig = [
53-
'hostname' => 'localhost',
54-
'port' => '9200',
55-
'index' => 'm2',
56-
'enableAuth' => false,
57-
'username' => null,
58-
'password' => null,
59-
'timeout' => 20
60-
];
54+
$searchEngine = 'elasticsearch5';
6155

6256
$this->clientResolverMock
6357
->expects($this->once())
6458
->method('create')
65-
->with($configuration['search-engine'], $mappedConfig)
59+
->with($searchEngine)
6660
->willReturn($this->elasticsearchClientMock);
6761
$this->elasticsearchClientMock->expects($this->once())->method('testConnection')->willReturn(true);
6862

69-
$this->assertTrue($this->connectionValidator->validate($configuration));
63+
$this->assertTrue($this->connectionValidator->validate($searchEngine));
7064
}
7165

7266
public function testValidateFail()
7367
{
74-
$configuration = [
75-
'search-engine' => 'elasticsearch5',
76-
'elasticsearch-host' => 'localhost',
77-
'elasticsearch-port' => '9200',
78-
'elasticsearch-index-prefix' => 'm2',
79-
'elasticsearch-enable-auth' => true,
80-
'elasticsearch-timeout' => 20
81-
];
82-
$mappedConfig = [
83-
'hostname' => 'localhost',
84-
'port' => '9200',
85-
'index' => 'm2',
86-
'enableAuth' => true,
87-
'username' => null,
88-
'password' => null,
89-
'timeout' => 20
90-
];
68+
$searchEngine = 'elasticsearch5';
9169

9270
$this->clientResolverMock
9371
->expects($this->once())
9472
->method('create')
95-
->with($configuration['search-engine'], $mappedConfig)
73+
->with($searchEngine)
9674
->willReturn($this->elasticsearchClientMock);
9775
$this->elasticsearchClientMock->expects($this->once())->method('testConnection')->willReturn(false);
9876

99-
$this->assertFalse($this->connectionValidator->validate($configuration));
77+
$this->assertFalse($this->connectionValidator->validate($searchEngine));
10078
}
10179
}

app/code/Magento/Elasticsearch/Test/Unit/Setup/InstallConfigTest.php

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,24 @@
1111
use Magento\Elasticsearch\Setup\InstallConfig;
1212
use Magento\Framework\App\Config\Storage\WriterInterface;
1313
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
14+
use PHPUnit\Framework\MockObject\MockObject;
1415
use PHPUnit\Framework\TestCase;
1516

1617
class InstallConfigTest extends TestCase
1718
{
19+
/**
20+
* @var InstallConfig
21+
*/
1822
private $installConfig;
1923

24+
/**
25+
* @var ConnectionValidator|MockObject
26+
*/
2027
private $validatorMock;
2128

29+
/**
30+
* @var WriterInterface|MockObject
31+
*/
2232
private $configWriterMock;
2333

2434
protected function setup()
@@ -28,7 +38,6 @@ protected function setup()
2838
->getMock();
2939
$this->configWriterMock = $this->getMockBuilder(WriterInterface::class)->getMockForAbstractClass();
3040

31-
3241
$objectManager = new ObjectManager($this);
3342
$this->installConfig = $objectManager->getObject(
3443
InstallConfig::class,
@@ -56,7 +65,6 @@ public function testConfigure()
5665
'elasticsearch-port' => '9200'
5766
];
5867

59-
$this->validatorMock->expects($this->once())->method('validate')->with($inputOptions)->willReturn(true);
6068
$this->configWriterMock
6169
->expects($this->at(0))
6270
->method('save')
@@ -70,12 +78,14 @@ public function testConfigure()
7078
->method('save')
7179
->with('catalog/search/elasticsearch5_server_port', '9200');
7280

81+
$this->validatorMock->expects($this->once())->method('validate')->with('elasticsearch5')->willReturn(true);
82+
7383
$this->installConfig->configure($inputOptions);
7484
}
7585

7686
/**
7787
* @expectedException \Magento\Framework\Exception\InputException
78-
* @expectedExceptionMessage Could not connect to Elasticsearch server.
88+
* @expectedExceptionMessage Connection to Elasticsearch cannot be established. Please check the configuration and try again.
7989
*/
8090
public function testConfigureValidateFail()
8191
{
@@ -85,8 +95,20 @@ public function testConfigureValidateFail()
8595
'elasticsearch-port' => '9200'
8696
];
8797

88-
$this->validatorMock->expects($this->once())->method('validate')->with($inputOptions)->willReturn(false);
89-
$this->configWriterMock->expects($this->never())->method('save');
98+
$this->configWriterMock
99+
->expects($this->at(0))
100+
->method('save')
101+
->with('catalog/search/engine', 'elasticsearch5');
102+
$this->configWriterMock
103+
->expects($this->at(1))
104+
->method('save')
105+
->with('catalog/search/elasticsearch5_server_hostname', 'es.domain.com');
106+
$this->configWriterMock
107+
->expects($this->at(2))
108+
->method('save')
109+
->with('catalog/search/elasticsearch5_server_port', '9200');
110+
111+
$this->validatorMock->expects($this->once())->method('validate')->with('elasticsearch5')->willReturn(false);
90112

91113
$this->installConfig->configure($inputOptions);
92114
}
@@ -100,7 +122,6 @@ public function testConfigureWithSkipValidation()
100122
'skip-elasticsearch-validation' => true
101123
];
102124

103-
$this->validatorMock->expects($this->never())->method('validate');
104125
$this->configWriterMock
105126
->expects($this->at(0))
106127
->method('save')
@@ -113,6 +134,7 @@ public function testConfigureWithSkipValidation()
113134
->expects($this->at(2))
114135
->method('save')
115136
->with('catalog/search/elasticsearch5_server_port', '9200');
137+
$this->validatorMock->expects($this->never())->method('validate');
116138

117139
$this->installConfig->configure($inputOptions);
118140
}

app/code/Magento/Elasticsearch/etc/di.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,6 @@
508508
</argument>
509509
</arguments>
510510
</type>
511-
512511
<type name="Magento\Elasticsearch\Setup\InstallConfig">
513512
<arguments>
514513
<argument name="searchConfigMapping" xsi:type="array">
@@ -522,7 +521,6 @@
522521
</argument>
523522
</arguments>
524523
</type>
525-
526524
<type name="Magento\Search\Setup\CompositeInstallConfig">
527525
<arguments>
528526
<argument name="installConfigList" xsi:type="array">

app/code/Magento/Elasticsearch6/etc/di.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@
219219
</argument>
220220
</arguments>
221221
</type>
222-
223222
<virtualType name="Magento\Elasticsearch6\Setup\InstallConfig" type="Magento\Elasticsearch\Setup\InstallConfig">
224223
<arguments>
225224
<argument name="searchConfigMapping" xsi:type="array">

app/code/Magento/Elasticsearch7/etc/di.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,6 @@
222222
</arguments>
223223
</type>
224224

225-
226225
<virtualType name="Magento\Elasticsearch7\Setup\InstallConfig" type="Magento\Elasticsearch\Setup\InstallConfig">
227226
<arguments>
228227
<argument name="searchConfigMapping" xsi:type="array">

app/code/Magento/Search/Setup/CompositeInstallConfig.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ public function configure(array $inputOptions)
3535
$searchEngine = $inputOptions['search-engine'];
3636

3737
if (!isset($this->installConfigList[$searchEngine])) {
38-
//TODO better exception handling
3938
throw new InputException(__('Unable to configure search engine: ' . $searchEngine));
4039
}
4140
$installConfig = $this->installConfigList[$searchEngine];

app/code/Magento/Search/Test/Unit/Setup/CompositeInstallConfigTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
class CompositeInstallConfigTest extends TestCase
1616
{
17-
1817
public function testConfigure()
1918
{
2019
$firstInstallConfig = $this->getMockBuilder(InstallConfigInterface::class)->getMock();

app/code/Magento/Search/etc/di.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,5 @@
7878
<argument name="dataStorage" xsi:type="object">Magento\Search\Model\SearchEngine\Config\Data</argument>
7979
</arguments>
8080
</type>
81-
8281
<preference for="Magento\Search\Setup\InstallConfigInterface" type="Magento\Search\Setup\CompositeInstallConfig"/>
8382
</config>

0 commit comments

Comments
 (0)