Mercurial > hg > isophonics-drupal-site
diff core/modules/simpletest/simpletest.install @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | c2387f117808 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/simpletest/simpletest.install Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,193 @@ +<?php + +/** + * @file + * Install, update and uninstall functions for the simpletest module. + */ + +use Drupal\Component\Utility\Environment; +use PHPUnit\Framework\TestCase; + +/** + * Minimum value of PHP memory_limit for SimpleTest. + */ +const SIMPLETEST_MINIMUM_PHP_MEMORY_LIMIT = '128M'; + +/** + * Implements hook_requirements(). + */ +function simpletest_requirements($phase) { + $requirements = []; + + $has_phpunit = class_exists(TestCase::class); + $has_curl = function_exists('curl_init'); + $open_basedir = ini_get('open_basedir'); + + $requirements['phpunit'] = [ + 'title' => t('PHPUnit dependency'), + 'value' => $has_phpunit ? t('Found') : t('Not found'), + ]; + if (!$has_phpunit) { + $requirements['phpunit']['severity'] = REQUIREMENT_ERROR; + $requirements['phpunit']['description'] = t("The testing framework requires the PHPUnit package. Please run 'composer install --dev' to ensure it is present."); + } + + $requirements['curl'] = [ + 'title' => t('cURL'), + 'value' => $has_curl ? t('Enabled') : t('Not found'), + ]; + if (!$has_curl) { + $requirements['curl']['severity'] = REQUIREMENT_ERROR; + $requirements['curl']['description'] = t('The testing framework requires the <a href="https://secure.php.net/manual/en/curl.setup.php">PHP cURL library</a>. For more information, see the <a href="https://www.drupal.org/requirements/php/curl">online information on installing the PHP cURL extension</a>.'); + } + + // SimpleTest currently needs 2 cURL options which are incompatible with + // having PHP's open_basedir restriction set. + // See https://www.drupal.org/node/674304. + $requirements['php_open_basedir'] = [ + 'title' => t('PHP open_basedir restriction'), + 'value' => $open_basedir ? t('Enabled') : t('Disabled'), + ]; + if ($open_basedir) { + $requirements['php_open_basedir']['severity'] = REQUIREMENT_ERROR; + $requirements['php_open_basedir']['description'] = t('The testing framework requires the PHP <a href="http://php.net/manual/ini.core.php#ini.open-basedir">open_basedir</a> restriction to be disabled. Check your webserver configuration or contact your web host.'); + } + + // Check the current memory limit. If it is set too low, SimpleTest will fail + // to load all tests and throw a fatal error. + $memory_limit = ini_get('memory_limit'); + if (!Environment::checkMemoryLimit(SIMPLETEST_MINIMUM_PHP_MEMORY_LIMIT, $memory_limit)) { + $requirements['php_memory_limit']['severity'] = REQUIREMENT_WARNING; + $requirements['php_memory_limit']['description'] = t('The testing framework requires the PHP memory limit to be at least %memory_minimum_limit. The current value is %memory_limit. <a href=":url">Follow these steps to continue</a>.', ['%memory_limit' => $memory_limit, '%memory_minimum_limit' => SIMPLETEST_MINIMUM_PHP_MEMORY_LIMIT, ':url' => 'https://www.drupal.org/node/207036']); + } + + $site_directory = 'sites/simpletest'; + if (!drupal_verify_install_file(\Drupal::root() . '/' . $site_directory, FILE_EXIST | FILE_READABLE | FILE_WRITABLE | FILE_EXECUTABLE, 'dir')) { + $requirements['simpletest_site_directory'] = [ + 'title' => t('Simpletest site directory'), + 'value' => is_dir(\Drupal::root() . '/' . $site_directory) ? t('Not writable') : t('Missing'), + 'severity' => REQUIREMENT_ERROR, + 'description' => t('The testing framework requires the %sites-simpletest directory to exist and be writable in order to run tests.', [ + '%sites-simpletest' => $site_directory, + ]), + ]; + } + elseif (!file_save_htaccess(\Drupal::root() . '/' . $site_directory, FALSE)) { + $requirements['simpletest_site_directory'] = [ + 'title' => t('Simpletest site directory'), + 'value' => t('Not protected'), + 'severity' => REQUIREMENT_ERROR, + 'description' => t('The file %file does not exist and could not be created automatically, which poses a security risk. Ensure that the directory is writable.', [ + '%file' => $site_directory . '/.htaccess', + ]), + ]; + } + + return $requirements; +} + +/** + * Implements hook_schema(). + */ +function simpletest_schema() { + $schema['simpletest'] = [ + 'description' => 'Stores simpletest messages', + 'fields' => [ + 'message_id' => [ + 'type' => 'serial', + 'not null' => TRUE, + 'description' => 'Primary Key: Unique simpletest message ID.', + ], + 'test_id' => [ + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + 'description' => 'Test ID, messages belonging to the same ID are reported together', + ], + 'test_class' => [ + 'type' => 'varchar_ascii', + 'length' => 255, + 'not null' => TRUE, + 'default' => '', + 'description' => 'The name of the class that created this message.', + ], + 'status' => [ + 'type' => 'varchar', + 'length' => 9, + 'not null' => TRUE, + 'default' => '', + 'description' => 'Message status. Core understands pass, fail, exception.', + ], + 'message' => [ + 'type' => 'text', + 'not null' => TRUE, + 'description' => 'The message itself.', + ], + 'message_group' => [ + 'type' => 'varchar_ascii', + 'length' => 255, + 'not null' => TRUE, + 'default' => '', + 'description' => 'The message group this message belongs to. For example: warning, browser, user.', + ], + 'function' => [ + 'type' => 'varchar_ascii', + 'length' => 255, + 'not null' => TRUE, + 'default' => '', + 'description' => 'Name of the assertion function or method that created this message.', + ], + 'line' => [ + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + 'description' => 'Line number on which the function is called.', + ], + 'file' => [ + 'type' => 'varchar', + 'length' => 255, + 'not null' => TRUE, + 'default' => '', + 'description' => 'Name of the file where the function is called.', + ], + ], + 'primary key' => ['message_id'], + 'indexes' => [ + 'reporter' => ['test_class', 'message_id'], + ], + ]; + $schema['simpletest_test_id'] = [ + 'description' => 'Stores simpletest test IDs, used to auto-increment the test ID so that a fresh test ID is used.', + 'fields' => [ + 'test_id' => [ + 'type' => 'serial', + 'not null' => TRUE, + 'description' => 'Primary Key: Unique simpletest ID used to group test results together. Each time a set of tests + are run a new test ID is used.', + ], + 'last_prefix' => [ + 'type' => 'varchar', + 'length' => 60, + 'not null' => FALSE, + 'default' => '', + 'description' => 'The last database prefix used during testing.', + ], + ], + 'primary key' => ['test_id'], + ]; + return $schema; +} + +/** + * Implements hook_uninstall(). + */ +function simpletest_uninstall() { + // Do not clean the environment in case the Simpletest module is uninstalled + // in a (recursive) test for itself, since simpletest_clean_environment() + // would also delete the test site of the parent test process. + if (!drupal_valid_test_ua()) { + simpletest_clean_environment(); + } + // Delete verbose test output and any other testing framework files. + file_unmanaged_delete_recursive('public://simpletest'); +}