From b92ae4539d1bb6c31ae6f9ddb002b0ccf5afb512 Mon Sep 17 00:00:00 2001 From: David Maus <maus@hab.de> Date: Thu, 30 May 2013 11:27:05 +0200 Subject: [PATCH] Attach SOLR ErrorListener to backend instance, not name --- .../Search/Solr/AbstractErrorListener.php | 27 ++++++++----------- .../VuFind/Search/Solr/V3/ErrorListener.php | 2 +- .../VuFind/Search/Solr/V4/ErrorListener.php | 2 +- .../src/Search/Solr/V3/ErrorListenerTest.php | 12 +++++---- .../src/Search/Solr/V4/ErrorListenerTest.php | 10 ++++--- 5 files changed, 26 insertions(+), 27 deletions(-) diff --git a/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php index 5ee81b7691c..43561a87e09 100644 --- a/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php +++ b/module/VuFind/src/VuFind/Search/Solr/AbstractErrorListener.php @@ -33,6 +33,8 @@ use VuFindSearch\Backend\BackendInterface; use Zend\EventManager\EventInterface; +use SplObjectStorage; + /** * Abstract base class of SOLR error listeners. * @@ -56,7 +58,7 @@ abstract class AbstractErrorListener /** * Backends to listen for. * - * @var array + * @var SplObjectStorage */ protected $backends; @@ -67,41 +69,34 @@ abstract class AbstractErrorListener * * @return void */ - public function __construct($backend) + public function __construct(BackendInterface $backend) { - $this->backends = array(); + $this->backends = new SplObjectStorage(); $this->addBackend($backend); } /** * Add backend to listen for. * - * @param BackendInterface|string $backend Backend instance or name of backend + * @param BackendInterface $backend Backend instance * * @return void */ - public function addBackend($backend) + public function addBackend(BackendInterface $backend) { - if ($backend instanceOf BackendInterface) { - $this->backends[] = $backend->getName(); - } else { - $this->backends[] = $backend; - } + $this->backends->attach($backend); } /** * Return true if listeners listens for backend errors. * - * @param BackendInterface|string $backend Backend instance or name of backend + * @param BackendInterface $backend Backend instance * * @return boolean */ - public function listenForBackend($backend) + public function listenForBackend(BackendInterface $backend) { - if ($backend instanceOf BackendInterface) { - $backend = $backend->getName(); - } - return in_array($backend, $this->backends); + return $this->backends->contains($backend); } /** diff --git a/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php index f42bb6cb2c9..5133f75b27e 100644 --- a/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php +++ b/module/VuFind/src/VuFind/Search/Solr/V3/ErrorListener.php @@ -55,7 +55,7 @@ class ErrorListener extends AbstractErrorListener */ public function onSearchError(EventInterface $event) { - $backend = $event->getParam('backend'); + $backend = $event->getParam('backend_instance'); if ($this->listenForBackend($backend)) { $error = $event->getTarget(); if ($error instanceOf HttpErrorException) { diff --git a/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php b/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php index 8458a439b17..af6fa05ce86 100644 --- a/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php +++ b/module/VuFind/src/VuFind/Search/Solr/V4/ErrorListener.php @@ -65,7 +65,7 @@ class ErrorListener extends AbstractErrorListener */ public function onSearchError(EventInterface $event) { - $backend = $event->getParam('backend'); + $backend = $event->getParam('backend_instance'); if ($this->listenForBackend($backend)) { $error = $event->getTarget(); if ($error instanceOf HttpErrorException) { diff --git a/module/VuFind/tests/unit-tests/src/Search/Solr/V3/ErrorListenerTest.php b/module/VuFind/tests/unit-tests/src/Search/Solr/V3/ErrorListenerTest.php index 708fe31e593..50dcb9e10d9 100644 --- a/module/VuFind/tests/unit-tests/src/Search/Solr/V3/ErrorListenerTest.php +++ b/module/VuFind/tests/unit-tests/src/Search/Solr/V3/ErrorListenerTest.php @@ -58,12 +58,13 @@ class ErrorListenerTest extends TestCase */ public function testDetectParseError() { - $response = $this->createResponse('solr3-parse-error'); + $response = $this->createResponse('solr3-parse-error'); + $backend = $this->getMockForAbstractClass('VuFindSearch\Backend\BackendInterface'); $exception = HttpErrorException::createFromResponse($response); - $params = array('backend' => 'test'); + $params = array('backend_instance' => $backend); $event = new Event(null, $exception, $params); - $listener = new ErrorListener('test'); + $listener = new ErrorListener($backend); $listener->onSearchError($event); $this->assertTrue($exception->hasTag('VuFind\Search\ParserError')); } @@ -76,11 +77,12 @@ class ErrorListenerTest extends TestCase public function testDetectUndefinedFieldError() { $response = $this->createResponse('solr3-undefined-field-error'); + $backend = $this->getMockForAbstractClass('VuFindSearch\Backend\BackendInterface'); $exception = HttpErrorException::createFromResponse($response); - $params = array('backend' => 'test'); + $params = array('backend_instance' => $backend); $event = new Event(null, $exception, $params); - $listener = new ErrorListener('test'); + $listener = new ErrorListener($backend); $listener->onSearchError($event); $this->assertTrue($exception->hasTag('VuFind\Search\ParserError')); } diff --git a/module/VuFind/tests/unit-tests/src/Search/Solr/V4/ErrorListenerTest.php b/module/VuFind/tests/unit-tests/src/Search/Solr/V4/ErrorListenerTest.php index 84d51543757..a4b3e8a7813 100644 --- a/module/VuFind/tests/unit-tests/src/Search/Solr/V4/ErrorListenerTest.php +++ b/module/VuFind/tests/unit-tests/src/Search/Solr/V4/ErrorListenerTest.php @@ -59,11 +59,12 @@ class ErrorListenerTest extends TestCase public function testDetectParseError() { $response = $this->createResponse('solr4-parse-error'); + $backend = $this->getMockForAbstractClass('VuFindSearch\Backend\BackendInterface'); $exception = HttpErrorException::createFromResponse($response); - $params = array('backend' => 'test'); + $params = array('backend_instance' => $backend); $event = new Event(null, $exception, $params); - $listener = new ErrorListener('test'); + $listener = new ErrorListener($backend); $listener->onSearchError($event); $this->assertTrue($exception->hasTag('VuFind\Search\ParserError')); } @@ -76,11 +77,12 @@ class ErrorListenerTest extends TestCase public function testDetectUndefinedFieldError() { $response = $this->createResponse('solr4-undefined-field-error'); + $backend = $this->getMockForAbstractClass('VuFindSearch\Backend\BackendInterface'); $exception = HttpErrorException::createFromResponse($response); - $params = array('backend' => 'test'); + $params = array('backend_instance' => $backend); $event = new Event(null, $exception, $params); - $listener = new ErrorListener('test'); + $listener = new ErrorListener($backend); $listener->onSearchError($event); $this->assertTrue($exception->hasTag('VuFind\Search\ParserError')); } -- GitLab