Unverified Commit bbd2a075 authored by Thomas Müller's avatar Thomas Müller
Browse files

Remove emitter from class Repair

parent cdcd49b4
......@@ -28,7 +28,6 @@
namespace OC;
use OC\Hooks\BasicEmitter;
use OC\Hooks\Emitter;
use OC\Repair\AssetCache;
use OC\Repair\CleanTags;
......@@ -51,7 +50,7 @@ use OCP\Migration\IRepairStep;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\GenericEvent;
class Repair extends BasicEmitter implements IOutput{
class Repair implements IOutput{
/* @var IRepairStep[] */
private $repairSteps;
/** @var EventDispatcher */
......@@ -178,10 +177,11 @@ class Repair extends BasicEmitter implements IOutput{
}
/**
* {@inheritDoc}
* @param string $scope
* @param string $method
* @param array $arguments
*/
public function emit($scope, $method, array $arguments = []) {
parent::emit($scope, $method, $arguments);
if (!is_null($this->dispatcher)) {
$this->dispatcher->dispatch("$scope::$method",
new GenericEvent("$scope::$method", $arguments));
......
......@@ -132,6 +132,8 @@ class Updater extends BasicEmitter {
* @return bool true if the operation succeeded, false otherwise
*/
public function upgrade() {
$this->emitRepairEvents();
$logLevel = $this->config->getSystemValue('loglevel', \OCP\Util::WARN);
$this->emit('\OC\Updater', 'setDebugLogLevel', [ $logLevel, $this->logLevelNames[$logLevel] ]);
$this->config->setSystemValue('loglevel', \OCP\Util::DEBUG);
......@@ -195,26 +197,6 @@ class Updater extends BasicEmitter {
&& (version_compare($oldVersion, $newVersion, '<=') || $this->config->getSystemValue('debug', false)));
}
/**
* Forward messages emitted by the repair routine
*
* @param Repair $repair repair routine
*/
private function emitRepairMessages(Repair $repair) {
$repair->listen('\OC\Repair', 'warning', function ($description) {
$this->emit('\OC\Updater', 'repairWarning', array($description));
});
$repair->listen('\OC\Repair', 'error', function ($description) {
$this->emit('\OC\Updater', 'repairError', array($description));
});
$repair->listen('\OC\Repair', 'info', function ($description) {
$this->emit('\OC\Updater', 'repairInfo', array($description));
});
$repair->listen('\OC\Repair', 'step', function ($description) {
$this->emit('\OC\Updater', 'repairStep', array($description));
});
}
/**
* runs the update actions in maintenance mode, does not upgrade the source files
* except the main .htaccess file
......@@ -245,8 +227,7 @@ class Updater extends BasicEmitter {
file_put_contents($this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/.ocdata', '');
// pre-upgrade repairs
$repair = new Repair(Repair::getBeforeUpgradeRepairSteps());
$this->emitRepairMessages($repair);
$repair = new Repair(Repair::getBeforeUpgradeRepairSteps(), \OC::$server->getEventDispatcher());
$repair->run();
// simulate DB upgrade
......@@ -278,8 +259,7 @@ class Updater extends BasicEmitter {
}
// post-upgrade repairs
$repair = new Repair(Repair::getRepairSteps());
$this->emitRepairMessages($repair);
$repair = new Repair(Repair::getRepairSteps(), \OC::$server->getEventDispatcher());
$repair->run();
//Invalidate update feed
......@@ -362,7 +342,6 @@ class Updater extends BasicEmitter {
* @throws NeedsUpdateException
*/
protected function doAppUpgrade() {
$this->emitRepairEvents();
$apps = \OC_App::getEnabledApps();
$priorityTypes = array('authentication', 'filesystem', 'logging');
$pseudoOtherType = 'other';
......
......@@ -6,7 +6,10 @@
* See the COPYING-README file.
*/
namespace Test;
use OCP\Migration\IRepairStep;
use Symfony\Component\EventDispatcher\EventDispatcher;
class TestRepairStep implements IRepairStep {
private $warning;
......@@ -29,91 +32,77 @@ class TestRepairStep implements IRepairStep {
}
}
class Test_Repair extends \Test\TestCase {
public function testRunRepairStep() {
$output = array();
class RepairTest extends TestCase {
/** @var \OC\Repair */
private $repair;
/** @var string[] */
private $outputArray;
$repair = new \OC\Repair();
$repair->addStep(new TestRepairStep(false));
public function setUp() {
parent::setUp();
$dispatcher = new EventDispatcher();
$this->repair = new \OC\Repair([], $dispatcher);
$repair->listen('\OC\Repair', 'warning', function ($description) use (&$output) {
$output[] = 'warning: ' . $description;
$dispatcher->addListener('\OC\Repair::warning', function ($event) {
/** @var \Symfony\Component\EventDispatcher\GenericEvent $event */
$this->outputArray[] = 'warning: ' . $event->getArgument(0);
});
$repair->listen('\OC\Repair', 'info', function ($description) use (&$output) {
$output[] = 'info: ' . $description;
$dispatcher->addListener('\OC\Repair::info', function ($event) {
/** @var \Symfony\Component\EventDispatcher\GenericEvent $event */
$this->outputArray[] = 'info: ' . $event->getArgument(0);
});
$repair->listen('\OC\Repair', 'step', function ($description) use (&$output) {
$output[] = 'step: ' . $description;
$dispatcher->addListener('\OC\Repair::step', function ($event) {
/** @var \Symfony\Component\EventDispatcher\GenericEvent $event */
$this->outputArray[] = 'step: ' . $event->getArgument(0);
});
}
public function testRunRepairStep() {
$repair->run();
$this->repair->addStep(new TestRepairStep(false));
$this->repair->run();
$this->assertEquals(
array(
'step: Test Name',
'info: Simulated info',
),
$output
$this->outputArray
);
}
public function testRunRepairStepThatFail() {
$output = array();
$repair = new \OC\Repair();
$repair->addStep(new TestRepairStep(true));
$repair->listen('\OC\Repair', 'warning', function ($description) use (&$output) {
$output[] = 'warning: ' . $description;
});
$repair->listen('\OC\Repair', 'info', function ($description) use (&$output) {
$output[] = 'info: ' . $description;
});
$repair->listen('\OC\Repair', 'step', function ($description) use (&$output) {
$output[] = 'step: ' . $description;
});
$repair->run();
$this->repair->addStep(new TestRepairStep(true));
$this->repair->run();
$this->assertEquals(
array(
'step: Test Name',
'warning: Simulated warning',
),
$output
$this->outputArray
);
}
public function testRunRepairStepsWithException() {
$output = array();
$mock = $this->getMock('TestRepairStep');
$mock = $this->getMock('\Test\TestRepairStep');
$mock->expects($this->any())
->method('run')
->will($this->throwException(new Exception));
->will($this->throwException(new \Exception()));
$mock->expects($this->any())
->method('getName')
->will($this->returnValue('Exception Test'));
$repair = new \OC\Repair();
$repair->addStep($mock);
$repair->addStep(new TestRepairStep(false));
$repair->listen('\OC\Repair', 'warning', function ($description) use (&$output) {
$output[] = 'warning: ' . $description;
});
$repair->listen('\OC\Repair', 'info', function ($description) use (&$output) {
$output[] = 'info: ' . $description;
});
$repair->listen('\OC\Repair', 'step', function ($description) use (&$output) {
$output[] = 'step: ' . $description;
});
$this->repair->addStep($mock);
$this->repair->addStep(new TestRepairStep(false));
$thrown = false;
try {
$repair->run();
$this->repair->run();
}
catch (Exception $e) {
catch (\Exception $e) {
$thrown = true;
}
......@@ -123,28 +112,14 @@ class Test_Repair extends \Test\TestCase {
array(
'step: Exception Test',
),
$output
$this->outputArray
);
}
public function testRunRepairStepsContinueAfterWarning() {
$output = array();
$repair = new \OC\Repair();
$repair->addStep(new TestRepairStep(true));
$repair->addStep(new TestRepairStep(false));
$repair->listen('\OC\Repair', 'warning', function ($description) use (&$output) {
$output[] = 'warning: ' . $description;
});
$repair->listen('\OC\Repair', 'info', function ($description) use (&$output) {
$output[] = 'info: ' . $description;
});
$repair->listen('\OC\Repair', 'step', function ($description) use (&$output) {
$output[] = 'step: ' . $description;
});
$repair->run();
$this->repair->addStep(new TestRepairStep(true));
$this->repair->addStep(new TestRepairStep(false));
$this->repair->run();
$this->assertEquals(
array(
......@@ -153,7 +128,7 @@ class Test_Repair extends \Test\TestCase {
'step: Test Name',
'info: Simulated info',
),
$output
$this->outputArray
);
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment