public function performSetUp($setupEnvironmentOnly = false)
{
try {
if ($this->createConfig) {
Config::getInstance()->setTestEnvironment();
}
$this->dbName = $this->getDbName();
if ($this->persistFixtureData) {
$this->dropDatabaseInSetUp = false;
$this->dropDatabaseInTearDown = false;
$this->overwriteExisting = false;
$this->removeExistingSuperUser = false;
Config::getInstance()->database_tests['dbname'] = Config::getInstance()->database['dbname'] = $this->dbName;
$this->getTestEnvironment()->dbName = $this->dbName;
}
if ($this->dbName === false) {
// must be after test config is created
$this->dbName = Config::getInstance()->database['dbname'];
}
static::connectWithoutDatabase();
if ($this->dropDatabaseInSetUp || $this->resetPersistedFixture) {
$this->dropDatabase();
}
DbHelper::createDatabase($this->dbName);
DbHelper::disconnectDatabase();
// reconnect once we're sure the database exists
Config::getInstance()->database['dbname'] = $this->dbName;
Db::createDatabaseObject();
Db::get()->query("SET wait_timeout=28800;");
DbHelper::createTables();
\Piwik\Plugin\Manager::getInstance()->unloadPlugins();
} catch (Exception $e) {
static::fail("TEST INITIALIZATION FAILED: " . $e->getMessage() . "\n" . $e->getTraceAsString());
}
include "DataFiles/SearchEngines.php";
include "DataFiles/Socials.php";
include "DataFiles/Languages.php";
include "DataFiles/Countries.php";
include "DataFiles/Currencies.php";
include "DataFiles/LanguageToCountry.php";
include "DataFiles/Providers.php";
if (!$this->isFixtureSetUp()) {
DbHelper::truncateAllTables();
}
static::createAccessInstance();
// We need to be SU to create websites for tests
Piwik::setUserHasSuperUserAccess();
Cache::deleteTrackerCache();
static::loadAllPlugins($this->getTestEnvironment(), $this->testCaseClass, $this->extraPluginsToLoad);
self::updateDatabase();
self::installAndActivatePlugins();
$_GET = $_REQUEST = array();
$_SERVER['HTTP_REFERER'] = '';
// Make sure translations are loaded to check messages in English
if ($this->loadTranslations) {
Translate::reloadLanguage('en');
APILanguageManager::getInstance()->setLanguageForUser('superUserLogin', 'en');
}
FakeAccess::$superUserLogin = '******';
\Piwik\SettingsPiwik::$cachedKnownSegmentsToArchive = null;
\Piwik\CacheFile::$invalidateOpCacheBeforeRead = true;
if ($this->configureComponents) {
\Piwik\Plugins\PrivacyManager\IPAnonymizer::deactivate();
\Piwik\Plugins\PrivacyManager\DoNotTrackHeaderChecker::deactivate();
}
if ($this->createSuperUser) {
self::createSuperUser($this->removeExistingSuperUser);
}
if ($setupEnvironmentOnly) {
return;
}
$this->getTestEnvironment()->save();
$this->getTestEnvironment()->executeSetupTestEnvHook();
Piwik_TestingEnvironment::addSendMailHook();
if ($this->overwriteExisting || !$this->isFixtureSetUp()) {
$this->setUp();
$this->markFixtureSetUp();
$this->log("Database {$this->dbName} marked as successfully set up.");
} else {
$this->log("Using existing database {$this->dbName}.");
}
}