diff options
-rw-r--r-- | lib/private/repair.php | 2 | ||||
-rw-r--r-- | lib/private/repair/sharepropagation.php | 52 | ||||
-rw-r--r-- | tests/lib/repair/repairsharepropagation.php | 51 |
3 files changed, 105 insertions, 0 deletions
diff --git a/lib/private/repair.php b/lib/private/repair.php index d40c6464e14..779f09d42ec 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 00000000000..26d7a9e128c --- /dev/null +++ b/lib/private/repair/sharepropagation.php @@ -0,0 +1,52 @@ +<?php +/** + * @author Georg Ehrke <georg@owncloud.com> + * + * @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 <http://www.gnu.org/licenses/> + * + */ +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 00000000000..6ec8b98ec56 --- /dev/null +++ b/tests/lib/repair/repairsharepropagation.php @@ -0,0 +1,51 @@ +<?php +/** + * Copyright (c) 2016 Robin Appelman <icewind@owncloud.com> + * 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); + } +} |