diff options
author | Joas Schilling <nickvergessen@gmx.de> | 2015-04-24 15:07:36 +0200 |
---|---|---|
committer | Joas Schilling <nickvergessen@gmx.de> | 2015-04-24 15:07:36 +0200 |
commit | 4334e770355df1583011c7e015b5caee48c91204 (patch) | |
tree | 7c68692e9001ada4c371f8ffc1b92d4f3509d93e /tests | |
parent | 8cefc657a1249418347720ea00b75cfab81d1fd5 (diff) | |
parent | 411f7893bf34507ba0b12b35a35596cd65c90b48 (diff) | |
download | nextcloud-server-4334e770355df1583011c7e015b5caee48c91204.tar.gz nextcloud-server-4334e770355df1583011c7e015b5caee48c91204.zip |
Merge pull request #15839 from owncloud/enc_fix_moving_shared_files
[encryption] fix moving files to a shared folder
Diffstat (limited to 'tests')
-rw-r--r-- | tests/lib/encryption/updatetest.php | 129 | ||||
-rw-r--r-- | tests/lib/encryption/utiltest.php | 21 | ||||
-rw-r--r-- | tests/lib/files/storage/wrapper/encryption.php | 145 |
3 files changed, 272 insertions, 23 deletions
diff --git a/tests/lib/encryption/updatetest.php b/tests/lib/encryption/updatetest.php new file mode 100644 index 00000000000..08d4125735d --- /dev/null +++ b/tests/lib/encryption/updatetest.php @@ -0,0 +1,129 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * + * @copyright Copyright (c) 2015, 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 <http://www.gnu.org/licenses/> + * + */ + + +namespace Test\Encryption; + + +use OC\Encryption\Update; +use Test\TestCase; + +class UpdateTest extends TestCase { + + /** @var \OC\Encryption\Update */ + private $update; + + /** @var string */ + private $uid; + + /** @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject */ + private $view; + + /** @var \OC\Encryption\Util | \PHPUnit_Framework_MockObject_MockObject */ + private $util; + + /** @var \OC\Files\Mount\Manager | \PHPUnit_Framework_MockObject_MockObject */ + private $mountManager; + + /** @var \OC\Encryption\Manager | \PHPUnit_Framework_MockObject_MockObject */ + private $encryptionManager; + + /** @var \OCP\Encryption\IEncryptionModule | \PHPUnit_Framework_MockObject_MockObject */ + private $encryptionModule; + + /** @var \OC\Encryption\File | \PHPUnit_Framework_MockObject_MockObject */ + private $fileHelper; + + protected function setUp() { + parent::setUp(); + + $this->view = $this->getMockBuilder('\OC\Files\View') + ->disableOriginalConstructor()->getMock(); + $this->util = $this->getMockBuilder('\OC\Encryption\Util') + ->disableOriginalConstructor()->getMock(); + $this->mountManager = $this->getMockBuilder('\OC\Files\Mount\Manager') + ->disableOriginalConstructor()->getMock(); + $this->encryptionManager = $this->getMockBuilder('\OC\Encryption\Manager') + ->disableOriginalConstructor()->getMock(); + $this->fileHelper = $this->getMockBuilder('\OC\Encryption\File') + ->disableOriginalConstructor()->getMock(); + $this->encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') + ->disableOriginalConstructor()->getMock(); + + $this->encryptionManager->expects($this->once()) + ->method('getDefaultEncryptionModule') + ->willReturn($this->encryptionModule); + + $this->uid = 'testUser1'; + + $this->update = new Update( + $this->view, + $this->util, + $this->mountManager, + $this->encryptionManager, + $this->fileHelper, + $this->uid); + } + + /** + * @dataProvider dataTestUpdate + * + * @param string $path + * @param boolean $isDir + * @param array $allFiles + * @param integer $numberOfFiles + */ + public function testUpdate($path, $isDir, $allFiles, $numberOfFiles) { + + $this->view->expects($this->once()) + ->method('is_dir') + ->willReturn($isDir); + + if($isDir) { + $this->util->expects($this->once()) + ->method('getAllFiles') + ->willReturn($allFiles); + } + + $this->fileHelper->expects($this->exactly($numberOfFiles)) + ->method('getAccessList') + ->willReturn(['users' => [], 'public' => false]); + + $this->encryptionModule->expects($this->exactly($numberOfFiles)) + ->method('update') + ->willReturn(true); + + $this->update->update($path); + } + + /** + * data provider for testUpdate() + * + * @return array + */ + public function dataTestUpdate() { + return array( + array('/user/files/foo', true, ['/user/files/foo/file1.txt', '/user/files/foo/file1.txt'], 2), + array('/user/files/test.txt', false, [], 1), + ); + } + +} diff --git a/tests/lib/encryption/utiltest.php b/tests/lib/encryption/utiltest.php index dc6205e16fd..7de57043920 100644 --- a/tests/lib/encryption/utiltest.php +++ b/tests/lib/encryption/utiltest.php @@ -152,4 +152,25 @@ class UtilTest extends TestCase { return false; } + /** + * @dataProvider dataTestIsFile + */ + public function testIsFile($path, $expected) { + $this->assertSame($expected, + $this->util->isFile($path) + ); + } + + public function dataTestIsFile() { + return array( + array('/user/files/test.txt', true), + array('/user/files', true), + array('/user/files_versions/test.txt', false), + array('/user/foo/files/test.txt', false), + array('/files/foo/files/test.txt', false), + array('/user', false), + array('/user/test.txt', false), + ); + } + } diff --git a/tests/lib/files/storage/wrapper/encryption.php b/tests/lib/files/storage/wrapper/encryption.php index 1d776555503..de43c24659e 100644 --- a/tests/lib/files/storage/wrapper/encryption.php +++ b/tests/lib/files/storage/wrapper/encryption.php @@ -13,26 +13,53 @@ class Encryption extends \Test\Files\Storage\Storage { private $sourceStorage; /** + * @var \OC\Files\Storage\Wrapper\Encryption + */ + protected $instance; + + /** * @var \OC\Encryption\Keys\Storage | \PHPUnit_Framework_MockObject_MockObject */ private $keyStore; - public function setUp() { + /** + * @var \OC\Encryption\Util | \PHPUnit_Framework_MockObject_MockObject + */ + private $util; + + + /** + * @var \OC\Encryption\Manager | \PHPUnit_Framework_MockObject_MockObject + */ + private $encryptionManager; + + /** + * @var \OCP\Encryption\IEncryptionModule | \PHPUnit_Framework_MockObject_MockObject + */ + private $encryptionModule; + + + /** + * @var \OC\Encryption\Update | \PHPUnit_Framework_MockObject_MockObject + */ + private $update; + + protected function setUp() { parent::setUp(); $mockModule = $this->buildMockModule(); - $encryptionManager = $this->getMockBuilder('\OC\Encryption\Manager') + $this->encryptionManager = $this->getMockBuilder('\OC\Encryption\Manager') ->disableOriginalConstructor() ->setMethods(['getDefaultEncryptionModule', 'getEncryptionModule', 'isEnabled']) ->getMock(); - $encryptionManager->expects($this->any()) + $this->encryptionManager->expects($this->any()) ->method('getDefaultEncryptionModule') ->willReturn($mockModule); - $encryptionManager->expects($this->any()) + $this->encryptionManager->expects($this->any()) ->method('getEncryptionModule') ->willReturn($mockModule); - $encryptionManager->expects($this->any()) + $this->encryptionManager->expects($this->any()) ->method('isEnabled') ->willReturn(true); @@ -43,8 +70,8 @@ class Encryption extends \Test\Files\Storage\Storage { ->disableOriginalConstructor() ->getMock(); - $util = $this->getMock('\OC\Encryption\Util', ['getUidAndFilename'], [new View(), new \OC\User\Manager(), $groupManager, $config]); - $util->expects($this->any()) + $this->util = $this->getMock('\OC\Encryption\Util', ['getUidAndFilename', 'isFile'], [new View(), new \OC\User\Manager(), $groupManager, $config]); + $this->util->expects($this->any()) ->method('getUidAndFilename') ->willReturnCallback(function ($path) { return ['user1', $path]; @@ -61,6 +88,8 @@ class Encryption extends \Test\Files\Storage\Storage { $this->sourceStorage = new Temporary(array()); $this->keyStore = $this->getMockBuilder('\OC\Encryption\Keys\Storage') ->disableOriginalConstructor()->getMock(); + $this->update = $this->getMockBuilder('\OC\Encryption\Update') + ->disableOriginalConstructor()->getMock(); $mount = $this->getMockBuilder('\OC\Files\Mount\MountPoint') ->disableOriginalConstructor() ->setMethods(['getOption']) @@ -72,7 +101,7 @@ class Encryption extends \Test\Files\Storage\Storage { 'mountPoint' => '/', 'mount' => $mount ], - $encryptionManager, $util, $logger, $file, null, $this->keyStore + $this->encryptionManager, $this->util, $logger, $file, null, $this->keyStore, $this->update ); } @@ -80,28 +109,98 @@ class Encryption extends \Test\Files\Storage\Storage { * @return \PHPUnit_Framework_MockObject_MockObject */ protected function buildMockModule() { - $encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') + $this->encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') ->disableOriginalConstructor() ->setMethods(['getId', 'getDisplayName', 'begin', 'end', 'encrypt', 'decrypt', 'update', 'shouldEncrypt', 'getUnencryptedBlockSize']) ->getMock(); - $encryptionModule->expects($this->any())->method('getId')->willReturn('UNIT_TEST_MODULE'); - $encryptionModule->expects($this->any())->method('getDisplayName')->willReturn('Unit test module'); - $encryptionModule->expects($this->any())->method('begin')->willReturn([]); - $encryptionModule->expects($this->any())->method('end')->willReturn(''); - $encryptionModule->expects($this->any())->method('encrypt')->willReturnArgument(0); - $encryptionModule->expects($this->any())->method('decrypt')->willReturnArgument(0); - $encryptionModule->expects($this->any())->method('update')->willReturn(true); - $encryptionModule->expects($this->any())->method('shouldEncrypt')->willReturn(true); - $encryptionModule->expects($this->any())->method('getUnencryptedBlockSize')->willReturn(8192); - return $encryptionModule; + $this->encryptionModule->expects($this->any())->method('getId')->willReturn('UNIT_TEST_MODULE'); + $this->encryptionModule->expects($this->any())->method('getDisplayName')->willReturn('Unit test module'); + $this->encryptionModule->expects($this->any())->method('begin')->willReturn([]); + $this->encryptionModule->expects($this->any())->method('end')->willReturn(''); + $this->encryptionModule->expects($this->any())->method('encrypt')->willReturnArgument(0); + $this->encryptionModule->expects($this->any())->method('decrypt')->willReturnArgument(0); + $this->encryptionModule->expects($this->any())->method('update')->willReturn(true); + $this->encryptionModule->expects($this->any())->method('shouldEncrypt')->willReturn(true); + $this->encryptionModule->expects($this->any())->method('getUnencryptedBlockSize')->willReturn(8192); + return $this->encryptionModule; } - public function testRename() { + /** + * @dataProvider dataTestCopyAndRename + * + * @param string $source + * @param string $target + * @param boolean $renameKeysReturn + * @param boolean $shouldUpdate + */ + public function testRename($source, $target, $renameKeysReturn, $shouldUpdate) { $this->keyStore ->expects($this->once()) - ->method('renameKeys'); - $this->instance->mkdir('folder'); - $this->instance->rename('folder', 'flodder'); + ->method('renameKeys') + ->willReturn($renameKeysReturn); + $this->util->expects($this->any()) + ->method('isFile')->willReturn(true); + if ($shouldUpdate) { + $this->update->expects($this->once()) + ->method('update'); + } else { + $this->update->expects($this->never()) + ->method('update'); + } + + $this->instance->mkdir($source); + $this->instance->mkdir(dirname($target)); + $this->instance->rename($source, $target); + } + + /** + * @dataProvider dataTestCopyAndRename + * + * @param string $source + * @param string $target + * @param boolean $copyKeysReturn + * @param boolean $shouldUpdate + */ + public function testCopyTesting($source, $target, $copyKeysReturn, $shouldUpdate) { + $this->keyStore + ->expects($this->once()) + ->method('copyKeys') + ->willReturn($copyKeysReturn); + $this->util->expects($this->any()) + ->method('isFile')->willReturn(true); + if ($shouldUpdate) { + $this->update->expects($this->once()) + ->method('update'); + } else { + $this->update->expects($this->never()) + ->method('update'); + } + + $this->instance->mkdir($source); + $this->instance->mkdir(dirname($target)); + $this->instance->copy($source, $target); + } + + /** + * @dataProvider copyAndMoveProvider + */ + public function testCopy($source, $target) { + $this->assertTrue(true, 'Replaced by testCopyTesting()'); } + + /** + * data provider for testCopyTesting() and dataTestCopyAndRename() + * + * @return array + */ + public function dataTestCopyAndRename() { + return array( + array('source', 'target', false, false), + array('source', 'target', true, false), + array('source', '/subFolder/target', false, false), + array('source', '/subFolder/target', true, true), + ); + } + } |