From: Vincent Petry Date: Mon, 23 Mar 2015 16:41:32 +0000 (+0100) Subject: Soft fail in CustomPropertiesBackend whenever storage not available X-Git-Tag: v8.1.0alpha1~203^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=eb894e662523709b2b3915b14354aa6adab03c86;p=nextcloud-server.git Soft fail in CustomPropertiesBackend whenever storage not available When a storage is not available, it will not fail the whole call any more but still return a usable file list. --- diff --git a/lib/private/connector/sabre/custompropertiesbackend.php b/lib/private/connector/sabre/custompropertiesbackend.php index 6827cb9ae0d..9bd6452674b 100644 --- a/lib/private/connector/sabre/custompropertiesbackend.php +++ b/lib/private/connector/sabre/custompropertiesbackend.php @@ -30,6 +30,7 @@ use Sabre\DAV\PropFind; use Sabre\DAV\PropPatch; use Sabre\DAV\Tree; use Sabre\DAV\Exception\NotFound; +use Sabre\DAV\Exception\ServiceUnavailable; class CustomPropertiesBackend implements BackendInterface { @@ -100,6 +101,9 @@ class CustomPropertiesBackend implements BackendInterface { if (!($node instanceof Node)) { return; } + } catch (ServiceUnavailable $e) { + // might happen for unavailable mount points, skip + return; } catch (NotFound $e) { // in some rare (buggy) cases the node might not be found, // we catch the exception to prevent breaking the whole list with a 404 diff --git a/tests/lib/connector/sabre/custompropertiesbackend.php b/tests/lib/connector/sabre/custompropertiesbackend.php index 8b6d1a90db1..212bece9402 100644 --- a/tests/lib/connector/sabre/custompropertiesbackend.php +++ b/tests/lib/connector/sabre/custompropertiesbackend.php @@ -105,11 +105,16 @@ class CustomPropertiesBackend extends \Test\TestCase { * Test that propFind on a missing file soft fails */ public function testPropFindMissingFileSoftFail() { - $this->tree->expects($this->any()) + $this->tree->expects($this->at(0)) ->method('getNodeForPath') ->with('/dummypath') ->will($this->throwException(new \Sabre\DAV\Exception\NotFound())); + $this->tree->expects($this->at(1)) + ->method('getNodeForPath') + ->with('/dummypath') + ->will($this->throwException(new \Sabre\DAV\Exception\ServiceUnavailable())); + $propFind = new \Sabre\DAV\PropFind( '/dummypath', array( @@ -125,6 +130,11 @@ class CustomPropertiesBackend extends \Test\TestCase { $propFind ); + $this->plugin->propFind( + '/dummypath', + $propFind + ); + // no exception, soft fail $this->assertTrue(true); }