Skip to content
Snippets Groups Projects
Commit 6d0a3241 authored by Björn Schießle's avatar Björn Schießle
Browse files

make sure that we update the unencrypted size for the versions

parent 7fe04742
No related branches found
No related tags found
No related merge requests found
......@@ -480,6 +480,7 @@ class Encryption extends Wrapper {
* @param bool $preserveMtime
* @param bool $isRename
* @return bool
* @throws \Exception
*/
private function copyBetweenStorage(Storage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime, $isRename) {
......@@ -487,7 +488,18 @@ class Encryption extends Wrapper {
// key from the original file. Just create a 1:1 copy and done
if ($this->isVersion($targetInternalPath) ||
$this->isVersion($sourceInternalPath)) {
return $this->storage->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
$result = $this->storage->copyFromStorage($sourceStorage, $sourceInternalPath, $targetInternalPath);
if ($result) {
$info = $this->getCache('', $sourceStorage)->get($sourceInternalPath);
// make sure that we update the unencrypted size for the version
if (isset($info['encrypted']) && $info['encrypted'] === true) {
$this->updateUnencryptedSize(
$this->getFullPath($targetInternalPath),
$info['size']
);
}
}
return $result;
}
// first copy the keys that we reuse the existing file key on the target location
......
......@@ -559,6 +559,102 @@ class Encryption extends \Test\Files\Storage\Storage {
$this->assertFalse(false);
}
/**
* @dataProvider dataTestCopyBetweenStorageVersions
*
* @param string $sourceInternalPath
* @param string $targetInternalPath
* @param bool $copyResult
* @param bool $encrypted
*/
public function testCopyBetweenStorageVersions($sourceInternalPath, $targetInternalPath, $copyResult, $encrypted) {
$sourceStorage = $this->getMockBuilder('OCP\Files\Storage')
->disableOriginalConstructor()
->getMock();
$targetStorage = $this->getMockBuilder('OCP\Files\Storage')
->disableOriginalConstructor()
->getMock();
$cache = $this->getMockBuilder('\OC\Files\Cache\Cache')
->disableOriginalConstructor()->getMock();
$mountPoint = '/mountPoint';
/** @var \OC\Files\Storage\Wrapper\Encryption |\PHPUnit_Framework_MockObject_MockObject $instance */
$instance = $this->getMockBuilder('\OC\Files\Storage\Wrapper\Encryption')
->setConstructorArgs(
[
[
'storage' => $targetStorage,
'root' => 'foo',
'mountPoint' => $mountPoint,
'mount' => $this->mount
],
$this->encryptionManager,
$this->util,
$this->logger,
$this->file,
null,
$this->keyStore,
$this->update,
$this->mountManager
]
)
->setMethods(['updateUnencryptedSize', 'getCache'])
->getMock();
$targetStorage->expects($this->once())->method('copyFromStorage')
->with($sourceStorage, $sourceInternalPath, $targetInternalPath)
->willReturn($copyResult);
if ($copyResult) {
$instance->expects($this->once())->method('getCache')
->with('', $sourceStorage)
->willReturn($cache);
$cache->expects($this->once())->method('get')
->with($sourceInternalPath)
->willReturn(['encrypted' => $encrypted, 'size' => 42]);
if ($encrypted) {
$instance->expects($this->once())->method('updateUnencryptedSize')
->with($mountPoint . $targetInternalPath, 42);
} else {
$instance->expects($this->never())->method('updateUnencryptedSize');
}
} else {
$instance->expects($this->never())->method('updateUnencryptedSize');
}
$result = $this->invokePrivate(
$instance,
'copyBetweenStorage',
[
$sourceStorage,
$sourceInternalPath,
$targetInternalPath,
false,
false
]
);
$this->assertSame($copyResult, $result);
}
public function dataTestCopyBetweenStorageVersions() {
return [
['/files/foo.txt', '/files_versions/foo.txt.768743', true, true],
['/files/foo.txt', '/files_versions/foo.txt.768743', true, false],
['/files/foo.txt', '/files_versions/foo.txt.768743', false, true],
['/files/foo.txt', '/files_versions/foo.txt.768743', false, false],
['/files_versions/foo.txt.6487634', '/files/foo.txt', true, true],
['/files_versions/foo.txt.6487634', '/files/foo.txt', true, false],
['/files_versions/foo.txt.6487634', '/files/foo.txt', false, true],
['/files_versions/foo.txt.6487634', '/files/foo.txt', false, false],
];
}
/**
* @dataProvider dataTestIsVersion
* @param string $path
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment