diff options
author | Björn Schießle <bjoern@schiessle.org> | 2015-05-12 13:10:16 +0200 |
---|---|---|
committer | Björn Schießle <bjoern@schiessle.org> | 2015-05-12 13:10:16 +0200 |
commit | fbe4b77c4946ea4be1ddb3886023f043b8d9eebe (patch) | |
tree | fa1d94561b52d3797102d0439b1d813c95f4ff5b /tests | |
parent | b11c0c533e8d447e9193cd618bf11023e6216863 (diff) | |
parent | 0d5c7a11e287f44ad556d29b952c57c9ec11dfaa (diff) | |
download | nextcloud-server-fbe4b77c4946ea4be1ddb3886023f043b8d9eebe.tar.gz nextcloud-server-fbe4b77c4946ea4be1ddb3886023f043b8d9eebe.zip |
Merge pull request #16228 from owncloud/enc_fix_restore
use hooks to update encryption keys
Diffstat (limited to 'tests')
-rw-r--r-- | tests/lib/encryption/updatetest.php | 115 | ||||
-rw-r--r-- | tests/lib/files/storage/wrapper/encryption.php | 11 |
2 files changed, 112 insertions, 14 deletions
diff --git a/tests/lib/encryption/updatetest.php b/tests/lib/encryption/updatetest.php index 790d071aa68..b222bc42d7a 100644 --- a/tests/lib/encryption/updatetest.php +++ b/tests/lib/encryption/updatetest.php @@ -68,10 +68,6 @@ class UpdateTest extends TestCase { $this->encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') ->disableOriginalConstructor()->getMock(); - $this->encryptionManager->expects($this->once()) - ->method('getEncryptionModule') - ->willReturn($this->encryptionModule); - $this->uid = 'testUser1'; $this->update = new Update( @@ -93,6 +89,10 @@ class UpdateTest extends TestCase { */ public function testUpdate($path, $isDir, $allFiles, $numberOfFiles) { + $this->encryptionManager->expects($this->once()) + ->method('getEncryptionModule') + ->willReturn($this->encryptionModule); + $this->view->expects($this->once()) ->method('is_dir') ->willReturn($isDir); @@ -126,4 +126,111 @@ class UpdateTest extends TestCase { ); } + /** + * @dataProvider dataTestPostRename + * + * @param string $source + * @param string $target + * @param boolean $encryptionEnabled + */ + public function testPostRename($source, $target, $encryptionEnabled) { + + $updateMock = $this->getUpdateMock(['update', 'getOwnerPath']); + + $this->encryptionManager->expects($this->once()) + ->method('isEnabled') + ->willReturn($encryptionEnabled); + + if (dirname($source) === dirname($target) || $encryptionEnabled === false) { + $updateMock->expects($this->never())->method('getOwnerPath'); + $updateMock->expects($this->never())->method('update'); + } else { + $updateMock->expects($this->once()) + ->method('getOwnerPath') + ->willReturnCallback(function($path) use ($target) { + $this->assertSame( + $target, + $path, + 'update needs to be executed for the target destination'); + return ['owner', $path]; + + }); + $updateMock->expects($this->once())->method('update'); + } + + $updateMock->postRename(['oldpath' => $source, 'newpath' => $target]); + } + + /** + * test data for testPostRename() + * + * @return array + */ + public function dataTestPostRename() { + return array( + array('/test.txt', '/testNew.txt', true), + array('/test.txt', '/testNew.txt', false), + array('/folder/test.txt', '/testNew.txt', true), + array('/folder/test.txt', '/testNew.txt', false), + array('/folder/test.txt', '/testNew.txt', true), + array('/test.txt', '/folder/testNew.txt', false), + ); + } + + + /** + * @dataProvider dataTestPostRestore + * + * @param boolean $encryptionEnabled + */ + public function testPostRestore($encryptionEnabled) { + + $updateMock = $this->getUpdateMock(['update']); + + $this->encryptionManager->expects($this->once()) + ->method('isEnabled') + ->willReturn($encryptionEnabled); + + if ($encryptionEnabled) { + $updateMock->expects($this->once())->method('update'); + + } else { + $updateMock->expects($this->never())->method('update'); + } + + $updateMock->postRestore(['filePath' => '/folder/test.txt']); + } + + /** + * test data for testPostRestore() + * + * @return array + */ + public function dataTestPostRestore() { + return array( + array(true), + array(false), + ); + } + + /** + * create mock of the update method + * + * @param array$methods methods which should be set + * @return \OC\Encryption\Update | \PHPUnit_Framework_MockObject_MockObject + */ + protected function getUpdateMock($methods) { + return $this->getMockBuilder('\OC\Encryption\Update') + ->setConstructorArgs( + [ + $this->view, + $this->util, + $this->mountManager, + $this->encryptionManager, + $this->fileHelper, + $this->uid + ] + )->setMethods($methods)->getMock(); + } + } diff --git a/tests/lib/files/storage/wrapper/encryption.php b/tests/lib/files/storage/wrapper/encryption.php index d4492e00928..97810c9c5dd 100644 --- a/tests/lib/files/storage/wrapper/encryption.php +++ b/tests/lib/files/storage/wrapper/encryption.php @@ -157,13 +157,11 @@ class Encryption extends \Test\Files\Storage\Storage { * @param string $target * @param $encryptionEnabled * @param boolean $renameKeysReturn - * @param boolean $shouldUpdate */ public function testRename($source, $target, $encryptionEnabled, - $renameKeysReturn, - $shouldUpdate) { + $renameKeysReturn) { if ($encryptionEnabled) { $this->keyStore ->expects($this->once()) @@ -177,13 +175,6 @@ class Encryption extends \Test\Files\Storage\Storage { ->method('isFile')->willReturn(true); $this->encryptionManager->expects($this->once()) ->method('isEnabled')->willReturn($encryptionEnabled); - 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)); |