diff options
author | Vincent Petry <pvince81@owncloud.com> | 2015-12-21 18:08:08 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-12-21 18:14:29 +0100 |
commit | d7169ffdec2a744683b9fb613dd08d560ed9842f (patch) | |
tree | a7af0befac2cbd505d7ed5bd78e20e8393f5d432 | |
parent | 0b913f00c7e49c57d2e0068854b5d4c133b0cb36 (diff) | |
download | nextcloud-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.php | 14 |
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); |