diff --git a/src/Elasticsearch/ClientBuilder.php b/src/Elasticsearch/ClientBuilder.php index 0be2affee..e643b878e 100644 --- a/src/Elasticsearch/ClientBuilder.php +++ b/src/Elasticsearch/ClientBuilder.php @@ -42,6 +42,8 @@ class ClientBuilder { + const ALLOWED_METHODS_FROM_CONFIG = ['includePortInHostHeader']; + /** * @var Transport */ @@ -197,7 +199,7 @@ public static function fromConfig(array $config, bool $quiet = false): Client { $builder = new static; foreach ($config as $key => $value) { - $method = "set$key"; + $method = in_array($key, self::ALLOWED_METHODS_FROM_CONFIG) ? $key : "set$key"; $reflection = new ReflectionClass($builder); if ($reflection->hasMethod($method)) { $func = $reflection->getMethod($method); diff --git a/tests/Elasticsearch/Tests/ClientBuilderTest.php b/tests/Elasticsearch/Tests/ClientBuilderTest.php index 330e48aaf..7f754ad38 100644 --- a/tests/Elasticsearch/Tests/ClientBuilderTest.php +++ b/tests/Elasticsearch/Tests/ClientBuilderTest.php @@ -216,6 +216,9 @@ public function testFromConfig(array $params) $this->assertInstanceOf(Client::class, $client); } + /** + * @doesNotPerformAssertions + */ public function testFromConfigQuiteTrueWithUnknownKey() { $client = ClientBuilder::fromConfig( @@ -344,4 +347,33 @@ public function testCompatibilityHeaderDefaultIsOff() $this->assertNotContains('application/vnd.elasticsearch+json;compatible-with=7', $request['request']['headers']['Accept']); } } + + /** + * @see https://github.com/elastic/elasticsearch-php/issues/1176 + */ + public function testFromConfigWithIncludePortInHostHeader() + { + $url = 'localhost:1234'; + $config = [ + 'hosts' => [$url], + 'includePortInHostHeader' => true, + 'connectionParams' => [ + 'client' => [ + 'verbose' => true + ] + ], + ]; + + $client = ClientBuilder::fromConfig($config); + + $this->assertInstanceOf(Client::class, $client); + + try { + $result = $client->info(); + } catch (ElasticsearchException $e) { + $request = $client->transport->getLastConnection()->getLastRequestInfo(); + $this->assertTrue(isset($request['request']['headers']['Host'][0])); + $this->assertEquals($url, $request['request']['headers']['Host'][0]); + } + } }