diff options
-rw-r--r-- | lib/private/command/queuebus.php | 53 | ||||
-rw-r--r-- | tests/lib/testcase.php | 37 |
2 files changed, 83 insertions, 7 deletions
diff --git a/lib/private/command/queuebus.php b/lib/private/command/queuebus.php new file mode 100644 index 00000000000..29c769e0107 --- /dev/null +++ b/lib/private/command/queuebus.php @@ -0,0 +1,53 @@ +<?php +/** + * Copyright (c) 2015 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 OC\Command; + +use OCP\Command\IBus; +use OCP\Command\ICommand; + +class QueueBus implements IBus { + /** + * @var (ICommand|callable)[] + */ + private $queue; + + /** + * Schedule a command to be fired + * + * @param \OCP\Command\ICommand | callable $command + */ + public function push($command) { + $this->queue[] = $command; + } + + /** + * Require all commands using a trait to be run synchronous + * + * @param string $trait + */ + public function requireSync($trait) { + } + + /** + * @param \OCP\Command\ICommand | callable $command + */ + private function runCommand($command) { + if ($command instanceof ICommand) { + $command->handle(); + } else { + $command(); + } + } + + public function run() { + while ($command = array_shift($this->queue)) { + $this->runCommand($command); + } + } +} diff --git a/tests/lib/testcase.php b/tests/lib/testcase.php index 1ea3aa13547..2b4540120d2 100644 --- a/tests/lib/testcase.php +++ b/tests/lib/testcase.php @@ -22,10 +22,24 @@ namespace Test; +use OC\Command\QueueBus; use OCP\Security\ISecureRandom; abstract class TestCase extends \PHPUnit_Framework_TestCase { /** + * @var \OC\Command\QueueBus + */ + private $commandBus; + + protected function setUp() { + // overwrite the command bus with one we can run ourselves + $this->commandBus = new QueueBus(); + \OC::$server->registerService('AsyncCommandBus', function(){ + return $this->commandBus; + }); + } + + /** * Returns a unique identifier as uniqid() is not reliable sometimes * * @param string $prefix @@ -55,6 +69,7 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { /** * Remove all entries from the files map table + * * @param string $dataDir */ static protected function tearDownAfterClassCleanFileMapper($dataDir) { @@ -66,6 +81,7 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { /** * Remove all entries from the storages table + * * @throws \OC\DatabaseException */ static protected function tearDownAfterClassCleanStorages() { @@ -76,6 +92,7 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { /** * Remove all entries from the filecache table + * * @throws \OC\DatabaseException */ static protected function tearDownAfterClassCleanFileCache() { @@ -91,11 +108,11 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { */ static protected function tearDownAfterClassCleanStrayDataFiles($dataDir) { $knownEntries = array( - 'owncloud.log' => true, - 'owncloud.db' => true, - '.ocdata' => true, - '..' => true, - '.' => true, + 'owncloud.log' => true, + 'owncloud.db' => true, + '.ocdata' => true, + '..' => true, + '.' => true, ); if ($dh = opendir($dataDir)) { @@ -122,8 +139,7 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { $path = $dir . '/' . $file; if (is_dir($path)) { self::tearDownAfterClassCleanStrayDataUnlinkDir($path); - } - else { + } else { @unlink($path); } } @@ -169,4 +185,11 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase { \OC_Util::tearDownFS(); \OC_User::setUserId(''); } + + /** + * Run all commands pushed to the bus + */ + protected function runCommands() { + $this->commandBus->run(); + } } |