Merge pull request #12328 from owncloud/remove-testcleanuplistener
Remove testcleanuplistener
This commit is contained in:
commit
2cc3edb10d
|
@ -23,21 +23,127 @@
|
||||||
namespace Test;
|
namespace Test;
|
||||||
|
|
||||||
abstract class TestCase extends \PHPUnit_Framework_TestCase {
|
abstract class TestCase extends \PHPUnit_Framework_TestCase {
|
||||||
|
/**
|
||||||
|
* Returns a unique identifier as uniqid() is not reliable sometimes
|
||||||
|
*
|
||||||
|
* @param string $prefix
|
||||||
|
* @param int $length
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
protected function getUniqueID($prefix = '', $length = 13) {
|
protected function getUniqueID($prefix = '', $length = 13) {
|
||||||
// Do not use dots and slashes as we use the value for file names
|
|
||||||
return $prefix . \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(
|
return $prefix . \OC::$server->getSecureRandom()->getLowStrengthGenerator()->generate(
|
||||||
$length,
|
$length,
|
||||||
|
// Do not use dots and slashes as we use the value for file names
|
||||||
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function tearDownAfterClass() {
|
public static function tearDownAfterClass() {
|
||||||
if (\OC_Util::runningOnWindows()) {
|
$dataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data-autotest');
|
||||||
$rootDirectory = \OC::$server->getConfig()->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data-autotest');
|
|
||||||
$mapper = new \OC\Files\Mapper($rootDirectory);
|
self::tearDownAfterClassCleanFileMapper($dataDir);
|
||||||
$mapper->removePath($rootDirectory, true, true);
|
self::tearDownAfterClassCleanStorages();
|
||||||
}
|
self::tearDownAfterClassCleanFileCache();
|
||||||
|
self::tearDownAfterClassCleanStrayDataFiles($dataDir);
|
||||||
|
self::tearDownAfterClassCleanStrayHooks();
|
||||||
|
self::tearDownAfterClassCleanProxies();
|
||||||
|
|
||||||
parent::tearDownAfterClass();
|
parent::tearDownAfterClass();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove all entries from the files map table
|
||||||
|
* @param string $dataDir
|
||||||
|
*/
|
||||||
|
static protected function tearDownAfterClassCleanFileMapper($dataDir) {
|
||||||
|
if (\OC_Util::runningOnWindows()) {
|
||||||
|
$mapper = new \OC\Files\Mapper($dataDir);
|
||||||
|
$mapper->removePath($dataDir, true, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove all entries from the storages table
|
||||||
|
* @throws \DatabaseException
|
||||||
|
*/
|
||||||
|
static protected function tearDownAfterClassCleanStorages() {
|
||||||
|
$sql = 'DELETE FROM `*PREFIX*storages`';
|
||||||
|
$query = \OC_DB::prepare($sql);
|
||||||
|
$query->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove all entries from the filecache table
|
||||||
|
* @throws \DatabaseException
|
||||||
|
*/
|
||||||
|
static protected function tearDownAfterClassCleanFileCache() {
|
||||||
|
$sql = 'DELETE FROM `*PREFIX*filecache`';
|
||||||
|
$query = \OC_DB::prepare($sql);
|
||||||
|
$query->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove all unused files from the data dir
|
||||||
|
*
|
||||||
|
* @param string $dataDir
|
||||||
|
*/
|
||||||
|
static protected function tearDownAfterClassCleanStrayDataFiles($dataDir) {
|
||||||
|
$knownEntries = array(
|
||||||
|
'owncloud.log' => true,
|
||||||
|
'owncloud.db' => true,
|
||||||
|
'.ocdata' => true,
|
||||||
|
'..' => true,
|
||||||
|
'.' => true,
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($dh = opendir($dataDir)) {
|
||||||
|
while (($file = readdir($dh)) !== false) {
|
||||||
|
if (!isset($knownEntries[$file])) {
|
||||||
|
self::tearDownAfterClassCleanStrayDataUnlinkDir($dataDir . '/' . $file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($dh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursive delete files and folders from a given directory
|
||||||
|
*
|
||||||
|
* @param string $dir
|
||||||
|
*/
|
||||||
|
static protected function tearDownAfterClassCleanStrayDataUnlinkDir($dir) {
|
||||||
|
if ($dh = @opendir($dir)) {
|
||||||
|
while (($file = readdir($dh)) !== false) {
|
||||||
|
if ($file === '..' || $file === '.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$path = $dir . '/' . $file;
|
||||||
|
if (is_dir($path)) {
|
||||||
|
self::tearDownAfterClassCleanStrayDataUnlinkDir($path);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
@unlink($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($dh);
|
||||||
|
}
|
||||||
|
@rmdir($dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up the list of hooks
|
||||||
|
*/
|
||||||
|
static protected function tearDownAfterClassCleanStrayHooks() {
|
||||||
|
\OC_Hook::clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up the list of file proxies
|
||||||
|
*
|
||||||
|
* Also reenables file proxies, in case a test disabled them
|
||||||
|
*/
|
||||||
|
static protected function tearDownAfterClassCleanProxies() {
|
||||||
|
\OC_FileProxy::$enabled = true;
|
||||||
|
\OC_FileProxy::clearProxies();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,11 +39,6 @@
|
||||||
</filter>
|
</filter>
|
||||||
<listeners>
|
<listeners>
|
||||||
<listener class="StartSessionListener" file="startsessionlistener.php" />
|
<listener class="StartSessionListener" file="startsessionlistener.php" />
|
||||||
<listener class="TestCleanupListener" file="testcleanuplistener.php">
|
|
||||||
<arguments>
|
|
||||||
<string>detail</string>
|
|
||||||
</arguments>
|
|
||||||
</listener>
|
|
||||||
</listeners>
|
</listeners>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
|
||||||
|
|
|
@ -1,176 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
|
|
||||||
* This file is licensed under the Affero General Public License version 3 or
|
|
||||||
* later.
|
|
||||||
* See the COPYING-README file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Detects tests that didn't clean up properly, show a warning, then clean up after them.
|
|
||||||
*/
|
|
||||||
class TestCleanupListener implements PHPUnit_Framework_TestListener {
|
|
||||||
private $verbosity;
|
|
||||||
|
|
||||||
public function __construct($verbosity = 'verbose') {
|
|
||||||
$this->verbosity = $verbosity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addError(PHPUnit_Framework_Test $test, Exception $e, $time) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function startTest(PHPUnit_Framework_Test $test) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function endTest(PHPUnit_Framework_Test $test, $time) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function startTestSuite(PHPUnit_Framework_TestSuite $suite) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public function endTestSuite(PHPUnit_Framework_TestSuite $suite) {
|
|
||||||
// don't clean up the test environment if a data provider finished
|
|
||||||
if (!($suite instanceof PHPUnit_Framework_TestSuite_DataProvider)) {
|
|
||||||
if ($this->cleanStorages() && $this->isShowSuiteWarning()) {
|
|
||||||
printf("TestSuite '%s': Did not clean up storages\n", $suite->getName());
|
|
||||||
}
|
|
||||||
if ($this->cleanFileCache() && $this->isShowSuiteWarning()) {
|
|
||||||
printf("TestSuite '%s': Did not clean up file cache\n", $suite->getName());
|
|
||||||
}
|
|
||||||
if ($this->cleanStrayDataFiles() && $this->isShowSuiteWarning()) {
|
|
||||||
printf("TestSuite '%s': Did not clean up data dir\n", $suite->getName());
|
|
||||||
}
|
|
||||||
if ($this->cleanStrayHooks() && $this->isShowSuiteWarning()) {
|
|
||||||
printf("TestSuite '%s': Did not clean up hooks\n", $suite->getName());
|
|
||||||
}
|
|
||||||
if ($this->cleanProxies() && $this->isShowSuiteWarning()) {
|
|
||||||
printf("TestSuite '%s': Did not clean up proxies\n", $suite->getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function isShowSuiteWarning() {
|
|
||||||
return $this->verbosity === 'suite' || $this->verbosity === 'detail';
|
|
||||||
}
|
|
||||||
|
|
||||||
private function isShowDetail() {
|
|
||||||
return $this->verbosity === 'detail';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $dir
|
|
||||||
*/
|
|
||||||
private function unlinkDir($dir) {
|
|
||||||
if ($dh = @opendir($dir)) {
|
|
||||||
while (($file = readdir($dh)) !== false) {
|
|
||||||
if ($file === '..' || $file === '.') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$path = $dir . '/' . $file;
|
|
||||||
if (is_dir($path)) {
|
|
||||||
$this->unlinkDir($path);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
@unlink($path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
closedir($dh);
|
|
||||||
}
|
|
||||||
@rmdir($dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function cleanStrayDataFiles() {
|
|
||||||
$knownEntries = array(
|
|
||||||
'owncloud.log' => true,
|
|
||||||
'owncloud.db' => true,
|
|
||||||
'.ocdata' => true,
|
|
||||||
'..' => true,
|
|
||||||
'.' => true
|
|
||||||
);
|
|
||||||
$datadir = \OC_Config::getValue('datadirectory', \OC::$SERVERROOT . '/data');
|
|
||||||
$entries = array();
|
|
||||||
if ($dh = opendir($datadir)) {
|
|
||||||
while (($file = readdir($dh)) !== false) {
|
|
||||||
if (!isset($knownEntries[$file])) {
|
|
||||||
$entries[] = $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
closedir($dh);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count($entries) > 0) {
|
|
||||||
foreach ($entries as $entry) {
|
|
||||||
$this->unlinkDir($datadir . '/' . $entry);
|
|
||||||
if ($this->isShowDetail()) {
|
|
||||||
printf("Stray datadir entry: %s\n", $entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function cleanStorages() {
|
|
||||||
$sql = 'DELETE FROM `*PREFIX*storages`';
|
|
||||||
$query = \OC_DB::prepare( $sql );
|
|
||||||
$result = $query->execute();
|
|
||||||
if ($result > 0) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function cleanFileCache() {
|
|
||||||
$sql = 'DELETE FROM `*PREFIX*filecache`';
|
|
||||||
$query = \OC_DB::prepare( $sql );
|
|
||||||
$result = $query->execute();
|
|
||||||
if ($result > 0) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function cleanStrayHooks() {
|
|
||||||
$hasHooks = false;
|
|
||||||
$hooks = OC_Hook::getHooks();
|
|
||||||
if (!$hooks || sizeof($hooks) === 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($hooks as $signalClass => $signals) {
|
|
||||||
if (sizeof($signals)) {
|
|
||||||
foreach ($signals as $signalName => $handlers ) {
|
|
||||||
if (sizeof($handlers) > 0) {
|
|
||||||
$hasHooks = true;
|
|
||||||
OC_Hook::clear($signalClass, $signalName);
|
|
||||||
if ($this->isShowDetail()) {
|
|
||||||
printf("Stray hook: \"%s\" \"%s\"\n", $signalClass, $signalName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $hasHooks;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function cleanProxies() {
|
|
||||||
$proxies = OC_FileProxy::getProxies();
|
|
||||||
OC_FileProxy::clearProxies();
|
|
||||||
// reenable in case some test failed to reenable them
|
|
||||||
OC_FileProxy::$enabled = true;
|
|
||||||
return count($proxies) > 0;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue