From 0270c4f444a45ee7d90dee7a8f4221afa019979f Mon Sep 17 00:00:00 2001 From: Martin Hujer Date: Thu, 30 Nov 2017 21:37:25 +0100 Subject: [PATCH] ClientBuilder: setLogger() and setTracer() only accept \Psr\Log\LoggerInterface (#673) This is a more verbose approach than directly adding typehints, but it won't break the projects which may be extending ClientBuilder. --- phpstan.neon | 3 ++ src/Elasticsearch/ClientBuilder.php | 8 +++++ .../Tests/ClientBuilder/DummyLogger.php | 9 ++++++ .../Elasticsearch/Tests/ClientBuilderTest.php | 29 +++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 tests/Elasticsearch/Tests/ClientBuilder/DummyLogger.php create mode 100644 tests/Elasticsearch/Tests/ClientBuilderTest.php diff --git a/phpstan.neon b/phpstan.neon index 8c29546c7..82066adfd 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -7,3 +7,6 @@ parameters: # because of \Elasticsearch\Tests\RegisteredNamespaceTest - '#Call to an undefined method Elasticsearch\\Client::foo\(\)#' - '#Call to an undefined method Elasticsearch\\Client::bar\(\)#' + + # because of \Elasticsearch\Tests\ClientBuilderTest + - '#expects Psr\\Log\\LoggerInterface, Elasticsearch\\Tests\\ClientBuilder\\DummyLogger given.$#' diff --git a/src/Elasticsearch/ClientBuilder.php b/src/Elasticsearch/ClientBuilder.php index d26086a2a..41029a09e 100644 --- a/src/Elasticsearch/ClientBuilder.php +++ b/src/Elasticsearch/ClientBuilder.php @@ -307,6 +307,10 @@ public function setHandler($handler) */ public function setLogger($logger) { + if (!$logger instanceof LoggerInterface) { + throw new InvalidArgumentException('$logger must implement \Psr\Log\LoggerInterface!'); + } + $this->logger = $logger; return $this; @@ -318,6 +322,10 @@ public function setLogger($logger) */ public function setTracer($tracer) { + if (!$tracer instanceof LoggerInterface) { + throw new InvalidArgumentException('$tracer must implement \Psr\Log\LoggerInterface!'); + } + $this->tracer = $tracer; return $this; diff --git a/tests/Elasticsearch/Tests/ClientBuilder/DummyLogger.php b/tests/Elasticsearch/Tests/ClientBuilder/DummyLogger.php new file mode 100644 index 000000000..f5c536c77 --- /dev/null +++ b/tests/Elasticsearch/Tests/ClientBuilder/DummyLogger.php @@ -0,0 +1,9 @@ +expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('$logger must implement \Psr\Log\LoggerInterface!'); + + ClientBuilder::create()->setLogger(new \Elasticsearch\Tests\ClientBuilder\DummyLogger()); + } + + public function testClientBuilderThrowsExceptionForIncorrectTracerClass() + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('$tracer must implement \Psr\Log\LoggerInterface!'); + + ClientBuilder::create()->setTracer(new \Elasticsearch\Tests\ClientBuilder\DummyLogger()); + } +}