diff options
Diffstat (limited to 'apps/files_encryption/tests')
-rw-r--r-- | apps/files_encryption/tests/helper.php | 252 | ||||
-rwxr-xr-x | apps/files_encryption/tests/share.php | 34 | ||||
-rw-r--r-- | apps/files_encryption/tests/testcase.php | 2 | ||||
-rwxr-xr-x | apps/files_encryption/tests/util.php | 37 |
4 files changed, 262 insertions, 63 deletions
diff --git a/apps/files_encryption/tests/helper.php b/apps/files_encryption/tests/helper.php index bf86860125a..62fdb80d671 100644 --- a/apps/files_encryption/tests/helper.php +++ b/apps/files_encryption/tests/helper.php @@ -8,10 +8,13 @@ namespace OCA\Files_Encryption\Tests; +use OCA\Files_Encryption; +use OCA\Files_Encryption\Helper; + /** * Class Helper */ -class Helper extends TestCase { +class TestHelper extends TestCase { const TEST_ENCRYPTION_HELPER_USER1 = "test-helper-user1"; const TEST_ENCRYPTION_HELPER_USER2 = "test-helper-user2"; @@ -30,11 +33,11 @@ class Helper extends TestCase { public static function setupHooks() { // Filesystem related hooks - \OCA\Files_Encryption\Helper::registerFilesystemHooks(); + Helper::registerFilesystemHooks(); // clear and register hooks \OC_FileProxy::clearProxies(); - \OC_FileProxy::register(new \OCA\Files_Encryption\Proxy()); + \OC_FileProxy::register(new Files_Encryption\Proxy()); } public static function tearDownAfterClass() { @@ -49,13 +52,13 @@ class Helper extends TestCase { $partFilename = 'testfile.txt.part'; $filename = 'testfile.txt'; - $this->assertTrue(\OCA\Files_Encryption\Helper::isPartialFilePath($partFilename)); + $this->assertTrue(Helper::isPartialFilePath($partFilename)); - $this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($partFilename)); + $this->assertEquals('testfile.txt', Helper::stripPartialFileExtension($partFilename)); - $this->assertFalse(\OCA\Files_Encryption\Helper::isPartialFilePath($filename)); + $this->assertFalse(Helper::isPartialFilePath($filename)); - $this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($filename)); + $this->assertEquals('testfile.txt', Helper::stripPartialFileExtension($filename)); } @@ -67,26 +70,79 @@ class Helper extends TestCase { $partFilename = 'testfile.txt.ocTransferId643653835.part'; $filename = 'testfile.txt'; - $this->assertTrue(\OCA\Files_Encryption\Helper::isPartialFilePath($partFilename)); + $this->assertTrue(Helper::isPartialFilePath($partFilename)); + + $this->assertEquals('testfile.txt', Helper::stripPartialFileExtension($partFilename)); - $this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($partFilename)); + $this->assertFalse(Helper::isPartialFilePath($filename)); - $this->assertFalse(\OCA\Files_Encryption\Helper::isPartialFilePath($filename)); + $this->assertEquals('testfile.txt', Helper::stripPartialFileExtension($filename)); + } - $this->assertEquals('testfile.txt', \OCA\Files_Encryption\Helper::stripPartialFileExtension($filename)); + /** + * @dataProvider dataVersionsPathPositive + */ + function testGetPathFromVersionPositive($path, $expected) { + $result = Helper::getPathFromVersion($path); + $this->assertSame($expected, $result); } - function testGetPathToRealFile() { + function dataVersionsPathPositive() { + return array( + array('/user/files_versions/foo/bar/test.txt.v456756835', 'foo/bar/test.txt'), + array('user/files_versions/foo/bar/test.txt.v456756835', 'foo/bar/test.txt'), + array('user/files_versions//foo/bar/test.txt.v456756835', 'foo/bar/test.txt'), + array('user/files_versions/test.txt.v456756835', 'test.txt'), + ); + } + + /** + * @dataProvider dataVersionsPathNegative + * @expectedException \OCA\Files_Encryption\Exception\EncryptionException + */ + function testGetPathFromVersionNegative($path) { + Helper::getPathFromVersion($path); + } - // the relative path to /user/files/ that's what we want to get from getPathToRealFile() - $relativePath = "foo/bar/test.txt"; + function dataVersionsPathNegative() { + return array( + array('/user/files_versions/'), + array('/user/files_versions'), + ); + } - // test paths - $versionPath = "/user/files_versions/foo/bar/test.txt.v456756835"; - $cachePath = "/user/cache/transferid636483/foo/bar/test.txt"; + /** + * @dataProvider dataPathsCachedFilePositive + */ + function testGetPathFromCachedFilePositive($path, $expected) { + $result = Helper::getPathFromCachedFile($path); + $this->assertEquals($expected, $result); + } - $this->assertEquals($relativePath, \OCA\Files_Encryption\Helper::getPathToRealFile($versionPath)); - $this->assertEquals($relativePath, \OCA\Files_Encryption\Helper::getPathToRealFile($cachePath)); + function dataPathsCachedFilePositive() { + return array( + array('/user/cache/transferid636483/foo/bar/test.txt', 'foo/bar/test.txt'), + array('/user/cache/transferid636483//test.txt', 'test.txt'), + array('user/cache/transferid636483//test.txt', 'test.txt'), + ); + } + + + /** + * @dataProvider dataPathsCachedFileNegative + * @expectedException \OCA\Files_Encryption\Exception\EncryptionException + */ + function testGetPathFromCachedFileNegative($path) { + Helper::getPathFromCachedFile($path); + } + + function dataPathsCachedFileNegative() { + return array( + array('/user/cache/transferid636483/'), + array('/user/cache/transferid636483'), + array('/user/cache/transferid636483//'), + array('/user/cache'), + ); } function testGetUser() { @@ -100,21 +156,167 @@ class Helper extends TestCase { self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1); // if we are logged-in every path should return the currently logged-in user - $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path3)); + $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Helper::getUser($path1)); + $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Helper::getUser($path2)); + $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Helper::getUser($path3)); + $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Helper::getUser($path4)); // now log out self::logoutHelper(); // now we should only get the user from /user/files and user/cache paths - $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path1)); - $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, \OCA\Files_Encryption\Helper::getUser($path2)); - - $this->assertFalse(\OCA\Files_Encryption\Helper::getUser($path3)); - $this->assertFalse(\OCA\Files_Encryption\Helper::getUser($path4)); + $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Helper::getUser($path1)); + $this->assertEquals(self::TEST_ENCRYPTION_HELPER_USER1, Helper::getUser($path2)); + + try { + $this->assertFalse(Helper::getUser($path3)); + $this->assertFalse(true, '"OCA\Files_Encryption\Exception\EncryptionException: Could not determine user expected"'); + } catch (Files_Encryption\Exception\EncryptionException $e) { + $this->assertSame('Could not determine user', $e->getMessage()); + } + try { + $this->assertFalse(Helper::getUser($path4)); + $this->assertFalse(true, '"OCA\Files_Encryption\Exception\EncryptionException: Could not determine user expected"'); + } catch (Files_Encryption\Exception\EncryptionException $e) { + $this->assertSame('Could not determine user', $e->getMessage()); + } // Log-in again self::loginHelper(self::TEST_ENCRYPTION_HELPER_USER1); self::cleanUpUsers(); } + /** + * @dataProvider dataStripUserFilesPath + */ + function testStripUserFilesPath($path, $expected) { + $result = Helper::stripUserFilesPath($path); + $this->assertSame($expected, $result); + } + + function dataStripUserFilesPath() { + return array( + array('/user/files/foo.txt', 'foo.txt'), + array('//user/files/foo.txt', 'foo.txt'), + array('user//files/foo/bar.txt', 'foo/bar.txt'), + array('user//files/', false), + array('/user', false), + array('', false), + ); + } + + /** + * @dataProvider dataStripUserFilesPathPositive + */ + function testGetUserFromPathPositive($path, $expected) { + self::setUpUsers(); + $result = Helper::getUserFromPath($path); + $this->assertSame($expected, $result); + self::cleanUpUsers(); + } + + function dataStripUserFilesPathPositive() { + return array( + array('/' . self::TEST_ENCRYPTION_HELPER_USER1 . '/files/foo.txt', self::TEST_ENCRYPTION_HELPER_USER1), + array('//' . self::TEST_ENCRYPTION_HELPER_USER2 . '/files_versions/foo.txt', self::TEST_ENCRYPTION_HELPER_USER2), + array(self::TEST_ENCRYPTION_HELPER_USER1 . '//cache/foo/bar.txt', self::TEST_ENCRYPTION_HELPER_USER1), + ); + } + + /** + * @dataProvider dataStripUserFilesPathNegative + * @expectedException \OCA\Files_Encryption\Exception\EncryptionException + */ + function testGetUserFromPathNegative($path) { + Helper::getUserFromPath($path); + } + + function dataStripUserFilesPathNegative() { + return array( + array('/unknown_user/files/foo.txt'), + array('/' . self::TEST_ENCRYPTION_HELPER_USER2 . '/unknown_folder/foo.txt'), + array('/' . self::TEST_ENCRYPTION_HELPER_USER1), + array(''), + ); + } + + /** + * @dataProvider dataPaths + */ + function testMkdirr($path, $expected) { + self::setUpUsers(); + Helper::mkdirr($path, new \OC\Files\View('/' . self::TEST_ENCRYPTION_HELPER_USER1 . '/files')); + // ignore the filename because we only check for the directories + $dirParts = array_slice($expected, 0, -1); + $expectedPath = implode('/', $dirParts); + $this->assertTrue(\OC\Files\Filesystem::is_dir($expectedPath)); + + // cleanup + \OC\Files\Filesystem::unlink('/' . $expected[0]); + self::cleanUpUsers(); + } + + /** + * @dataProvider dataDetectFileTypePositive + */ + function testDetectFileTypePositive($path, $expected) { + $result = Helper::detectFileType($path); + $this->assertSame($expected, $result); + } + + function dataDetectFileTypePositive() { + return array( + array(self::TEST_ENCRYPTION_HELPER_USER1 . '/files', Files_Encryption\Util::FILE_TYPE_FILE), + array(self::TEST_ENCRYPTION_HELPER_USER1 . '/files/foo/bar', Files_Encryption\Util::FILE_TYPE_FILE), + array('/' . self::TEST_ENCRYPTION_HELPER_USER1 . '/files/foo/bar', Files_Encryption\Util::FILE_TYPE_FILE), + array(self::TEST_ENCRYPTION_HELPER_USER1 . '/files_versions', Files_Encryption\Util::FILE_TYPE_VERSION), + array('/' . self::TEST_ENCRYPTION_HELPER_USER1 . '//files_versions/foo/bar', Files_Encryption\Util::FILE_TYPE_VERSION), + array('/' . self::TEST_ENCRYPTION_HELPER_USER1 . '//cache/foo/bar', Files_Encryption\Util::FILE_TYPE_CACHE), + ); + } + + /** + * @dataProvider dataDetectFileTypeNegative + * @expectedException \OCA\Files_Encryption\Exception\EncryptionException + */ + function testDetectFileTypeNegative($path) { + Helper::detectFileType($path); + } + + function dataDetectFileTypeNegative() { + return array( + array('/files'), + array('/' . self::TEST_ENCRYPTION_HELPER_USER1 . '/unsuported_dir/foo/bar'), + ); + } + + /** + * @dataProvider dataPaths + */ + function testSplitPath($path, $expected) { + $result = Helper::splitPath($path); + $this->compareArray($result, $expected); + } + + function dataPaths() { + return array( + array('foo/bar/test.txt', array('', 'foo', 'bar', 'test.txt')), + array('/foo/bar/test.txt', array('', 'foo', 'bar', 'test.txt')), + array('/foo/bar//test.txt', array('', 'foo', 'bar', 'test.txt')), + array('//foo/bar/test.txt', array('', 'foo', 'bar', 'test.txt')), + array('foo', array('', 'foo')), + array('/foo', array('', 'foo')), + array('//foo', array('', 'foo')), + ); + } + + function compareArray($result, $expected) { + $this->assertSame(count($expected), count($result)); + + foreach ($expected as $key => $value) { + $this->assertArrayHasKey($key, $result); + $this->assertSame($value, $result[$key]); + } + } + } diff --git a/apps/files_encryption/tests/share.php b/apps/files_encryption/tests/share.php index b6f5a1ffd20..8ecdbabed39 100755 --- a/apps/files_encryption/tests/share.php +++ b/apps/files_encryption/tests/share.php @@ -279,6 +279,40 @@ class Share extends TestCase { } } + function testDownloadVersions() { + // login as admin + self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1); + + $rootView = new \OC\Files\View(); + + // save file twice to create a new version + \OC\Files\Filesystem::file_put_contents($this->filename, "revision1"); + \OCA\Files_Versions\Storage::store($this->filename); + \OC\Files\Filesystem::file_put_contents($this->filename, "revision2"); + + // check if the owner can retrieve the correct version + $versions = \OCA\Files_Versions\Storage::getVersions(self::TEST_ENCRYPTION_SHARE_USER1, $this->filename); + $this->assertSame(1, count($versions)); + $version = reset($versions); + $versionUser1 = $rootView->file_get_contents('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_versions/' . $this->filename . '.v' . $version['version']); + $this->assertSame('revision1', $versionUser1); + + // share the file + $fileInfo = \OC\Files\Filesystem::getFileInfo($this->filename); + $this->assertInstanceOf('\OC\Files\FileInfo', $fileInfo); + $this->assertTrue(\OCP\Share::shareItem('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2, \OCP\Constants::PERMISSION_ALL)); + + // try to download the version as user2 + self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER2); + $versionUser2 = $rootView->file_get_contents('/' . self::TEST_ENCRYPTION_SHARE_USER1 . '/files_versions/' . $this->filename . '.v' . $version['version']); + $this->assertSame('revision1', $versionUser2); + + //cleanup + self::loginHelper(self::TEST_ENCRYPTION_SHARE_USER1); + \OCP\Share::unshare('file', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_ENCRYPTION_SHARE_USER2); + \OC\Files\Filesystem::unlink($this->filename); + } + /** * @medium * @param bool $withTeardown diff --git a/apps/files_encryption/tests/testcase.php b/apps/files_encryption/tests/testcase.php index c2e5f4de8c1..35517c29d69 100644 --- a/apps/files_encryption/tests/testcase.php +++ b/apps/files_encryption/tests/testcase.php @@ -34,7 +34,7 @@ abstract class TestCase extends \Test\TestCase { \OC_Util::tearDownFS(); \OC_User::setUserId(''); \OC\Files\Filesystem::tearDown(); - \OC_User::setUserId($user); + \OC::$server->getUserSession()->setUser(new \OC\User\User($user, new \OC_User_Database())); \OC_Util::setupFS($user); if ($loadEncryption) { diff --git a/apps/files_encryption/tests/util.php b/apps/files_encryption/tests/util.php index c75f406cb61..4e0b4f2d0de 100755 --- a/apps/files_encryption/tests/util.php +++ b/apps/files_encryption/tests/util.php @@ -575,43 +575,6 @@ class Util extends TestCase { } /** - * @param string $user - * @param bool $create - * @param bool $password - */ - public static function loginHelper($user, $create = false, $password = false, $loadEncryption = true) { - if ($create) { - try { - \OC_User::createUser($user, $user); - } catch(\Exception $e) { // catch username is already being used from previous aborted runs - - } - } - - if ($password === false) { - $password = $user; - } - - \OC_Util::tearDownFS(); - \OC_User::setUserId(''); - \OC\Files\Filesystem::tearDown(); - \OC_User::setUserId($user); - \OC_Util::setupFS($user); - - if ($loadEncryption) { - $params['uid'] = $user; - $params['password'] = $password; - \OCA\Files_Encryption\Hooks::login($params); - } - } - - public static function logoutHelper() { - \OC_Util::tearDownFS(); - \OC_User::setUserId(false); - \OC\Files\Filesystem::tearDown(); - } - - /** * helper function to set migration status to the right value * to be able to test the migration path * |