From 0aa83511a1ee7813a3a55a8901b6f146d51fef01 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 11 Mar 2016 15:26:52 +0100 Subject: [PATCH] remove old share propagation entries from appconfig --- lib/private/repair.php | 2 + lib/private/repair/sharepropagation.php | 52 +++++++++++++++++++++ tests/lib/repair/repairsharepropagation.php | 51 ++++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 lib/private/repair/sharepropagation.php create mode 100644 tests/lib/repair/repairsharepropagation.php diff --git a/lib/private/repair.php b/lib/private/repair.php index d40c6464e1..779f09d42e 100644 --- a/lib/private/repair.php +++ b/lib/private/repair.php @@ -36,6 +36,7 @@ use OC\Repair\Collation; use OC\Repair\DropOldJobs; use OC\Repair\OldGroupMembershipShares; use OC\Repair\RemoveGetETagEntries; +use OC\Repair\SharePropagation; use OC\Repair\SqliteAutoincrement; use OC\Repair\DropOldTables; use OC\Repair\FillETags; @@ -114,6 +115,7 @@ class Repair extends BasicEmitter { new RemoveGetETagEntries(\OC::$server->getDatabaseConnection()), new UpdateOutdatedOcsIds(\OC::$server->getConfig()), new RepairInvalidShares(\OC::$server->getConfig(), \OC::$server->getDatabaseConnection()), + new SharePropagation(\OC::$server->getConfig()), ]; } diff --git a/lib/private/repair/sharepropagation.php b/lib/private/repair/sharepropagation.php new file mode 100644 index 0000000000..26d7a9e128 --- /dev/null +++ b/lib/private/repair/sharepropagation.php @@ -0,0 +1,52 @@ + + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ +namespace OC\Repair; + +use OC\Hooks\BasicEmitter; +use OCP\IConfig; + +class SharePropagation extends BasicEmitter implements \OC\RepairStep { + /** @var IConfig */ + private $config; + + /** + * SharePropagation constructor. + * + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + } + + public function getName() { + return 'Remove old share propagation app entries'; + } + + public function run() { + $keys = $this->config->getAppKeys('files_sharing'); + + foreach ($keys as $key) { + if (is_numeric($key)) { + $this->config->deleteAppValue('files_sharing', $key); + } + } + } +} diff --git a/tests/lib/repair/repairsharepropagation.php b/tests/lib/repair/repairsharepropagation.php new file mode 100644 index 0000000000..6ec8b98ec5 --- /dev/null +++ b/tests/lib/repair/repairsharepropagation.php @@ -0,0 +1,51 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Repair; + +use OC\Repair\SharePropagation; + +class RepairSharePropagation extends \Test\TestCase { + public function keyProvider() { + return [ + [['1', '2'], ['1', '2']], + [['1', '2', 'foo'], ['1', '2']], + [['foo'], []], + ]; + } + + /** + * @dataProvider keyProvider + * @param array $startKeys + * @param array $expectedRemovedKeys + */ + public function testRemovePropagationEntries(array $startKeys, array $expectedRemovedKeys) { + /** @var \PHPUnit_Framework_MockObject_MockObject|\OCP\IConfig $config */ + $config = $this->getMock('\OCP\IConfig'); + $config->expects($this->once()) + ->method('getAppKeys') + ->with('files_sharing') + ->will($this->returnValue($startKeys)); + + $removedKeys = []; + + $config->expects($this->any()) + ->method('deleteAppValue') + ->will($this->returnCallback(function ($app, $key) use (&$removedKeys) { + $removedKeys[] = $key; + })); + + $step = new SharePropagation($config); + $step->run(); + + sort($expectedRemovedKeys); + sort($removedKeys); + + $this->assertEquals($expectedRemovedKeys, $removedKeys); + } +}