mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Fix FixEncryptedVersionTest test
Fixed setup to use EncryptionTrait like other existing tests. Fix expectations to not rely on side effects from previous test cases. Signed-off-by: Vincent Petry <vincent@nextcloud.com>
This commit is contained in:
parent
6170912ace
commit
101c65a949
2 changed files with 88 additions and 161 deletions
|
|
@ -121,12 +121,12 @@ class FixEncryptedVersion extends Command {
|
|||
private function walkPathOfUser($user, $path, OutputInterface $output): int {
|
||||
$this->setupUserFs($user);
|
||||
if (!$this->view->file_exists($path)) {
|
||||
$output->writeln("<error>Path $path does not exist. Please provide a valid path.</error>");
|
||||
$output->writeln("<error>Path \"$path\" does not exist. Please provide a valid path.</error>");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ($this->view->is_file($path)) {
|
||||
$output->writeln("Verifying the content of file $path");
|
||||
$output->writeln("Verifying the content of file \"$path\"");
|
||||
$this->verifyFileContent($path, $output);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -139,7 +139,7 @@ class FixEncryptedVersion extends Command {
|
|||
if ($this->view->is_dir($path)) {
|
||||
$directories[] = $path;
|
||||
} else {
|
||||
$output->writeln("Verifying the content of file $path");
|
||||
$output->writeln("Verifying the content of file \"$path\"");
|
||||
$this->verifyFileContent($path, $output);
|
||||
}
|
||||
}
|
||||
|
|
@ -164,7 +164,7 @@ class FixEncryptedVersion extends Command {
|
|||
$handle = $this->view->fopen($path, 'rb');
|
||||
|
||||
if (\fread($handle, 9001) !== false) {
|
||||
$output->writeln("<info>The file $path is: OK</info>");
|
||||
$output->writeln("<info>The file \"$path\" is: OK</info>");
|
||||
}
|
||||
|
||||
\fclose($handle);
|
||||
|
|
@ -175,7 +175,7 @@ class FixEncryptedVersion extends Command {
|
|||
//If allowOnce is set to false, this becomes recursive.
|
||||
if ($ignoreCorrectEncVersionCall === true) {
|
||||
//Lets rectify the file by correcting encrypted version
|
||||
$output->writeln("<info>Attempting to fix the path: $path</info>");
|
||||
$output->writeln("<info>Attempting to fix the path: \"$path\"</info>");
|
||||
return $this->correctEncryptedVersion($path, $output);
|
||||
}
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -21,18 +21,13 @@
|
|||
|
||||
namespace OCA\Encryption\Tests\Command;
|
||||
|
||||
use OC\Files\Filesystem;
|
||||
use OC\Files\View;
|
||||
use OCA\Encryption\Command\FixEncryptedVersion;
|
||||
use OCA\Encryption\Crypto\Crypt;
|
||||
use OCA\Encryption\KeyManager;
|
||||
use OCA\Encryption\Session;
|
||||
use OCA\Encryption\Util;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\IUserManager;
|
||||
use Symfony\Component\Console\Tester\CommandTester;
|
||||
use OCA\Encryption\Users\Setup;
|
||||
use Test\TestCase;
|
||||
use Test\Traits\EncryptionTrait;
|
||||
use Test\Traits\MountProviderTrait;
|
||||
use Test\Traits\UserTrait;
|
||||
|
||||
/**
|
||||
* Class FixEncryptedVersionTest
|
||||
|
|
@ -41,16 +36,11 @@ use Test\TestCase;
|
|||
* @package OCA\Encryption\Tests\Command
|
||||
*/
|
||||
class FixEncryptedVersionTest extends TestCase {
|
||||
public const TEST_ENCRYPTION_VERSION_AFFECTED_USER = 'test_enc_version_affected_user1';
|
||||
use MountProviderTrait;
|
||||
use EncryptionTrait;
|
||||
use UserTrait;
|
||||
|
||||
/** @var IRootFolder */
|
||||
private $rootFolder;
|
||||
|
||||
/** @var IUserManager */
|
||||
private $userManager;
|
||||
|
||||
/** @var View */
|
||||
private $view;
|
||||
private $userId;
|
||||
|
||||
/** @var FixEncryptedVersion */
|
||||
private $fixEncryptedVersion;
|
||||
|
|
@ -58,88 +48,31 @@ class FixEncryptedVersionTest extends TestCase {
|
|||
/** @var CommandTester */
|
||||
private $commandTester;
|
||||
|
||||
public static function setUpBeforeClass(): void {
|
||||
parent::setUpBeforeClass();
|
||||
//Enable encryption
|
||||
\OC::$server->getConfig()->setAppValue('core', 'encryption_enabled', 'yes');
|
||||
//Enable Masterkey
|
||||
\OC::$server->getConfig()->setAppValue('encryption', 'useMasterKey', '1');
|
||||
$crypt = new Crypt(\OC::$server->getLogger(), \OC::$server->getUserSession(), \OC::$server->getConfig(), \OC::$server->getL10N('encryption'));
|
||||
$encryptionSession = new Session(\OC::$server->getSession());
|
||||
$view = new View("/");
|
||||
$encryptionUtil = new Util($view, $crypt, \OC::$server->getLogger(), \OC::$server->getUserSession(), \OC::$server->getConfig(), \OC::$server->getUserManager());
|
||||
$keyManager = new KeyManager(
|
||||
\OC::$server->getEncryptionKeyStorage(),
|
||||
$crypt,
|
||||
\OC::$server->getConfig(),
|
||||
\OC::$server->getUserSession(),
|
||||
$encryptionSession,
|
||||
\OC::$server->getLogger(),
|
||||
$encryptionUtil
|
||||
);
|
||||
$userSetup = new Setup(\OC::$server->getLogger(), \OC::$server->getUserSession(), $crypt, $keyManager);
|
||||
$userSetup->setupSystem();
|
||||
\OC::$server->getUserManager()->createUser(self::TEST_ENCRYPTION_VERSION_AFFECTED_USER, 'foo');
|
||||
}
|
||||
|
||||
public static function tearDownAfterClass(): void {
|
||||
parent::tearDownAfterClass();
|
||||
\OC\Files\Filesystem::clearMounts();
|
||||
$user = \OC::$server->getUserManager()->get(self::TEST_ENCRYPTION_VERSION_AFFECTED_USER);
|
||||
if ($user !== null) {
|
||||
$user->delete();
|
||||
}
|
||||
\OC::$server->getConfig()->deleteAppValue('core', 'encryption_enabled');
|
||||
\OC::$server->getConfig()->deleteAppValue('core', 'default_encryption_module');
|
||||
\OC::$server->getConfig()->deleteAppValues('encryption');
|
||||
Filesystem::getLoader()->removeStorageWrapper("oc_encryption");
|
||||
}
|
||||
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
$this->rootFolder = \OC::$server->getRootFolder();
|
||||
$this->userManager = \OC::$server->getUserManager();
|
||||
$this->view = new View("/");
|
||||
$this->fixEncryptedVersion = new FixEncryptedVersion($this->rootFolder, $this->userManager, $this->view);
|
||||
|
||||
\OC::$server->getConfig()->setAppValue('encryption', 'useMasterKey', '1');
|
||||
|
||||
$this->userId = $this->getUniqueId('user_');
|
||||
|
||||
$this->createUser($this->userId, 'foo12345678');
|
||||
$tmpFolder = \OC::$server->getTempManager()->getTemporaryFolder();
|
||||
$this->registerMount($this->userId, '\OC\Files\Storage\Local', '/' . $this->userId, ['datadir' => $tmpFolder]);
|
||||
$this->setupForUser($this->userId, 'foo12345678');
|
||||
$this->loginWithEncryption($this->userId);
|
||||
|
||||
$this->fixEncryptedVersion = new FixEncryptedVersion(
|
||||
\OC::$server->getConfig(),
|
||||
\OC::$server->getLogger(),
|
||||
\OC::$server->getRootFolder(),
|
||||
\OC::$server->getUserManager(),
|
||||
new View('/')
|
||||
);
|
||||
$this->commandTester = new CommandTester($this->fixEncryptedVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* In this test the encrypted version is set to zero whereas it should have been
|
||||
* set to a positive non zero number.
|
||||
*/
|
||||
public function testEncryptedVersionIsNotZero() {
|
||||
\OC::$server->getUserSession()->login(self::TEST_ENCRYPTION_VERSION_AFFECTED_USER, 'foo');
|
||||
$view = new View("/" . self::TEST_ENCRYPTION_VERSION_AFFECTED_USER . "/files");
|
||||
|
||||
$view->touch('hello.txt');
|
||||
$view->touch('world.txt');
|
||||
$view->file_put_contents('hello.txt', 'a test string for hello');
|
||||
$view->file_put_contents('world.txt', 'a test string for world');
|
||||
|
||||
$fileInfo = $view->getFileInfo('hello.txt');
|
||||
|
||||
$storage = $fileInfo->getStorage();
|
||||
$cache = $storage->getCache();
|
||||
$fileCache = $cache->get($fileInfo->getId());
|
||||
|
||||
//Now change the encrypted version to zero
|
||||
$cacheInfo = ['encryptedVersion' => 0, 'encrypted' => 0];
|
||||
$cache->put($fileCache->getPath(), $cacheInfo);
|
||||
|
||||
$this->commandTester->execute([
|
||||
'user' => self::TEST_ENCRYPTION_VERSION_AFFECTED_USER
|
||||
]);
|
||||
|
||||
$output = $this->commandTester->getDisplay();
|
||||
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/hello.txt
|
||||
Attempting to fix the path: /test_enc_version_affected_user1/files/hello.txt
|
||||
Increment the encrypted version to 1
|
||||
The file /test_enc_version_affected_user1/files/hello.txt is: OK
|
||||
Fixed the file: /test_enc_version_affected_user1/files/hello.txt with version 1", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/world.txt
|
||||
The file /test_enc_version_affected_user1/files/world.txt is: OK", $output);
|
||||
$this->assertTrue(\OC::$server->getEncryptionManager()->isEnabled());
|
||||
$this->assertTrue(\OC::$server->getEncryptionManager()->isReady());
|
||||
$this->assertTrue(\OC::$server->getEncryptionManager()->isReadyForUser($this->userId));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -147,8 +80,7 @@ The file /test_enc_version_affected_user1/files/world.txt is: OK", $output);
|
|||
* but greater than zero
|
||||
*/
|
||||
public function testEncryptedVersionLessThanOriginalValue() {
|
||||
\OC::$server->getUserSession()->login(self::TEST_ENCRYPTION_VERSION_AFFECTED_USER, 'foo');
|
||||
$view = new View("/" . self::TEST_ENCRYPTION_VERSION_AFFECTED_USER . "/files");
|
||||
$view = new View("/" . $this->userId . "/files");
|
||||
|
||||
$view->touch('hello.txt');
|
||||
$view->touch('world.txt');
|
||||
|
|
@ -184,30 +116,28 @@ The file /test_enc_version_affected_user1/files/world.txt is: OK", $output);
|
|||
$cache2->put($filecache2->getPath(), $cacheInfo);
|
||||
|
||||
$this->commandTester->execute([
|
||||
'user' => self::TEST_ENCRYPTION_VERSION_AFFECTED_USER
|
||||
'user' => $this->userId
|
||||
]);
|
||||
|
||||
$output = $this->commandTester->getDisplay();
|
||||
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/foo.txt
|
||||
The file /test_enc_version_affected_user1/files/foo.txt is: OK", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/hello.txt
|
||||
Attempting to fix the path: /test_enc_version_affected_user1/files/hello.txt
|
||||
$this->assertStringContainsString("Verifying the content of file \"/$this->userId/files/foo.txt\"
|
||||
The file \"/$this->userId/files/foo.txt\" is: OK", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file \"/$this->userId/files/hello.txt\"
|
||||
Attempting to fix the path: \"/$this->userId/files/hello.txt\"
|
||||
Decrement the encrypted version to 1
|
||||
Increment the encrypted version to 3
|
||||
Increment the encrypted version to 4
|
||||
Increment the encrypted version to 5
|
||||
Increment the encrypted version to 6
|
||||
The file /test_enc_version_affected_user1/files/hello.txt is: OK
|
||||
Fixed the file: /test_enc_version_affected_user1/files/hello.txt with version 6", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/world.txt
|
||||
Attempting to fix the path: /test_enc_version_affected_user1/files/world.txt
|
||||
The file \"/$this->userId/files/hello.txt\" is: OK
|
||||
Fixed the file: \"/$this->userId/files/hello.txt\" with version 5", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file \"/$this->userId/files/world.txt\"
|
||||
Attempting to fix the path: \"/$this->userId/files/world.txt\"
|
||||
Increment the encrypted version to 2
|
||||
Increment the encrypted version to 3
|
||||
Increment the encrypted version to 4
|
||||
Increment the encrypted version to 5
|
||||
The file /test_enc_version_affected_user1/files/world.txt is: OK
|
||||
Fixed the file: /test_enc_version_affected_user1/files/world.txt with version 5", $output);
|
||||
The file \"/$this->userId/files/world.txt\" is: OK
|
||||
Fixed the file: \"/$this->userId/files/world.txt\" with version 4", $output);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -215,8 +145,7 @@ Fixed the file: /test_enc_version_affected_user1/files/world.txt with version 5"
|
|||
* but greater than zero
|
||||
*/
|
||||
public function testEncryptedVersionGreaterThanOriginalValue() {
|
||||
\OC::$server->getUserSession()->login(self::TEST_ENCRYPTION_VERSION_AFFECTED_USER, 'foo');
|
||||
$view = new View("/" . self::TEST_ENCRYPTION_VERSION_AFFECTED_USER . "/files");
|
||||
$view = new View("/" . $this->userId . "/files");
|
||||
|
||||
$view->touch('hello.txt');
|
||||
$view->touch('world.txt');
|
||||
|
|
@ -237,7 +166,7 @@ Fixed the file: /test_enc_version_affected_user1/files/world.txt with version 5"
|
|||
$fileCache1 = $cache1->get($fileInfo1->getId());
|
||||
|
||||
//Now change the encrypted version to fifteen
|
||||
$cacheInfo = ['encryptedVersion' => 15, 'encrypted' => 15];
|
||||
$cacheInfo = ['encryptedVersion' => 5, 'encrypted' => 5];
|
||||
$cache1->put($fileCache1->getPath(), $cacheInfo);
|
||||
|
||||
$fileInfo2 = $view->getFileInfo('world.txt');
|
||||
|
|
@ -246,42 +175,33 @@ Fixed the file: /test_enc_version_affected_user1/files/world.txt with version 5"
|
|||
$filecache2 = $cache2->get($fileInfo2->getId());
|
||||
|
||||
//Now change the encrypted version to 1
|
||||
$cacheInfo = ['encryptedVersion' => 15, 'encrypted' => 15];
|
||||
$cacheInfo = ['encryptedVersion' => 6, 'encrypted' => 6];
|
||||
$cache2->put($filecache2->getPath(), $cacheInfo);
|
||||
|
||||
$this->commandTester->execute([
|
||||
'user' => self::TEST_ENCRYPTION_VERSION_AFFECTED_USER
|
||||
'user' => $this->userId
|
||||
]);
|
||||
|
||||
$output = $this->commandTester->getDisplay();
|
||||
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/foo.txt
|
||||
The file /test_enc_version_affected_user1/files/foo.txt is: OK", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/hello.txt
|
||||
Attempting to fix the path: /test_enc_version_affected_user1/files/hello.txt
|
||||
Decrement the encrypted version to 14
|
||||
Decrement the encrypted version to 13
|
||||
Decrement the encrypted version to 12
|
||||
Decrement the encrypted version to 11
|
||||
Decrement the encrypted version to 10
|
||||
Decrement the encrypted version to 9
|
||||
The file /test_enc_version_affected_user1/files/hello.txt is: OK
|
||||
Fixed the file: /test_enc_version_affected_user1/files/hello.txt with version 9", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/world.txt
|
||||
Attempting to fix the path: /test_enc_version_affected_user1/files/world.txt
|
||||
Decrement the encrypted version to 14
|
||||
Decrement the encrypted version to 13
|
||||
Decrement the encrypted version to 12
|
||||
Decrement the encrypted version to 11
|
||||
Decrement the encrypted version to 10
|
||||
Decrement the encrypted version to 9
|
||||
The file /test_enc_version_affected_user1/files/world.txt is: OK
|
||||
Fixed the file: /test_enc_version_affected_user1/files/world.txt with version 9", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file \"/$this->userId/files/foo.txt\"
|
||||
The file \"/$this->userId/files/foo.txt\" is: OK", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file \"/$this->userId/files/hello.txt\"
|
||||
Attempting to fix the path: \"/$this->userId/files/hello.txt\"
|
||||
Decrement the encrypted version to 4
|
||||
Decrement the encrypted version to 3
|
||||
The file \"/$this->userId/files/hello.txt\" is: OK
|
||||
Fixed the file: \"/$this->userId/files/hello.txt\" with version 3", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file \"/$this->userId/files/world.txt\"
|
||||
Attempting to fix the path: \"/$this->userId/files/world.txt\"
|
||||
Decrement the encrypted version to 5
|
||||
Decrement the encrypted version to 4
|
||||
The file \"/$this->userId/files/world.txt\" is: OK
|
||||
Fixed the file: \"/$this->userId/files/world.txt\" with version 4", $output);
|
||||
}
|
||||
|
||||
public function testVersionIsRestoredToOriginalIfNoFixIsFound() {
|
||||
\OC::$server->getUserSession()->login(self::TEST_ENCRYPTION_VERSION_AFFECTED_USER, 'foo');
|
||||
$view = new View("/" . self::TEST_ENCRYPTION_VERSION_AFFECTED_USER . "/files");
|
||||
$view = new View("/" . $this->userId . "/files");
|
||||
|
||||
$view->touch('bar.txt');
|
||||
for ($i = 0; $i < 40; $i++) {
|
||||
|
|
@ -298,7 +218,7 @@ Fixed the file: /test_enc_version_affected_user1/files/world.txt with version 9"
|
|||
$cache->put($fileCache->getPath(), $cacheInfo);
|
||||
|
||||
$this->commandTester->execute([
|
||||
'user' => self::TEST_ENCRYPTION_VERSION_AFFECTED_USER
|
||||
'user' => $this->userId
|
||||
]);
|
||||
|
||||
$cacheInfo = $cache->get($fileInfo->getId());
|
||||
|
|
@ -311,36 +231,43 @@ Fixed the file: /test_enc_version_affected_user1/files/world.txt with version 9"
|
|||
* Test commands with a file path
|
||||
*/
|
||||
public function testExecuteWithFilePathOption() {
|
||||
\OC::$server->getUserSession()->login(self::TEST_ENCRYPTION_VERSION_AFFECTED_USER, 'foo');
|
||||
$view = new View("/" . $this->userId . "/files");
|
||||
|
||||
$view->touch('hello.txt');
|
||||
$view->touch('world.txt');
|
||||
|
||||
$this->commandTester->execute([
|
||||
'user' => self::TEST_ENCRYPTION_VERSION_AFFECTED_USER,
|
||||
'user' => $this->userId,
|
||||
'--path' => "/hello.txt"
|
||||
]);
|
||||
|
||||
$output = $this->commandTester->getDisplay();
|
||||
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/hello.txt
|
||||
The file /test_enc_version_affected_user1/files/hello.txt is: OK", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file \"/$this->userId/files/hello.txt\"
|
||||
The file \"/$this->userId/files/hello.txt\" is: OK", $output);
|
||||
$this->assertStringNotContainsString('world.txt', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test commands with a directory path
|
||||
*/
|
||||
public function testExecuteWithDirectoryPathOption() {
|
||||
$view = new View("/" . $this->userId . "/files");
|
||||
|
||||
$view->mkdir('sub');
|
||||
$view->touch('sub/hello.txt');
|
||||
$view->touch('world.txt');
|
||||
|
||||
$this->commandTester->execute([
|
||||
'user' => self::TEST_ENCRYPTION_VERSION_AFFECTED_USER,
|
||||
'--path' => "/"
|
||||
'user' => $this->userId,
|
||||
'--path' => "/sub"
|
||||
]);
|
||||
|
||||
$output = $this->commandTester->getDisplay();
|
||||
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/hello.txt
|
||||
The file /test_enc_version_affected_user1/files/hello.txt is: OK", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/world.txt
|
||||
The file /test_enc_version_affected_user1/files/world.txt is: OK", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file /test_enc_version_affected_user1/files/foo.txt
|
||||
The file /test_enc_version_affected_user1/files/foo.txt is: OK", $output);
|
||||
$this->assertStringContainsString("Verifying the content of file \"/$this->userId/files/sub/hello.txt\"
|
||||
The file \"/$this->userId/files/sub/hello.txt\" is: OK", $output);
|
||||
$this->assertStringNotContainsString('world.txt', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -354,7 +281,7 @@ The file /test_enc_version_affected_user1/files/foo.txt is: OK", $output);
|
|||
|
||||
$output = $this->commandTester->getDisplay();
|
||||
|
||||
$this->assertStringContainsString("No user id provided.", $output);
|
||||
$this->assertStringContainsString('does not exist', $output);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -362,12 +289,12 @@ The file /test_enc_version_affected_user1/files/foo.txt is: OK", $output);
|
|||
*/
|
||||
public function testExecuteWithNonExistentPath() {
|
||||
$this->commandTester->execute([
|
||||
'user' => self::TEST_ENCRYPTION_VERSION_AFFECTED_USER,
|
||||
'--path' => "/non-exist"
|
||||
'user' => $this->userId,
|
||||
'--path' => '/non-exist'
|
||||
]);
|
||||
|
||||
$output = $this->commandTester->getDisplay();
|
||||
|
||||
$this->assertStringContainsString("Please provide a valid path.", $output);
|
||||
$this->assertStringContainsString('Please provide a valid path.', $output);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue