summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-12-21 18:08:08 +0100
committerVincent Petry <pvince81@owncloud.com>2015-12-21 18:14:29 +0100
commitd7169ffdec2a744683b9fb613dd08d560ed9842f (patch)
treea7af0befac2cbd505d7ed5bd78e20e8393f5d432
parent0b913f00c7e49c57d2e0068854b5d4c133b0cb36 (diff)
downloadnextcloud-server-d7169ffdec2a744683b9fb613dd08d560ed9842f.tar.gz
nextcloud-server-d7169ffdec2a744683b9fb613dd08d560ed9842f.zip
Restore DB connection after failure
In case of failure, PHPUnit seems to skip `tearDown`, so any useful assertion messages cannot be shown because `tearDownAfterClass` is throwing an error because of database usage. This commit makes sure we also restore the database in `tearDownAfterClass` to prevent the data root restoration to fail
-rw-r--r--tests/lib/testcase.php14
1 files changed, 12 insertions, 2 deletions
diff --git a/tests/lib/testcase.php b/tests/lib/testcase.php
index 1ee0c85b98a..93b354863a9 100644
--- a/tests/lib/testcase.php
+++ b/tests/lib/testcase.php
@@ -33,7 +33,8 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
private $commandBus;
/** @var IDBConnection */
- static private $realDatabase;
+ static protected $realDatabase = null;
+ static private $wasDatabaseAllowed = false;
protected function getTestTraits() {
$traits = [];
@@ -52,7 +53,9 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
protected function setUp() {
// detect database access
+ self::$wasDatabaseAllowed = true;
if (!$this->IsDatabaseAccessAllowed()) {
+ self::$wasDatabaseAllowed = false;
if (is_null(self::$realDatabase)) {
self::$realDatabase = \OC::$server->getDatabaseConnection();
}
@@ -155,8 +158,15 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
}
public static function tearDownAfterClass() {
+ if (!self::$wasDatabaseAllowed && self::$realDatabase !== null) {
+ // in case an error is thrown in a test, PHPUnit jumps straight to tearDownAfterClass,
+ // so we need the database again
+ \OC::$server->registerService('DatabaseConnection', function () {
+ return self::$realDatabase;
+ });
+ }
$dataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data-autotest');
- if (\OC::$server->getDatabaseConnection()) {
+ if (self::$wasDatabaseAllowed && \OC::$server->getDatabaseConnection()) {
$queryBuilder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
self::tearDownAfterClassCleanShares($queryBuilder);