aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/Encryption
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/Encryption')
-rw-r--r--tests/lib/Encryption/DecryptAllTest.php87
-rw-r--r--tests/lib/Encryption/EncryptionWrapperTest.php18
-rw-r--r--tests/lib/Encryption/Keys/StorageTest.php52
-rw-r--r--tests/lib/Encryption/ManagerTest.php9
-rw-r--r--tests/lib/Encryption/UpdateTest.php199
-rw-r--r--tests/lib/Encryption/UtilTest.php58
6 files changed, 199 insertions, 224 deletions
diff --git a/tests/lib/Encryption/DecryptAllTest.php b/tests/lib/Encryption/DecryptAllTest.php
index 6a8453bcaf8..979e12e03b3 100644
--- a/tests/lib/Encryption/DecryptAllTest.php
+++ b/tests/lib/Encryption/DecryptAllTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -44,7 +45,7 @@ class DecryptAllTest extends TestCase {
/** @var \PHPUnit\Framework\MockObject\MockObject | \Symfony\Component\Console\Output\OutputInterface */
protected $outputInterface;
- /** @var \PHPUnit\Framework\MockObject\MockObject | \OCP\UserInterface */
+ /** @var \PHPUnit\Framework\MockObject\MockObject|UserInterface */
protected $userInterface;
/** @var DecryptAll */
@@ -82,7 +83,7 @@ class DecryptAllTest extends TestCase {
$this->invokePrivate($this->instance, 'output', [$this->outputInterface]);
}
- public function dataDecryptAll() {
+ public static function dataDecryptAll(): array {
return [
[true, 'user1', true],
[false, 'user1', true],
@@ -93,11 +94,11 @@ class DecryptAllTest extends TestCase {
}
/**
- * @dataProvider dataDecryptAll
* @param bool $prepareResult
* @param string $user
* @param bool $userExistsChecked
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataDecryptAll')]
public function testDecryptAll($prepareResult, $user, $userExistsChecked): void {
if ($userExistsChecked) {
$this->userManager->expects($this->once())->method('userExists')->willReturn(true);
@@ -113,7 +114,7 @@ class DecryptAllTest extends TestCase {
$this->view
]
)
- ->setMethods(['prepareEncryptionModules', 'decryptAllUsersFiles'])
+ ->onlyMethods(['prepareEncryptionModules', 'decryptAllUsersFiles'])
->getMock();
$instance->expects($this->once())
@@ -145,7 +146,7 @@ class DecryptAllTest extends TestCase {
);
}
- public function dataTrueFalse() {
+ public static function dataTrueFalse(): array {
return [
[true],
[false],
@@ -153,9 +154,9 @@ class DecryptAllTest extends TestCase {
}
/**
- * @dataProvider dataTrueFalse
* @param bool $success
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTrueFalse')]
public function testPrepareEncryptionModules($success): void {
$user = 'user1';
@@ -185,9 +186,7 @@ class DecryptAllTest extends TestCase {
);
}
- /**
- * @dataProvider dataTestDecryptAllUsersFiles
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestDecryptAllUsersFiles')]
public function testDecryptAllUsersFiles($user): void {
/** @var DecryptAll | \PHPUnit\Framework\MockObject\MockObject | $instance */
$instance = $this->getMockBuilder('OC\Encryption\DecryptAll')
@@ -198,7 +197,7 @@ class DecryptAllTest extends TestCase {
$this->view
]
)
- ->setMethods(['decryptUsersFiles'])
+ ->onlyMethods(['decryptUsersFiles'])
->getMock();
$this->invokePrivate($instance, 'input', [$this->inputInterface]);
@@ -211,12 +210,16 @@ class DecryptAllTest extends TestCase {
$this->userInterface->expects($this->any())
->method('getUsers')
->willReturn(['user1', 'user2']);
+ $calls = [
+ 'user1',
+ 'user2',
+ ];
$instance->expects($this->exactly(2))
->method('decryptUsersFiles')
- ->withConsecutive(
- ['user1'],
- ['user2'],
- );
+ ->willReturnCallback(function ($user) use (&$calls): void {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, $user);
+ });
} else {
$instance->expects($this->once())
->method('decryptUsersFiles')
@@ -226,7 +229,7 @@ class DecryptAllTest extends TestCase {
$this->invokePrivate($instance, 'decryptAllUsersFiles', [$user]);
}
- public function dataTestDecryptAllUsersFiles() {
+ public static function dataTestDecryptAllUsersFiles(): array {
return [
['user1'],
['']
@@ -243,7 +246,7 @@ class DecryptAllTest extends TestCase {
$this->view
]
)
- ->setMethods(['decryptFile'])
+ ->onlyMethods(['decryptFile'])
->getMock();
$storage = $this->getMockBuilder(IStorage::class)
@@ -253,25 +256,29 @@ class DecryptAllTest extends TestCase {
$sharedStorage = $this->getMockBuilder(IStorage::class)
->disableOriginalConstructor()->getMock();
- $sharedStorage->expects($this->once())->method('instanceOfStorage')
- ->with('OCA\Files_Sharing\SharedStorage')->willReturn(true);
+ $sharedStorage->expects($this->once())
+ ->method('instanceOfStorage')
+ ->with('OCA\Files_Sharing\SharedStorage')
+ ->willReturn(true);
$this->view->expects($this->exactly(2))
->method('getDirectoryContent')
- ->withConsecutive(
- ['/user1/files'],
- ['/user1/files/foo']
- )
- ->willReturnOnConsecutiveCalls(
+ ->willReturnMap([
[
- new FileInfo('path', $storage, 'intPath', ['name' => 'foo', 'type' => 'dir'], null),
- new FileInfo('path', $storage, 'intPath', ['name' => 'bar', 'type' => 'file', 'encrypted' => true], null),
- new FileInfo('path', $sharedStorage, 'intPath', ['name' => 'shared', 'type' => 'file', 'encrypted' => true], null),
+ '/user1/files', '', null,
+ [
+ new FileInfo('path', $storage, 'intPath', ['name' => 'foo', 'type' => 'dir'], null),
+ new FileInfo('path', $storage, 'intPath', ['name' => 'bar', 'type' => 'file', 'encrypted' => true], null),
+ new FileInfo('path', $sharedStorage, 'intPath', ['name' => 'shared', 'type' => 'file', 'encrypted' => true], null),
+ ],
],
[
- new FileInfo('path', $storage, 'intPath', ['name' => 'subfile', 'type' => 'file', 'encrypted' => true], null)
- ]
- );
+ '/user1/files/foo', '', null,
+ [
+ new FileInfo('path', $storage, 'intPath', ['name' => 'subfile', 'type' => 'file', 'encrypted' => true], null)
+ ],
+ ],
+ ]);
$this->view->expects($this->any())->method('is_dir')
->willReturnCallback(
@@ -283,12 +290,16 @@ class DecryptAllTest extends TestCase {
}
);
+ $calls = [
+ '/user1/files/bar',
+ '/user1/files/foo/subfile',
+ ];
$instance->expects($this->exactly(2))
->method('decryptFile')
- ->withConsecutive(
- ['/user1/files/bar'],
- ['/user1/files/foo/subfile'],
- );
+ ->willReturnCallback(function ($path) use (&$calls): void {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, $path);
+ });
/* We need format method to return a string */
@@ -305,9 +316,7 @@ class DecryptAllTest extends TestCase {
$this->invokePrivate($instance, 'decryptUsersFiles', ['user1', $progressBar, '']);
}
- /**
- * @dataProvider dataTrueFalse
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTrueFalse')]
public function testDecryptFile($isEncrypted): void {
$path = 'test.txt';
@@ -320,7 +329,7 @@ class DecryptAllTest extends TestCase {
$this->view
]
)
- ->setMethods(['getTimestamp'])
+ ->onlyMethods(['getTimestamp'])
->getMock();
$fileInfo = $this->createMock(FileInfo::class);
@@ -360,7 +369,7 @@ class DecryptAllTest extends TestCase {
$this->view
]
)
- ->setMethods(['getTimestamp'])
+ ->onlyMethods(['getTimestamp'])
->getMock();
@@ -375,7 +384,7 @@ class DecryptAllTest extends TestCase {
$this->view->expects($this->once())
->method('copy')
->with($path, $path . '.decrypted.42')
- ->willReturnCallback(function () {
+ ->willReturnCallback(function (): void {
throw new DecryptionFailedException();
});
diff --git a/tests/lib/Encryption/EncryptionWrapperTest.php b/tests/lib/Encryption/EncryptionWrapperTest.php
index 1ac7342a3d8..58bf5aff005 100644
--- a/tests/lib/Encryption/EncryptionWrapperTest.php
+++ b/tests/lib/Encryption/EncryptionWrapperTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -9,7 +10,10 @@ namespace Test\Encryption;
use OC\Encryption\EncryptionWrapper;
use OC\Encryption\Manager;
+use OC\Files\Storage\Wrapper\Encryption;
use OC\Memcache\ArrayCache;
+use OCA\Files_Trashbin\Storage;
+use OCP\Files\Mount\IMountPoint;
use OCP\Files\Storage\IDisableEncryptionStorage;
use OCP\Files\Storage\IStorage;
use Psr\Log\LoggerInterface;
@@ -25,7 +29,7 @@ class EncryptionWrapperTest extends TestCase {
/** @var \PHPUnit\Framework\MockObject\MockObject | \OC\Encryption\Manager */
private $manager;
- /** @var \PHPUnit\Framework\MockObject\MockObject | \OC\Memcache\ArrayCache */
+ /** @var \PHPUnit\Framework\MockObject\MockObject|ArrayCache */
private $arrayCache;
protected function setUp(): void {
@@ -39,9 +43,7 @@ class EncryptionWrapperTest extends TestCase {
}
- /**
- * @dataProvider provideWrapStorage
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('provideWrapStorage')]
public function testWrapStorage($expectedWrapped, $wrappedStorages): void {
$storage = $this->getMockBuilder(IStorage::class)
->disableOriginalConstructor()
@@ -55,7 +57,7 @@ class EncryptionWrapperTest extends TestCase {
]);
}
- $mount = $this->getMockBuilder('OCP\Files\Mount\IMountPoint')
+ $mount = $this->getMockBuilder(IMountPoint::class)
->disableOriginalConstructor()
->getMock();
@@ -63,16 +65,16 @@ class EncryptionWrapperTest extends TestCase {
$this->assertEquals(
$expectedWrapped,
- $returnedStorage->instanceOfStorage('OC\Files\Storage\Wrapper\Encryption'),
+ $returnedStorage->instanceOfStorage(Encryption::class),
'Asserted that the storage is (not) wrapped with encryption'
);
}
- public function provideWrapStorage() {
+ public static function provideWrapStorage(): array {
return [
// Wrap when not wrapped or not wrapped with storage
[true, []],
- [true, ['OCA\Files_Trashbin\Storage']],
+ [true, [Storage::class]],
// Do not wrap shared storages
[false, [IDisableEncryptionStorage::class]],
diff --git a/tests/lib/Encryption/Keys/StorageTest.php b/tests/lib/Encryption/Keys/StorageTest.php
index 2ce30105293..333d8d8ce21 100644
--- a/tests/lib/Encryption/Keys/StorageTest.php
+++ b/tests/lib/Encryption/Keys/StorageTest.php
@@ -9,6 +9,7 @@
namespace Test\Encryption\Keys;
use OC\Encryption\Keys\Storage;
+use OC\Encryption\Util;
use OC\Files\View;
use OCP\IConfig;
use OCP\Security\ICrypto;
@@ -36,9 +37,9 @@ class StorageTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->util = $this->getMockBuilder('OC\Encryption\Util')
+ $this->util = $this->getMockBuilder(Util::class)
->disableOriginalConstructor()
- ->setMethodsExcept(['getFileKeyDir'])
+ ->onlyMethods(array_diff(get_class_methods(Util::class), ['getFileKeyDir']))
->getMock();
$this->view = $this->getMockBuilder(View::class)
@@ -114,7 +115,7 @@ class StorageTest extends TestCase {
);
}
- public function dataTestGetFileKey() {
+ public static function dataTestGetFileKey() {
return [
['/files/foo.txt', '/files/foo.txt', true, 'key'],
['/files/foo.txt.ocTransferId2111130212.part', '/files/foo.txt', true, 'key'],
@@ -123,13 +124,13 @@ class StorageTest extends TestCase {
}
/**
- * @dataProvider dataTestGetFileKey
*
* @param string $path
* @param string $strippedPartialName
* @param bool $originalKeyExists
* @param string $expectedKeyContent
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestGetFileKey')]
public function testGetFileKey($path, $strippedPartialName, $originalKeyExists, $expectedKeyContent): void {
$this->config->method('getSystemValueString')
->with('version')
@@ -157,13 +158,10 @@ class StorageTest extends TestCase {
if (!$originalKeyExists) {
$this->view->expects($this->exactly(2))
->method('file_exists')
- ->withConsecutive(
- [$this->equalTo('/user1/files_encryption/keys' . $strippedPartialName . '/encModule/fileKey')],
- [$this->equalTo('/user1/files_encryption/keys' . $path . '/encModule/fileKey')],
- )->willReturnOnConsecutiveCalls(
- $originalKeyExists,
- true,
- );
+ ->willReturnMap([
+ ['/user1/files_encryption/keys' . $strippedPartialName . '/encModule/fileKey', $originalKeyExists],
+ ['/user1/files_encryption/keys' . $path . '/encModule/fileKey', true],
+ ]);
$this->view->expects($this->once())
->method('file_get_contents')
@@ -410,9 +408,7 @@ class StorageTest extends TestCase {
);
}
- /**
- * @dataProvider dataProviderCopyRename
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCopyRename')]
public function testRenameKeys($source, $target, $systemWideMountSource, $systemWideMountTarget, $expectedSource, $expectedTarget): void {
$this->view->expects($this->any())
->method('file_exists')
@@ -441,9 +437,7 @@ class StorageTest extends TestCase {
$this->storage->renameKeys($source, $target);
}
- /**
- * @dataProvider dataProviderCopyRename
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataProviderCopyRename')]
public function testCopyKeys($source, $target, $systemWideMountSource, $systemWideMountTarget, $expectedSource, $expectedTarget): void {
$this->view->expects($this->any())
->method('file_exists')
@@ -481,7 +475,7 @@ class StorageTest extends TestCase {
return [$parts[1], '/' . implode('/', array_slice($parts, 2))];
}
- public function dataProviderCopyRename() {
+ public static function dataProviderCopyRename() {
return [
['/user1/files/source.txt', '/user1/files/target.txt', false, false,
'/user1/files_encryption/keys/files/source.txt/', '/user1/files_encryption/keys/files/target.txt/'],
@@ -512,13 +506,13 @@ class StorageTest extends TestCase {
}
/**
- * @dataProvider dataTestGetPathToKeys
*
* @param string $path
* @param boolean $systemWideMountPoint
* @param string $storageRoot
* @param string $expected
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestGetPathToKeys')]
public function testGetPathToKeys($path, $systemWideMountPoint, $storageRoot, $expected): void {
$this->invokePrivate($this->storage, 'root_dir', [$storageRoot]);
@@ -534,7 +528,7 @@ class StorageTest extends TestCase {
);
}
- public function dataTestGetPathToKeys() {
+ public static function dataTestGetPathToKeys() {
return [
['/user1/files/source.txt', false, '', '/user1/files_encryption/keys/files/source.txt/'],
['/user1/files/source.txt', true, '', '/files_encryption/keys/files/source.txt/'],
@@ -571,13 +565,13 @@ class StorageTest extends TestCase {
/**
- * @dataProvider dataTestBackupUserKeys
* @param bool $createBackupDir
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestBackupUserKeys')]
public function testBackupUserKeys($createBackupDir): void {
$storage = $this->getMockBuilder('OC\Encryption\Keys\Storage')
->setConstructorArgs([$this->view, $this->util, $this->crypto, $this->config])
- ->setMethods(['getTimestamp'])
+ ->onlyMethods(['getTimestamp'])
->getMock();
$storage->expects($this->any())->method('getTimestamp')->willReturn('1234567');
@@ -586,11 +580,15 @@ class StorageTest extends TestCase {
->with('user1/files_encryption/backup')->willReturn(!$createBackupDir);
if ($createBackupDir) {
+ $calls = [
+ 'user1/files_encryption/backup',
+ 'user1/files_encryption/backup/test.encryptionModule.1234567',
+ ];
$this->view->expects($this->exactly(2))->method('mkdir')
- ->withConsecutive(
- ['user1/files_encryption/backup'],
- ['user1/files_encryption/backup/test.encryptionModule.1234567'],
- );
+ ->willReturnCallback(function ($path) use (&$calls): void {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, $path);
+ });
} else {
$this->view->expects($this->once())->method('mkdir')
->with('user1/files_encryption/backup/test.encryptionModule.1234567');
@@ -605,7 +603,7 @@ class StorageTest extends TestCase {
$this->assertTrue($storage->backupUserKeys('encryptionModule', 'test', 'user1'));
}
- public function dataTestBackupUserKeys() {
+ public static function dataTestBackupUserKeys() {
return [
[true], [false]
];
diff --git a/tests/lib/Encryption/ManagerTest.php b/tests/lib/Encryption/ManagerTest.php
index 8dd602349b6..e9b6ddae8a0 100644
--- a/tests/lib/Encryption/ManagerTest.php
+++ b/tests/lib/Encryption/ManagerTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -6,6 +7,8 @@
*/
namespace Test\Encryption;
+use OC\Encryption\Exceptions\ModuleAlreadyExistsException;
+use OC\Encryption\Exceptions\ModuleDoesNotExistsException;
use OC\Encryption\Manager;
use OC\Encryption\Util;
use OC\Files\View;
@@ -88,7 +91,7 @@ class ManagerTest extends TestCase {
* @depends testModuleRegistration
*/
public function testModuleReRegistration($manager): void {
- $this->expectException(\OC\Encryption\Exceptions\ModuleAlreadyExistsException::class);
+ $this->expectException(ModuleAlreadyExistsException::class);
$this->expectExceptionMessage('Id "ID0" already used by encryption module "TestDummyModule0"');
$this->addNewEncryptionModule($manager, 0);
@@ -105,7 +108,7 @@ class ManagerTest extends TestCase {
public function testGetEncryptionModuleUnknown(): void {
- $this->expectException(\OC\Encryption\Exceptions\ModuleDoesNotExistsException::class);
+ $this->expectException(ModuleDoesNotExistsException::class);
$this->expectExceptionMessage('Module with ID: unknown does not exist.');
$this->config->expects($this->any())->method('getAppValue')->willReturn(true);
@@ -263,7 +266,7 @@ class ManagerTest extends TestCase {
$encryptionModule->expects($this->any())
->method('getDisplayName')
->willReturn('TestDummyModule' . $id);
- /** @var \OCP\Encryption\IEncryptionModule $encryptionModule */
+ /** @var IEncryptionModule $encryptionModule */
$manager->registerEncryptionModule('ID' . $id, 'TestDummyModule' . $id, function () use ($encryptionModule) {
return $encryptionModule;
});
diff --git a/tests/lib/Encryption/UpdateTest.php b/tests/lib/Encryption/UpdateTest.php
index 2627e18601d..04ca224c0a1 100644
--- a/tests/lib/Encryption/UpdateTest.php
+++ b/tests/lib/Encryption/UpdateTest.php
@@ -1,4 +1,7 @@
<?php
+
+declare(strict_types=1);
+
/**
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -10,84 +13,93 @@ namespace Test\Encryption;
use OC\Encryption\File;
use OC\Encryption\Update;
use OC\Encryption\Util;
-use OC\Files\Mount\Manager;
use OC\Files\View;
use OCP\Encryption\IEncryptionModule;
+use OCP\Files\File as OCPFile;
+use OCP\Files\Folder;
+use OCP\IUser;
+use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
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 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;
-
- /** @var \PHPUnit\Framework\MockObject\MockObject|LoggerInterface */
- private $logger;
+ private string $uid;
+ private View&MockObject $view;
+ private Util&MockObject $util;
+ private \OC\Encryption\Manager&MockObject $encryptionManager;
+ private IEncryptionModule&MockObject $encryptionModule;
+ private File&MockObject $fileHelper;
+ private LoggerInterface&MockObject $logger;
protected function setUp(): void {
parent::setUp();
$this->view = $this->createMock(View::class);
$this->util = $this->createMock(Util::class);
- $this->mountManager = $this->createMock(Manager::class);
$this->encryptionManager = $this->createMock(\OC\Encryption\Manager::class);
$this->fileHelper = $this->createMock(File::class);
$this->encryptionModule = $this->createMock(IEncryptionModule::class);
$this->logger = $this->createMock(LoggerInterface::class);
$this->uid = 'testUser1';
+ }
- $this->update = new Update(
- $this->view,
- $this->util,
- $this->mountManager,
- $this->encryptionManager,
- $this->fileHelper,
- $this->logger,
- $this->uid);
+ private function getUserMock(string $uid): IUser&MockObject {
+ $user = $this->createMock(IUser::class);
+ $user->expects(self::any())
+ ->method('getUID')
+ ->willReturn($uid);
+ return $user;
+ }
+
+ private function getFileMock(string $path, string $owner): OCPFile&MockObject {
+ $node = $this->createMock(OCPFile::class);
+ $node->expects(self::atLeastOnce())
+ ->method('getPath')
+ ->willReturn($path);
+ $node->expects(self::any())
+ ->method('getOwner')
+ ->willReturn($this->getUserMock($owner));
+
+ return $node;
+ }
+
+ private function getFolderMock(string $path, string $owner): Folder&MockObject {
+ $node = $this->createMock(Folder::class);
+ $node->expects(self::atLeastOnce())
+ ->method('getPath')
+ ->willReturn($path);
+ $node->expects(self::any())
+ ->method('getOwner')
+ ->willReturn($this->getUserMock($owner));
+
+ return $node;
}
/**
- * @dataProvider dataTestUpdate
*
* @param string $path
* @param boolean $isDir
* @param array $allFiles
* @param integer $numberOfFiles
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestUpdate')]
public function testUpdate($path, $isDir, $allFiles, $numberOfFiles): void {
+ $updateMock = $this->getUpdateMock(['getOwnerPath']);
+ $updateMock->expects($this->once())->method('getOwnerPath')
+ ->willReturnCallback(fn (OCPFile|Folder $node) => '/user/' . $node->getPath());
+
$this->encryptionManager->expects($this->once())
->method('getEncryptionModule')
->willReturn($this->encryptionModule);
- $this->view->expects($this->once())
- ->method('is_dir')
- ->willReturn($isDir);
-
if ($isDir) {
$this->util->expects($this->once())
->method('getAllFiles')
->willReturn($allFiles);
+ $node = $this->getFolderMock($path, 'user');
+ } else {
+ $node = $this->getFileMock($path, 'user');
}
$this->fileHelper->expects($this->exactly($numberOfFiles))
@@ -98,15 +110,10 @@ class UpdateTest extends TestCase {
->method('update')
->willReturn(true);
- $this->update->update($path);
+ $updateMock->update($node);
}
- /**
- * data provider for testUpdate()
- *
- * @return array
- */
- public function dataTestUpdate() {
+ public static function dataTestUpdate(): array {
return [
['/user/files/foo', true, ['/user/files/foo/file1.txt', '/user/files/foo/file1.txt'], 2],
['/user/files/test.txt', false, [], 1],
@@ -114,106 +121,70 @@ class UpdateTest extends TestCase {
}
/**
- * @dataProvider dataTestPostRename
*
* @param string $source
* @param string $target
- * @param boolean $encryptionEnabled
*/
- public function testPostRename($source, $target, $encryptionEnabled): void {
- $updateMock = $this->getUpdateMock(['update', 'getOwnerPath']);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestPostRename')]
+ public function testPostRename($source, $target): void {
+ $updateMock = $this->getUpdateMock(['update','getOwnerPath']);
- $this->encryptionManager->expects($this->once())
- ->method('isEnabled')
- ->willReturn($encryptionEnabled);
+ $sourceNode = $this->getFileMock($source, 'user');
+ $targetNode = $this->getFileMock($target, 'user');
- if (dirname($source) === dirname($target) || $encryptionEnabled === false) {
+ if (dirname($source) === dirname($target)) {
$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->expects($this->once())->method('update')
+ ->willReturnCallback(fn (OCPFile|Folder $node) => $this->assertSame(
+ $target,
+ $node->getPath(),
+ 'update needs to be executed for the target destination'
+ ));
}
- $updateMock->postRename(['oldpath' => $source, 'newpath' => $target]);
+ $updateMock->postRename($sourceNode, $targetNode);
}
- /**
- * test data for testPostRename()
- *
- * @return array
- */
- public function dataTestPostRename() {
+ public static function dataTestPostRename(): array {
return [
- ['/test.txt', '/testNew.txt', true],
- ['/test.txt', '/testNew.txt', false],
- ['/folder/test.txt', '/testNew.txt', true],
- ['/folder/test.txt', '/testNew.txt', false],
- ['/folder/test.txt', '/testNew.txt', true],
- ['/test.txt', '/folder/testNew.txt', false],
+ ['/test.txt', '/testNew.txt'],
+ ['/folder/test.txt', '/testNew.txt'],
+ ['/test.txt', '/folder/testNew.txt'],
];
}
-
- /**
- * @dataProvider dataTestPostRestore
- *
- * @param boolean $encryptionEnabled
- */
- public function testPostRestore($encryptionEnabled): void {
+ public function testPostRestore(): void {
$updateMock = $this->getUpdateMock(['update']);
- $this->encryptionManager->expects($this->once())
- ->method('isEnabled')
- ->willReturn($encryptionEnabled);
+ $updateMock->expects($this->once())->method('update')
+ ->willReturnCallback(fn (OCPFile|Folder $node) => $this->assertSame(
+ '/folder/test.txt',
+ $node->getPath(),
+ 'update needs to be executed for the target destination'
+ ));
- 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 [
- [true],
- [false],
- ];
+ $updateMock->postRestore($this->getFileMock('/folder/test.txt', 'user'));
}
/**
* 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')
+ protected function getUpdateMock(array $methods): Update&MockObject {
+ return $this->getMockBuilder(Update::class)
->setConstructorArgs(
[
- $this->view,
$this->util,
- $this->mountManager,
$this->encryptionManager,
$this->fileHelper,
$this->logger,
$this->uid
]
- )->setMethods($methods)->getMock();
+ )
+ ->onlyMethods($methods)
+ ->getMock();
}
}
diff --git a/tests/lib/Encryption/UtilTest.php b/tests/lib/Encryption/UtilTest.php
index 62ef809a867..d1fefee872a 100644
--- a/tests/lib/Encryption/UtilTest.php
+++ b/tests/lib/Encryption/UtilTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -6,6 +7,7 @@
*/
namespace Test\Encryption;
+use OC\Encryption\Exceptions\EncryptionHeaderKeyExistsException;
use OC\Encryption\Util;
use OC\Files\View;
use OCP\Encryption\IEncryptionModule;
@@ -20,7 +22,7 @@ class UtilTest extends TestCase {
*
* @see https://bugs.php.net/bug.php?id=21641
*/
- protected int $headerSize = 8192;
+ protected static int $headerSize = 8192;
/** @var \PHPUnit\Framework\MockObject\MockObject */
protected $view;
@@ -53,15 +55,13 @@ class UtilTest extends TestCase {
);
}
- /**
- * @dataProvider providesHeadersForEncryptionModule
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('providesHeadersForEncryptionModule')]
public function testGetEncryptionModuleId($expected, $header): void {
$id = $this->util->getEncryptionModuleId($header);
$this->assertEquals($expected, $id);
}
- public function providesHeadersForEncryptionModule() {
+ public static function providesHeadersForEncryptionModule(): array {
return [
['', []],
['', ['1']],
@@ -69,9 +69,7 @@ class UtilTest extends TestCase {
];
}
- /**
- * @dataProvider providesHeaders
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('providesHeaders')]
public function testCreateHeader($expected, $header, $moduleId): void {
$em = $this->createMock(IEncryptionModule::class);
$em->expects($this->any())->method('getId')->willReturn($moduleId);
@@ -80,18 +78,18 @@ class UtilTest extends TestCase {
$this->assertEquals($expected, $result);
}
- public function providesHeaders() {
+ public static function providesHeaders(): array {
return [
- [str_pad('HBEGIN:oc_encryption_module:0:HEND', $this->headerSize, '-', STR_PAD_RIGHT)
+ [str_pad('HBEGIN:oc_encryption_module:0:HEND', self::$headerSize, '-', STR_PAD_RIGHT)
, [], '0'],
- [str_pad('HBEGIN:oc_encryption_module:0:custom_header:foo:HEND', $this->headerSize, '-', STR_PAD_RIGHT)
+ [str_pad('HBEGIN:oc_encryption_module:0:custom_header:foo:HEND', self::$headerSize, '-', STR_PAD_RIGHT)
, ['custom_header' => 'foo'], '0'],
];
}
public function testCreateHeaderFailed(): void {
- $this->expectException(\OC\Encryption\Exceptions\EncryptionHeaderKeyExistsException::class);
+ $this->expectException(EncryptionHeaderKeyExistsException::class);
$header = ['header1' => 1, 'header2' => 2, 'oc_encryption_module' => 'foo'];
@@ -102,9 +100,7 @@ class UtilTest extends TestCase {
$this->util->createHeader($header, $em);
}
- /**
- * @dataProvider providePathsForTestIsExcluded
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('providePathsForTestIsExcluded')]
public function testIsExcluded($path, $keyStorageRoot, $expected): void {
$this->config->expects($this->once())
->method('getAppValue')
@@ -120,7 +116,7 @@ class UtilTest extends TestCase {
);
}
- public function providePathsForTestIsExcluded() {
+ public static function providePathsForTestIsExcluded(): array {
return [
['/files_encryption', '', true],
['files_encryption/foo.txt', '', true],
@@ -143,16 +139,14 @@ class UtilTest extends TestCase {
return false;
}
- /**
- * @dataProvider dataTestIsFile
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestIsFile')]
public function testIsFile($path, $expected): void {
$this->assertSame($expected,
$this->util->isFile($path)
);
}
- public function dataTestIsFile() {
+ public static function dataTestIsFile(): array {
return [
['/user/files/test.txt', true],
['/user/files', true],
@@ -165,17 +159,17 @@ class UtilTest extends TestCase {
}
/**
- * @dataProvider dataTestStripPartialFileExtension
*
* @param string $path
* @param string $expected
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestStripPartialFileExtension')]
public function testStripPartialFileExtension($path, $expected): void {
$this->assertSame($expected,
$this->util->stripPartialFileExtension($path));
}
- public function dataTestStripPartialFileExtension() {
+ public static function dataTestStripPartialFileExtension(): array {
return [
['/foo/test.txt', '/foo/test.txt'],
['/foo/test.txt.part', '/foo/test.txt'],
@@ -184,9 +178,7 @@ class UtilTest extends TestCase {
];
}
- /**
- * @dataProvider dataTestParseRawHeader
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestParseRawHeader')]
public function testParseRawHeader($rawHeader, $expected): void {
$result = $this->util->parseRawHeader($rawHeader);
$this->assertSameSize($expected, $result);
@@ -196,28 +188,28 @@ class UtilTest extends TestCase {
}
}
- public function dataTestParseRawHeader() {
+ public static function dataTestParseRawHeader(): array {
return [
- [str_pad('HBEGIN:oc_encryption_module:0:HEND', $this->headerSize, '-', STR_PAD_RIGHT)
+ [str_pad('HBEGIN:oc_encryption_module:0:HEND', self::$headerSize, '-', STR_PAD_RIGHT)
, [Util::HEADER_ENCRYPTION_MODULE_KEY => '0']],
- [str_pad('HBEGIN:oc_encryption_module:0:custom_header:foo:HEND', $this->headerSize, '-', STR_PAD_RIGHT)
+ [str_pad('HBEGIN:oc_encryption_module:0:custom_header:foo:HEND', self::$headerSize, '-', STR_PAD_RIGHT)
, ['custom_header' => 'foo', Util::HEADER_ENCRYPTION_MODULE_KEY => '0']],
- [str_pad('HelloWorld', $this->headerSize, '-', STR_PAD_RIGHT), []],
+ [str_pad('HelloWorld', self::$headerSize, '-', STR_PAD_RIGHT), []],
['', []],
- [str_pad('HBEGIN:oc_encryption_module:0', $this->headerSize, '-', STR_PAD_RIGHT)
+ [str_pad('HBEGIN:oc_encryption_module:0', self::$headerSize, '-', STR_PAD_RIGHT)
, []],
- [str_pad('oc_encryption_module:0:HEND', $this->headerSize, '-', STR_PAD_RIGHT)
+ [str_pad('oc_encryption_module:0:HEND', self::$headerSize, '-', STR_PAD_RIGHT)
, []],
];
}
/**
- * @dataProvider dataTestGetFileKeyDir
*
* @param bool $isSystemWideMountPoint
* @param string $storageRoot
* @param string $expected
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestGetFileKeyDir')]
public function testGetFileKeyDir($isSystemWideMountPoint, $storageRoot, $expected): void {
$path = '/user1/files/foo/bar.txt';
$owner = 'user1';
@@ -245,7 +237,7 @@ class UtilTest extends TestCase {
);
}
- public function dataTestGetFileKeyDir() {
+ public static function dataTestGetFileKeyDir(): array {
return [
[false, '', '/user1/files_encryption/keys/foo/bar.txt/OC_DEFAULT_MODULE/'],
[true, '', '/files_encryption/keys/foo/bar.txt/OC_DEFAULT_MODULE/'],