summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2015-04-24 15:07:36 +0200
committerJoas Schilling <nickvergessen@gmx.de>2015-04-24 15:07:36 +0200
commit4334e770355df1583011c7e015b5caee48c91204 (patch)
tree7c68692e9001ada4c371f8ffc1b92d4f3509d93e /tests
parent8cefc657a1249418347720ea00b75cfab81d1fd5 (diff)
parent411f7893bf34507ba0b12b35a35596cd65c90b48 (diff)
downloadnextcloud-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.php129
-rw-r--r--tests/lib/encryption/utiltest.php21
-rw-r--r--tests/lib/files/storage/wrapper/encryption.php145
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),
+ );
+ }
+
}