Skip to content
Extraits de code Groupes Projets
TestingEnvironment.php 5,71 ko
Newer Older
  • Learn to ignore specific revisions
  • /**
     * Piwik - free/libre analytics platform
     *
     * @link http://piwik.org
     * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
     */
    
    namespace Piwik\Tests\Framework;
    
    use Piwik\Plugin\Manager as PluginManager;
    use Exception;
    
    use Piwik\Container\StaticContainer;
    
    use Piwik\Tests\Framework\TestingEnvironment\MakeGlobalSettingsWithFile;
    use Piwik\Piwik;
    use Piwik\Application\Environment;
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
    class Piwik_MockAccess
    {
        private $access;
    
        public function __construct($access)
        {
            $this->access = $access;
    
    Benaka Moorthi's avatar
    Benaka Moorthi a validé
        }
    
        public function __call($name, $arguments)
        {
            return call_user_func_array(array($this->access, $name), $arguments);
        }
    
        public function reloadAccess($auth = null)
        {
            return true;
        }
    
        public function getLogin()
        {
            return 'superUserLogin';
        }
    }
    
    
        private $behaviorOverrideProperties = array();
    
        public function __construct()
        {
            $overridePath = PIWIK_INCLUDE_PATH . '/tmp/testingPathOverride.json';
            if (file_exists($overridePath)) {
                $this->behaviorOverrideProperties = json_decode(file_get_contents($overridePath), true);
            }
        }
    
        public function __get($key)
        {
            return isset($this->behaviorOverrideProperties[$key]) ? $this->behaviorOverrideProperties[$key] : null;
        }
    
        public function __set($key, $value)
        {
            $this->behaviorOverrideProperties[$key] = $value;
        }
    
    
        public function __isset($name)
        {
            return isset($this->behaviorOverrideProperties[$name]);
        }
    
    
    diosmosis's avatar
    diosmosis a validé
            @mkdir(PIWIK_INCLUDE_PATH . '/tmp');
    
    
            $overridePath = PIWIK_INCLUDE_PATH . '/tmp/testingPathOverride.json';
            file_put_contents($overridePath, json_encode($this->behaviorOverrideProperties));
        }
    
    
    diosmosis's avatar
    diosmosis a validé
        public function delete()
        {
            $this->behaviorOverrideProperties = array();
            $this->save();
        }
    
    
    diosmosis's avatar
    diosmosis a validé
            try {
    
                if (isset($_SERVER['QUERY_STRING'])
                    && !$this->dontUseTestConfig
                ) {
    
                    @\Piwik\Log::debug("Test Environment Variables for (%s):\n%s", $_SERVER['QUERY_STRING'], print_r($this->behaviorOverrideProperties, true));
    
    diosmosis's avatar
    diosmosis a validé
                }
            } catch (Exception $ex) {
                // ignore
    
    diosmosis's avatar
    diosmosis a validé
            }
    
        public function getCoreAndSupportedPlugins()
        {
    
            $settings = new \Piwik\Application\Kernel\GlobalSettingsProvider();
    
            $pluginManager = new PluginManager(new \Piwik\Application\Kernel\PluginList($settings));
    
    
            $disabledPlugins = $pluginManager->getCorePluginsDisabledByDefault();
    
    diosmosis's avatar
    diosmosis a validé
            $disabledPlugins[] = 'LoginHttpAuth';
            $disabledPlugins[] = 'ExampleVisualization';
    
    
    diosmosis's avatar
    diosmosis a validé
            $disabledPlugins = array_diff($disabledPlugins, array(
                'DBStats', 'ExampleUI', 'ExampleCommand', 'ExampleSettingsPlugin'
            ));
    
    
            $plugins = array_filter($pluginManager->readPluginsDirectory(), function ($pluginName) use ($disabledPlugins, $pluginManager) {
    
    diosmosis's avatar
    diosmosis a validé
                if (in_array($pluginName, $disabledPlugins)) {
    
    diosmosis's avatar
    diosmosis a validé
                    return false;
                }
    
    
                return $pluginManager->isPluginBundledWithCore($pluginName)
    
                || $pluginManager->isPluginOfficialAndNotBundledWithCore($pluginName);
    
        public static function addHooks($globalObservers = array())
    
            $testingEnvironment = new TestingEnvironment();
    
    diosmosis's avatar
    diosmosis a validé
            if ($testingEnvironment->queryParamOverride) {
                foreach ($testingEnvironment->queryParamOverride as $key => $value) {
                    $_GET[$key] = $value;
                }
            }
    
    
            if ($testingEnvironment->globalsOverride) {
                foreach ($testingEnvironment->globalsOverride as $key => $value) {
                    $GLOBALS[$key] = $value;
                }
            }
    
    
            if ($testingEnvironment->hostOverride) {
                \Piwik\Url::setHost($testingEnvironment->hostOverride);
            }
    
    
            if ($testingEnvironment->useXhprof) {
                \Piwik\Profiler::setupProfilerXHProf($mainRun = false, $setupDuringTracking = true);
            }
    
    
            // Apply DI config from the fixture
    
            if ($testingEnvironment->fixtureClass) {
                $fixtureClass = $testingEnvironment->fixtureClass;
                if (class_exists($fixtureClass)) {
                    /** @var Fixture $fixture */
                    $fixture = new $fixtureClass;
                    $diConfig = $fixture->provideContainerConfig();
                }
            }
    
    
            if ($testingEnvironment->testCaseClass) {
                $testCaseClass = $testingEnvironment->testCaseClass;
                if (class_exists($testCaseClass)) {
                    $testCase = new $testCaseClass();
    
    
                    if (method_exists($testCase, 'provideContainerConfigBeforeClass')) {
                        $diConfig = array_merge($diConfig, $testCaseClass::provideContainerConfigBeforeClass());
                    }
    
    
                    if (method_exists($testCase, 'provideContainerConfig')) {
                        $diConfig = array_merge($diConfig, $testCase->provideContainerConfig());
    
            \Piwik\Cache\Backend\File::$invalidateOpCacheBeforeRead = true;
    
            Environment::addEnvironmentManipulator(new MakeGlobalSettingsWithFile($testingEnvironment));
    
    
            $diConfig['observers.global'] = \DI\add($globalObservers);
    
    
            StaticContainer::addDefinitions($diConfig);
    
        }
    
        /**
         * for plugins that need to inject special testing logic
         */
        public function executeSetupTestEnvHook()
        {
            Piwik::postEvent("TestingEnvironment.addHooks", array($this), $pending = true);