Skip to content
Snippets Groups Projects
Commit 03ee3b9a authored by Thomas Müller's avatar Thomas Müller
Browse files

A TestCase which is not annotated to be in group DB will not allow access to...

A TestCase which is not annotated to be in group DB will not allow access to the database connection.
This is necessary to categorize unit test and avoid duplicate test case execution - it also allows us to closely review unit test implementations to identify unnecessary db calls.
parent 9c1dbaf0
No related branches found
No related tags found
No related merge requests found
......@@ -25,14 +25,16 @@ namespace Test;
use OC\Command\QueueBus;
use OC\Files\Filesystem;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\Security\ISecureRandom;
abstract class TestCase extends \PHPUnit_Framework_TestCase {
/**
* @var \OC\Command\QueueBus
*/
/** @var \OC\Command\QueueBus */
private $commandBus;
/** @var IDBConnection */
static private $realDatabase;
protected function getTestTraits() {
$traits = [];
$class = $this;
......@@ -49,6 +51,16 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
}
protected function setUp() {
// detect database access
if (!$this->IsDatabaseAccessAllowed()) {
if (is_null(self::$realDatabase)) {
self::$realDatabase = \OC::$server->getDatabaseConnection();
}
\OC::$server->registerService('DatabaseConnection', function () {
$this->fail('Your test case is not allowed to access the database.');
});
}
// overwrite the command bus with one we can run ourselves
$this->commandBus = new QueueBus();
\OC::$server->registerService('AsyncCommandBus', function () {
......@@ -65,6 +77,14 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
}
protected function tearDown() {
// restore database connection
if (!$this->IsDatabaseAccessAllowed()) {
\OC::$server->registerService('DatabaseConnection', function () {
return self::$realDatabase;
});
}
// further cleanup
$hookExceptions = \OC_Hook::$thrownExceptions;
\OC_Hook::$thrownExceptions = [];
\OC::$server->getLockingProvider()->releaseAll();
......@@ -316,4 +336,13 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
return true;
}
}
private function IsDatabaseAccessAllowed() {
$annotations = $this->getAnnotations();
if (isset($annotations['class']['group']) && in_array('DB', $annotations['class']['group'])) {
return true;
}
return false;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment