diff options
author | Björn Schießle <schiessle@owncloud.com> | 2013-12-16 08:46:52 -0800 |
---|---|---|
committer | Björn Schießle <schiessle@owncloud.com> | 2013-12-16 08:46:52 -0800 |
commit | 4ae148cebdbbab6291a77b62a0ecba2c6b92ae13 (patch) | |
tree | 7f7d0c041c07e3def96d5137b8db8ec6acd46b9b | |
parent | 28a28611fb9bf58bb949342cc105057f643dc1bf (diff) | |
parent | 95892c8be9c1e5a35e8f31e2ab34d233c69e6c35 (diff) | |
download | nextcloud-server-4ae148cebdbbab6291a77b62a0ecba2c6b92ae13.tar.gz nextcloud-server-4ae148cebdbbab6291a77b62a0ecba2c6b92ae13.zip |
Merge pull request #6183 from owncloud/enc_tests
enable more encryption tests
-rw-r--r-- | apps/files_encryption/lib/proxy.php | 16 | ||||
-rw-r--r-- | apps/files_encryption/tests/proxy.php | 69 | ||||
-rwxr-xr-x | apps/files_encryption/tests/share.php | 27 |
3 files changed, 92 insertions, 20 deletions
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index 5ba3bfa784f..96667493a51 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -114,6 +114,15 @@ class Proxy extends \OC_FileProxy { // get encrypted content $data = $view->file_get_contents($tmpPath); + // update file cache for target file + $tmpFileInfo = $view->getFileInfo($tmpPath); + $fileInfo = $view->getFileInfo($path); + if (is_array($fileInfo) && is_array($tmpFileInfo)) { + $fileInfo['encrypted'] = true; + $fileInfo['unencrypted_size'] = $tmpFileInfo['size']; + $view->putFileInfo($path, $fileInfo); + } + // remove our temp file $view->deleteAll('/' . \OCP\User::getUser() . '/cache/' . $cacheFolder); @@ -182,8 +191,11 @@ class Proxy extends \OC_FileProxy { */ public function preUnlink($path) { - // let the trashbin handle this - if (\OCP\App::isEnabled('files_trashbin')) { + $relPath = Helper::stripUserFilesPath($path); + + // skip this method if the trash bin is enabled or if we delete a file + // outside of /data/user/files + if (\OCP\App::isEnabled('files_trashbin') || $relPath === false) { return true; } diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php index a22f12411f4..419f95e1a38 100644 --- a/apps/files_encryption/tests/proxy.php +++ b/apps/files_encryption/tests/proxy.php @@ -44,8 +44,10 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase { /** * @var \OC_FilesystemView */ - public $view; + public $view; // view in /data/user/files + public $rootView; // view on /data/user public $data; + public $filename; public static function setUpBeforeClass() { // reset backend @@ -74,9 +76,12 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase { // init filesystem view $this->view = new \OC_FilesystemView('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '/files'); + $this->rootView = new \OC_FilesystemView('/'. \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 ); // init short data $this->data = 'hats'; + $this->filename = 'enc_proxy_tests-' . time() . '.txt'; + } public static function tearDownAfterClass() { @@ -90,21 +95,71 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase { */ function testPostFileSize() { - // generate filename - $filename = 'tmp-' . time() . '.txt'; - - $this->view->file_put_contents($filename, $this->data); + $this->view->file_put_contents($this->filename, $this->data); \OC_FileProxy::$enabled = false; - $unencryptedSize = $this->view->filesize($filename); + $unencryptedSize = $this->view->filesize($this->filename); \OC_FileProxy::$enabled = true; - $encryptedSize = $this->view->filesize($filename); + $encryptedSize = $this->view->filesize($this->filename); $this->assertTrue($encryptedSize !== $unencryptedSize); + // cleanup + $this->view->unlink($this->filename); + + } + + function testPreUnlinkWithoutTrash() { + + // remember files_trashbin state + $stateFilesTrashbin = OC_App::isEnabled('files_trashbin'); + + // we want to tests with app files_trashbin enabled + \OC_App::disable('files_trashbin'); + + $this->view->file_put_contents($this->filename, $this->data); + + // create a dummy file that we can delete something outside of data/user/files + $this->rootView->file_put_contents("dummy.txt", $this->data); + + // check if all keys are generated + $this->assertTrue($this->rootView->file_exists( + '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey')); + $this->assertTrue($this->rootView->file_exists( + '/files_encryption/keyfiles/' . $this->filename . '.key')); + + + // delete dummy file outside of data/user/files + $this->rootView->unlink("dummy.txt"); + + // all keys should still exist + $this->assertTrue($this->rootView->file_exists( + '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey')); + $this->assertTrue($this->rootView->file_exists( + '/files_encryption/keyfiles/' . $this->filename . '.key')); + + + // delete the file in data/user/files + $this->view->unlink($this->filename); + + // now also the keys should be gone + $this->assertFalse($this->rootView->file_exists( + '/files_encryption/share-keys/' + . $this->filename . '.' . \Test_Encryption_Proxy::TEST_ENCRYPTION_PROXY_USER1 . '.shareKey')); + $this->assertFalse($this->rootView->file_exists( + '/files_encryption/keyfiles/' . $this->filename . '.key')); + + if ($stateFilesTrashbin) { + OC_App::enable('files_trashbin'); + } + else { + OC_App::disable('files_trashbin'); + } } } diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php index 6a29d2428dc..e55427620a6 100755 --- a/apps/files_encryption/tests/share.php +++ b/apps/files_encryption/tests/share.php @@ -649,9 +649,7 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { * @large */ function testRecoveryFile() { - $this->markTestIncomplete( - 'No idea what\'s wrong here, this works perfectly in real-world. removeRecoveryKeys(\'/\') L709 removes correctly the keys, but for some reasons afterwards also the top-level folder "share-keys" is gone...' - ); + // login as admin \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); @@ -754,13 +752,13 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { * @large */ function testRecoveryForUser() { - $this->markTestIncomplete( - 'This test drives Jenkins crazy - "Cannot modify header information - headers already sent" - line 811' - ); + // login as admin \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); - \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'); + $result = \OCA\Encryption\Helper::adminEnableRecovery(null, 'test123'); + $this->assertTrue($result); + $recoveryKeyId = OC_Appconfig::getValue('files_encryption', 'recoveryKeyId'); // login as user2 @@ -771,6 +769,9 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { // enable recovery for admin $this->assertTrue($util->setRecoveryForUser(1)); + // add recovery keys for existing files (e.g. the auto-generated welcome.txt) + $util->addRecoveryKeys(); + // create folder structure $this->view->mkdir('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1); $this->view->mkdir( @@ -809,6 +810,10 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { // change password \OC_User::setPassword(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, 'test', 'test123'); + $params = array('uid' => \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, + 'password' => 'test', + 'recoveryPassword' => 'test123'); + \OCA\Encryption\Hooks::setPassphrase($params); // login as user2 \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2, false, 'test'); @@ -823,8 +828,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { $this->assertEquals($this->dataShort, $retrievedCryptedFile2); // cleanup - $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->folder1); - $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files' . $this->filename); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->folder1); + $this->view->unlink('/' . \Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER2 . '/files/' . $this->filename); // check if share key for user and recovery exists $this->assertFalse($this->view->file_exists( @@ -889,8 +894,8 @@ class Test_Encryption_Share extends \PHPUnit_Framework_TestCase { } catch (Exception $e) { $this->assertEquals(0, strpos($e->getMessage(), "Following users are not set up for encryption")); } - - + + // login as admin \Test_Encryption_Util::loginHelper(\Test_Encryption_Share::TEST_ENCRYPTION_SHARE_USER1); |