]> source.dussan.org Git - nextcloud-server.git/commitdiff
add unit test for rename and copy operation
authorBjoern Schiessle <schiessle@owncloud.com>
Thu, 24 Jul 2014 14:49:38 +0000 (16:49 +0200)
committerBjoern Schiessle <schiessle@owncloud.com>
Wed, 30 Jul 2014 13:14:01 +0000 (15:14 +0200)
apps/files_encryption/tests/hooks.php
apps/files_versions/appinfo/app.php
apps/files_versions/lib/hooks.php
apps/files_versions/tests/versions.php

index 5eda8df01b9dfa2fbc3aae82f6ccfe5171c36528..cc5b6d5b6f645df06bad1477682e49679937a18f 100644 (file)
@@ -335,6 +335,58 @@ class Test_Encryption_Hooks extends \PHPUnit_Framework_TestCase {
                $this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
        }
 
+       /**
+        * test rename operation
+        */
+       function testCopyHook() {
+
+               // save file with content
+               $cryptedFile = file_put_contents('crypt:///' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->filename, $this->data);
+
+               // test that data was successfully written
+               $this->assertTrue(is_int($cryptedFile));
+
+               // check if keys exists
+               $this->assertTrue($this->rootView->file_exists(
+                       '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
+                       . $this->filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+
+               $this->assertTrue($this->rootView->file_exists(
+                       '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
+                       . $this->filename . '.key'));
+
+               // make subfolder and sub-subfolder
+               $this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
+               $this->rootView->mkdir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder);
+
+               $this->assertTrue($this->rootView->is_dir('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder));
+
+               // copy the file to the sub-subfolder
+               \OC\Files\Filesystem::copy($this->filename, '/' . $this->folder . '/' . $this->folder . '/' . $this->filename);
+
+               $this->assertTrue($this->rootView->file_exists('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->filename));
+               $this->assertTrue($this->rootView->file_exists('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder . '/' . $this->folder . '/' . $this->filename));
+
+               // keys should be copied too
+               $this->assertTrue($this->rootView->file_exists(
+                       '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/'
+                       . $this->filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+               $this->assertTrue($this->rootView->file_exists(
+                       '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/'
+                       . $this->filename . '.key'));
+
+               $this->assertTrue($this->rootView->file_exists(
+                       '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/share-keys/' . $this->folder . '/' . $this->folder . '/'
+                       . $this->filename . '.' . self::TEST_ENCRYPTION_HOOKS_USER1 . '.shareKey'));
+               $this->assertTrue($this->rootView->file_exists(
+                       '/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files_encryption/keyfiles/' . $this->folder . '/' . $this->folder . '/'
+                       . $this->filename . '.key'));
+
+               // cleanup
+               $this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->folder);
+               $this->rootView->unlink('/' . self::TEST_ENCRYPTION_HOOKS_USER1 . '/files/' . $this->filename);
+       }
+
        /**
         * @brief replacing encryption keys during password change should be allowed
         *        until the user logged in for the first time
index 6020d401ef6b341842c1e8938b020addd52028cb..8c517d4d0ff02dd83ed8a5b7f279563c50c72e28 100644 (file)
@@ -8,10 +8,4 @@ OC::$CLASSPATH['OCA\Files_Versions\Capabilities'] = 'files_versions/lib/capabili
 OCP\Util::addscript('files_versions', 'versions');
 OCP\Util::addStyle('files_versions', 'versions');
 
-// Listen to write signals
-OCP\Util::connectHook('OC_Filesystem', 'write', "OCA\Files_Versions\Hooks", "write_hook");
-// Listen to delete and rename signals
-OCP\Util::connectHook('OC_Filesystem', 'post_delete', "OCA\Files_Versions\Hooks", "remove_hook");
-OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA\Files_Versions\Hooks", "pre_remove_hook");
-OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA\Files_Versions\Hooks", "rename_hook");
-OCP\Util::connectHook('OC_Filesystem', 'copy', "OCA\Files_Versions\Hooks", "copy_hook");
+\OCA\Files_Versions\Hooks::connectHooks();
index 17eacc6a6ed3042404c0c7325e4644fe177bcbd5..1a584232ba74e72296849ffba02fa6fb766d1c1c 100644 (file)
@@ -14,6 +14,16 @@ namespace OCA\Files_Versions;
 
 class Hooks {
 
+       public static function connectHooks() {
+               // Listen to write signals
+               \OCP\Util::connectHook('OC_Filesystem', 'write', "OCA\Files_Versions\Hooks", "write_hook");
+               // Listen to delete and rename signals
+               \OCP\Util::connectHook('OC_Filesystem', 'post_delete', "OCA\Files_Versions\Hooks", "remove_hook");
+               \OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA\Files_Versions\Hooks", "pre_remove_hook");
+               \OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA\Files_Versions\Hooks", "rename_hook");
+               \OCP\Util::connectHook('OC_Filesystem', 'copy', "OCA\Files_Versions\Hooks", "copy_hook");
+       }
+
        /**
         * listen to write event.
         */
index aa66faffcbfe0a19a304b4f0aef5f4fc751140db..03432276358cd95b745d7e765e78176b237f5104 100644 (file)
@@ -20,6 +20,7 @@
  *
  */
 
+require_once __DIR__ . '/../appinfo/app.php';
 require_once __DIR__ . '/../lib/versions.php';
 
 /**
@@ -28,6 +29,32 @@ require_once __DIR__ . '/../lib/versions.php';
  */
 class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
 
+       const TEST_VERSIONS_USER = 'test-versions-user';
+       const USERS_VERSIONS_ROOT = '/test-versions-user/files_versions';
+
+       private $rootView;
+
+       public static function setUpBeforeClass() {
+               // create test user
+               self::loginHelper(self::TEST_VERSIONS_USER, true);
+       }
+
+       public static function tearDownAfterClass() {
+               // cleanup test user
+               \OC_User::deleteUser(self::TEST_VERSIONS_USER);
+       }
+
+       function setUp() {
+               self::loginHelper(self::TEST_VERSIONS_USER);
+               $this->rootView = new \OC\Files\View();
+               if (!$this->rootView->file_exists(self::USERS_VERSIONS_ROOT)) {
+                       $this->rootView->mkdir(self::USERS_VERSIONS_ROOT);
+               }
+       }
+
+       function tearDown() {
+               $this->rootView->deleteAll(self::USERS_VERSIONS_ROOT);
+       }
 
        /**
         * @medium
@@ -176,6 +203,87 @@ class Test_Files_Versioning extends \PHPUnit_Framework_TestCase {
                );
        }
 
+       function testRename() {
+
+               \OC\Files\Filesystem::file_put_contents("test.txt", "test file");
+
+               $t1 = time();
+               // second version is two weeks older, this way we make sure that no
+               // version will be expired
+               $t2 = $t1 - 60 * 60 * 24 * 14;
+
+               // create some versions
+               $v1 = self::USERS_VERSIONS_ROOT . '/test.txt.v' . $t1;
+               $v2 = self::USERS_VERSIONS_ROOT . '/test.txt.v' . $t2;
+               $v1Renamed = self::USERS_VERSIONS_ROOT . '/test2.txt.v' . $t1;
+               $v2Renamed = self::USERS_VERSIONS_ROOT . '/test2.txt.v' . $t2;
+
+               $this->rootView->file_put_contents($v1, 'version1');
+               $this->rootView->file_put_contents($v2, 'version2');
+
+               // execute rename hook of versions app
+               \OCA\Files_Versions\Storage::renameOrCopy("test.txt", "test2.txt", 'rename');
+
+               $this->assertFalse($this->rootView->file_exists($v1));
+               $this->assertFalse($this->rootView->file_exists($v2));
+
+               $this->assertTrue($this->rootView->file_exists($v1Renamed));
+               $this->assertTrue($this->rootView->file_exists($v2Renamed));
+
+               //cleanup
+               \OC\Files\Filesystem::unlink('test2.txt');
+       }
+
+       function testCopy() {
+
+               \OC\Files\Filesystem::file_put_contents("test.txt", "test file");
+
+               $t1 = time();
+               // second version is two weeks older, this way we make sure that no
+               // version will be expired
+               $t2 = $t1 - 60 * 60 * 24 * 14;
+
+               // create some versions
+               $v1 = self::USERS_VERSIONS_ROOT . '/test.txt.v' . $t1;
+               $v2 = self::USERS_VERSIONS_ROOT . '/test.txt.v' . $t2;
+               $v1Copied = self::USERS_VERSIONS_ROOT . '/test2.txt.v' . $t1;
+               $v2Copied = self::USERS_VERSIONS_ROOT . '/test2.txt.v' . $t2;
+
+               $this->rootView->file_put_contents($v1, 'version1');
+               $this->rootView->file_put_contents($v2, 'version2');
+
+               // execute copy hook of versions app
+               \OCA\Files_Versions\Storage::renameOrCopy("test.txt", "test2.txt", 'copy');
+
+               $this->assertTrue($this->rootView->file_exists($v1));
+               $this->assertTrue($this->rootView->file_exists($v2));
+
+               $this->assertTrue($this->rootView->file_exists($v1Copied));
+               $this->assertTrue($this->rootView->file_exists($v2Copied));
+
+               //cleanup
+               \OC\Files\Filesystem::unlink('test.txt');
+               \OC\Files\Filesystem::unlink('test2.txt');
+       }
+
+       /**
+        * @param string $user
+        * @param bool $create
+        * @param bool $password
+        */
+       public static function loginHelper($user, $create = false) {
+
+               if ($create) {
+                       \OC_User::createUser($user, $user);
+               }
+
+               \OC_Util::tearDownFS();
+               \OC_User::setUserId('');
+               \OC\Files\Filesystem::tearDown();
+               \OC_User::setUserId($user);
+               \OC_Util::setupFS($user);
+       }
+
 }
 
 // extend the original class to make it possible to test protected methods