diff --git a/apps/files_sharing/tests/mountprovidertest.php b/apps/files_sharing/tests/mountprovidertest.php
new file mode 100644
index 000000000000..90d9f0a8567e
--- /dev/null
+++ b/apps/files_sharing/tests/mountprovidertest.php
@@ -0,0 +1,139 @@
+
+ *
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see
+ *
+ */
+
+namespace OCA\Files_Sharing\Tests;
+
+use OCA\Files_Sharing\MountProvider;
+use OCP\Files\Storage\IStorageFactory;
+use OCP\IConfig;
+use OCP\ILogger;
+use OCP\IUser;
+use OCP\Share\IShare;
+use OCP\Share\IManager;
+use OCP\Files\Mount\IMountPoint;
+
+/**
+ * @group DB
+ */
+class MountProviderTest extends \Test\TestCase {
+
+ /** @var MountProvider */
+ private $provider;
+
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
+ private $config;
+
+ /** @var IUser|\PHPUnit_Framework_MockObject_MockObject */
+ private $user;
+
+ /** @var IStorageFactory|\PHPUnit_Framework_MockObject_MockObject */
+ private $loader;
+
+ /** @var IManager|\PHPUnit_Framework_MockObject_MockObject */
+ private $shareManager;
+
+ /** @var ILogger | \PHPUnit_Framework_MockObject_MockObject */
+ private $logger;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->config = $this->getMock('OCP\IConfig');
+ $this->user = $this->getMock('OCP\IUser');
+ $this->loader = $this->getMock('OCP\Files\Storage\IStorageFactory');
+ $this->shareManager = $this->getMock('\OCP\Share\IManager');
+ $this->logger = $this->getMock('\OCP\ILogger');
+
+ $this->provider = new MountProvider($this->config, $this->shareManager, $this->logger);
+ }
+
+ public function testExcludeShares() {
+ /** @var IShare | \PHPUnit_Framework_MockObject_MockObject $share1 */
+ $share1 = $this->getMock('\OCP\Share\IShare');
+ $share1->expects($this->once())
+ ->method('getPermissions')
+ ->will($this->returnValue(0));
+
+ $share2 = $this->getMock('\OCP\Share\IShare');
+ $share2->expects($this->once())
+ ->method('getPermissions')
+ ->will($this->returnValue(31));
+ $share2->expects($this->any())
+ ->method('getShareOwner')
+ ->will($this->returnValue('user2'));
+ $share2->expects($this->any())
+ ->method('getTarget')
+ ->will($this->returnValue('/share2'));
+
+ $share3 = $this->getMock('\OCP\Share\IShare');
+ $share3->expects($this->once())
+ ->method('getPermissions')
+ ->will($this->returnValue(0));
+
+ /** @var IShare | \PHPUnit_Framework_MockObject_MockObject $share4 */
+ $share4 = $this->getMock('\OCP\Share\IShare');
+ $share4->expects($this->once())
+ ->method('getPermissions')
+ ->will($this->returnValue(31));
+ $share4->expects($this->any())
+ ->method('getShareOwner')
+ ->will($this->returnValue('user2'));
+ $share4->expects($this->any())
+ ->method('getTarget')
+ ->will($this->returnValue('/share4'));
+
+ $share5 = $this->getMock('\OCP\Share\IShare');
+ $share5->expects($this->once())
+ ->method('getPermissions')
+ ->will($this->returnValue(31));
+ $share5->expects($this->any())
+ ->method('getShareOwner')
+ ->will($this->returnValue('user1'));
+
+ $userShares = [$share1, $share2];
+ $groupShares = [$share3, $share4, $share5];
+
+ $this->user->expects($this->any())
+ ->method('getUID')
+ ->will($this->returnValue('user1'));
+
+ $this->shareManager->expects($this->at(0))
+ ->method('getSharedWith')
+ ->with('user1', \OCP\Share::SHARE_TYPE_USER)
+ ->will($this->returnValue($userShares));
+ $this->shareManager->expects($this->at(1))
+ ->method('getSharedWith')
+ ->with('user1', \OCP\Share::SHARE_TYPE_GROUP, null, -1)
+ ->will($this->returnValue($groupShares));
+
+ $mounts = $this->provider->getMountsForUser($this->user, $this->loader);
+
+ $this->assertCount(2, $mounts);
+ $this->assertSharedMount($share1, $mounts[0]);
+ $this->assertSharedMount($share4, $mounts[1]);
+ }
+
+ private function assertSharedMount(IShare $share, IMountPoint $mount) {
+ $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mount);
+ $this->assertEquals($share, $mount->getShare());
+ }
+}
+
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index bf49ea2148df..0bc9ad211a85 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -1959,7 +1959,7 @@ private function unlockPath($path, $type, $lockMountPoint = false) {
$mount = $this->getMountForLock($absolutePath, $lockMountPoint);
if ($mount) {
$storage = $mount->getStorage();
- if ($storage->instanceOfStorage('\OCP\Files\Storage\ILockingStorage')) {
+ if ($storage && $storage->instanceOfStorage('\OCP\Files\Storage\ILockingStorage')) {
$storage->releaseLock(
$mount->getInternalPath($absolutePath),
$type,
diff --git a/tests/objectstore/start-swift-ceph.sh b/tests/objectstore/start-swift-ceph.sh
index 089aab6a6487..bbf483c28970 100755
--- a/tests/objectstore/start-swift-ceph.sh
+++ b/tests/objectstore/start-swift-ceph.sh
@@ -30,6 +30,7 @@ thisFolder="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# create readiness notification socket
notify_sock=$(readlink -f "$thisFolder"/dockerContainerCeph.$EXECUTOR_NUMBER.swift.sock)
+rm -f "$notify_sock" # in case an unfinished test left one behind
mkfifo "$notify_sock"
port=5034
@@ -67,7 +68,13 @@ if [[ $ready != 'READY=1' ]]; then
docker logs $container
exit 1
fi
-sleep 1
+if ! "$thisFolder"/wait-for-connection ${host} 80 600; then
+ echo "[ERROR] Waited 600 seconds, no response" >&2
+ docker logs $container
+ exit 1
+fi
+echo "Waiting another 15 seconds"
+sleep 15
cat > $thisFolder/swift.config.php < $timeout) {
+ $socketTimeout = $timeout;
+}
+
+$stopTime = time() + $timeout;
+do {
+ $sock = @fsockopen($host, $port, $errno, $errstr, $socketTimeout);
+ if ($sock !== false) {
+ fclose($sock);
+ fwrite(STDOUT, "\n");
+ exit(0);
+ }
+ sleep(1);
+ fwrite(STDOUT, '.');
+} while (time() < $stopTime);
+
+fwrite(STDOUT, "\n");
+exit(1);