make sure that we update the unencrypted size for the versions
This commit is contained in:
parent
7fe047425f
commit
6d0a324144
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue