From ff070d07dc2a2082c578a6b01fd615b2aef9f62a Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Tue, 26 Oct 2021 10:52:39 +0200 Subject: [PATCH] Add unit tests for versioned storage methods --- .../Files/Storage/Wrapper/Encryption.php | 4 +- .../Files/Storage/Wrapper/EncryptionTest.php | 72 ++++++++++++++++++- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/lib/private/Files/Storage/Wrapper/Encryption.php b/lib/private/Files/Storage/Wrapper/Encryption.php index 645c6ad9ea7d..473b0ca08a69 100644 --- a/lib/private/Files/Storage/Wrapper/Encryption.php +++ b/lib/private/Files/Storage/Wrapper/Encryption.php @@ -1132,10 +1132,10 @@ public function getContentOfVersion($internalPath, $versionId) { $fileEncryptionVersion = null; $info = $this->storage->getVersion($internalPath, $versionId); - if ($info['size']) { + if (isset($info['size'])) { $unencryptedSize = $info['size']; } - if ($info['encryptedVersion']) { + if (isset($info['encryptedVersion'])) { $fileEncryptionVersion = $info['encryptedVersion']; } $headerSize = $this->getHeaderSize($stream); diff --git a/tests/lib/Files/Storage/Wrapper/EncryptionTest.php b/tests/lib/Files/Storage/Wrapper/EncryptionTest.php index 43ac90a5606e..85c563ac7ff1 100644 --- a/tests/lib/Files/Storage/Wrapper/EncryptionTest.php +++ b/tests/lib/Files/Storage/Wrapper/EncryptionTest.php @@ -9,10 +9,13 @@ use OC\Files\Storage\Wrapper\Encryption; use OC\Files\View; use OC\User\Manager; -use OCP\Files\Storage\IStorage; +use OCP\Files\Storage\IVersionedStorage; use PHPUnit\Framework\MockObject\MockObject; use Test\Files\Storage\Storage; +interface ITestVersionStorage extends IVersionedStorage, \OC\Files\Storage\Storage { +} + class EncryptionTest extends Storage { /** @@ -1047,4 +1050,71 @@ public function testCopyFromStorageWithMultipleMounts() { $instance->copyFromStorage($sourceStorage, 'files/text.txt', '/files/groupshare/text.txt'); } + + /** + * @param IVersionedStorage | MockObject + * @return Encryption | MockObject + */ + private function getVersionInstance($sourceStorage) { + return $this->getMockBuilder(Encryption::class) + ->setConstructorArgs( + [ + [ + 'storage' => $sourceStorage, + 'root' => 'foo', + 'mountPoint' => '/', + 'mount' => $this->mount + ], + $this->encryptionManager, $this->util, $this->logger, $this->file, null, $this->keyStore, $this->update, $this->mountManager, $this->arrayCache + ] + ) + ->setMethods(['getHeader', 'getFullPath', 'getHeaderSize']) + ->getMock(); + } + + public function testGetVersions() { + $expectedVersions = ['version1']; + $sourceStorage = $this->createMock(ITestVersionStorage::class); + $sourceStorage->method('getVersions')->willReturn($expectedVersions); + $instance = $this->getVersionInstance($sourceStorage); + $this->assertSame($expectedVersions, $instance->getVersions('/test/test.txt')); + } + + public function testGetVersion() { + $expectedVersion = ['version1']; + $sourceStorage = $this->createMock(ITestVersionStorage::class); + $sourceStorage->method('getVersion')->willReturn($expectedVersion); + $instance = $this->getVersionInstance($sourceStorage); + $this->assertSame($expectedVersion, $instance->getVersion('/test/test.txt', 'version1Id')); + } + + public function testGetContentOfVersion() { + $this->encryptionManager->method('isEnabled')->willReturn(true); + $sourceStorage = $this->createMock(ITestVersionStorage::class); + $tmp = \tmpfile(); + $sourceStorage->method('getContentOfVersion')->willReturn($tmp); + $sourceStorage->method('filesize')->willReturn(100); + $sourceStorage->method('getVersion')->willReturn(['version1']); + + $instance = $this->getVersionInstance($sourceStorage); + $instance->method('getHeader')->willReturn(['signed' => true]); + $instance->method('getFullPath')->willReturn('/full/path'); + $instance->method('getHeaderSize')->willReturn($this->headerSize); + + $this->assertNotNull($instance->getContentOfVersion('/test/test.txt', 'version1Id')); + } + + public function testResoreVersion() { + $sourceStorage = $this->createMock(ITestVersionStorage::class); + $sourceStorage->method('restoreVersion')->willReturn(true); + $instance = $this->getVersionInstance($sourceStorage); + $this->assertTrue($instance->restoreVersion('/test/test.txt', 'version1Id')); + } + + public function testSaveVersion() { + $sourceStorage = $this->createMock(ITestVersionStorage::class); + $sourceStorage->method('saveVersion')->willReturn(true); + $instance = $this->getVersionInstance($sourceStorage); + $this->assertTrue($instance->saveVersion('/test/test.txt')); + } }