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);