Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | #!/bin/bash |
2 | set -ex | |
3 | ||
4 | ## Setup a Drupal site with CiviCRM configured for unit-testing. | |
5 | ## If a site already exists, destroy and recreate it. | |
6 | ## Usage: mk-drupal-test-site <domain.name> <db_name> </path/to/drupal> </path/to/civi> | |
7 | ||
2367822f ML |
8 | ## SOURCE: |
9 | ## https://github.com/civicrm/civicrm-core/blob/master/tools/scripts/mk-drupal-test-site | |
10 | ||
6a488035 TO |
11 | ## Pre-requisites: |
12 | ## - MySQL admin credentials in ~/.my.cnf | |
13 | ## - Apache vhost with mod_rewrite, etc | |
14 | ## - DNS or /etc/hosts entries for "url" | |
15 | ## - Drupal source tree | |
16 | ## - CiviCRM source tree (outside the drupal root) | |
17 | ## - makepasswd | |
18 | ## - drush | |
19 | ## - (strongly recommended) filesystem with "acl" support | |
20 | ||
2367822f ML |
21 | |
22 | function usage() { | |
23 | cat <<EOT | |
24 | Usage: mk-drupal-test-site SITE_URL DB_NAME DRUPAL_ROOT [CIVI_ROOT] | |
25 | Re/creates a Drupal-based CiviCRM site. | |
26 | ||
27 | * SITE_URL: URL of the site. Example: example.org | |
28 | * DB_NAME: MySQL database name. Example: civicrm_test | |
29 | * DRUPAL_ROOT: Root path of the Drupal website. Example: /var/www/ | |
30 | * CIVI_ROOT: Root path of the CiviCRM directory. Will be symlinked. | |
31 | You probably want to have a separate version somewhere to avoid | |
32 | cloning a new version of the code base for each CMS. | |
33 | The CiviCRM directory can either contain the main git repositories, | |
34 | or an equivalent of the tar.gz archive. | |
35 | Example: /srv/repositories/civicrm/ | |
36 | * SQL_DUMP (optional): instead of a standard blank install, import a | |
37 | specific .sql dump. You can specify two .sql files. | |
38 | ||
39 | EOT | |
40 | ||
41 | exit 99; | |
42 | } | |
43 | ||
44 | [ "$1" = "--help" ] && usage | |
45 | [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] && usage | |
46 | [ ! -d "$3" ] && echo "ERROR: $3: Drupal root directory not found." && usage | |
47 | [ ! -d "$4" ] && echo "ERROR: $4: CiviCRM root directory not found." && usage | |
48 | ||
6a488035 TO |
49 | SITE_URL="$1" |
50 | DB_NAME="$2" | |
51 | DB_USER="$DB_NAME" | |
52 | DB_PASS=$(makepasswd --chars=12) | |
53 | DB_HOST=localhost | |
54 | DRUPAL_ROOT="$3" | |
55 | CIVI_ROOT="$4" | |
56 | FACL_USERS="www-data $(whoami)" | |
2367822f ML |
57 | SQL_DUMP="$5" |
58 | SQL_DUMP2="$6" | |
6a488035 TO |
59 | |
60 | SITE_KEY=$(makepasswd --chars=16) | |
61 | ADMIN_USER="admin" | |
62 | ADMIN_PASS=$(makepasswd --chars=12) | |
63 | ||
2367822f | 64 | # Check if the CiviCRM directory looks OK |
6a488035 TO |
65 | if [ -z "$CIVI_ROOT" -o ! -d "$CIVI_ROOT/bin" ]; then |
66 | echo "Failed to locate civi root: $CIVI_ROOT" | |
67 | exit 1 | |
68 | fi | |
69 | ||
2367822f ML |
70 | if [ -n "$SQL_DUMP" ]; then |
71 | if [ ! -f "$SQL_DUMP" ]; then | |
72 | echo "$SQL_DUMP: Could not find the .sql file. Try using an absolute path to the file." | |
73 | exit 3; | |
74 | fi | |
6a488035 TO |
75 | fi |
76 | ||
77 | ## Create database | |
78 | echo "DROP DATABASE IF EXISTS $DB_NAME" | mysql | |
79 | echo "CREATE DATABASE $DB_NAME" | mysql | |
80 | echo "GRANT ALL ON ${DB_NAME}.* TO '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}'" | mysql | |
81 | echo "GRANT SUPER ON *.* TO '${DB_USER}'@'localhost'" | mysql | |
82 | ||
83 | ## Create Drupal site | |
84 | pushd "$DRUPAL_ROOT" | |
85 | if [ -d "sites/$SITE_URL" ]; then | |
86 | chmod u+w "sites/$SITE_URL" | |
87 | rm -rf "sites/$SITE_URL" | |
88 | fi | |
4aaa5419 ML |
89 | |
90 | # NB: Avoid sending e-mails for the site installation | |
91 | # On hosts without sendmail (ex: demo sites), this causes the installation to fail. | |
cc6b2f39 | 92 | drush site-install -y \ |
6a488035 TO |
93 | --db-url="mysql://${DB_USER}:${DB_PASS}@${DB_HOST}/${DB_NAME}" \ |
94 | --account-name="$ADMIN_USER" \ | |
95 | --account-pass="$ADMIN_PASS" \ | |
96 | --sites-subdir="$SITE_URL" | |
97 | chmod u+w "sites/$SITE_URL" | |
98 | ||
99 | ## Allow shell and WWW users to both manipulate "files" directory | |
100 | if which setfacl; then | |
101 | for FACL_USER in $FACL_USERS ; do | |
102 | find "$DRUPAL_ROOT/sites/${SITE_URL}/files" -type d | xargs setfacl -m u:${FACL_USER}:rwx -m d:u:${FACL_USER}:rwx | |
103 | done | |
104 | fi | |
105 | ||
106 | ## Create Drupal-CiviCRM dirs and config | |
107 | for SUBDIR in modules files files/civicrm files/civicrm/templates_c ; do | |
108 | if [ ! -d "sites/${SITE_URL}/${SUBDIR}" ]; then | |
109 | mkdir "sites/${SITE_URL}/${SUBDIR}" | |
110 | fi | |
111 | done | |
112 | ||
e690678a | 113 | ln -s "$CIVI_ROOT" "sites/$SITE_URL/modules/civicrm" |
6a488035 TO |
114 | |
115 | cat "$CIVI_ROOT/templates/CRM/common/civicrm.settings.php.tpl" \ | |
116 | | sed "s;%%baseURL%%;http://${SITE_URL};" \ | |
117 | | sed "s;%%cms%%;Drupal;" \ | |
118 | | sed "s;%%CMSdbHost%%;${DB_HOST};" \ | |
119 | | sed "s;%%CMSdbName%%;${DB_NAME};" \ | |
120 | | sed "s;%%CMSdbPass%%;${DB_PASS};" \ | |
121 | | sed "s;%%CMSdbUser%%;${DB_USER};" \ | |
122 | | sed "s;%%crmRoot%%;${DRUPAL_ROOT}/sites/${SITE_URL}/modules/civicrm;" \ | |
123 | | sed "s;%%dbHost%%;${DB_HOST};" \ | |
124 | | sed "s;%%dbName%%;${DB_NAME};" \ | |
125 | | sed "s;%%dbPass%%;${DB_PASS};" \ | |
126 | | sed "s;%%dbUser%%;${DB_USER};" \ | |
127 | | sed "s;%%siteKey%%;${SITE_KEY};" \ | |
128 | | sed "s;%%templateCompileDir%%;${DRUPAL_ROOT}/sites/${SITE_URL}/files/civicrm/templates_c;" \ | |
129 | > "sites/$SITE_URL/civicrm.settings.php" | |
130 | ||
dfd90a3a TO |
131 | echo >> "sites/$SITE_URL/civicrm.settings.php" |
132 | echo "define('CIVICRM_MAIL_LOG', '/dev/null');" >> "sites/$SITE_URL/civicrm.settings.php" | |
6a488035 TO |
133 | popd |
134 | ||
135 | ## Create CiviCRM config | |
136 | cat > "$CIVI_ROOT/bin/setup.conf" << EOF | |
137 | SVNROOT="$CIVI_ROOT" | |
138 | SCHEMA=schema/Schema.xml | |
139 | DBNAME="$DB_NAME" | |
140 | DBUSER="$DB_USER" | |
141 | DBPASS="$DB_PASS" | |
142 | DBARGS="" | |
143 | PHP5PATH= | |
549e9267 | 144 | DBLOAD="$DBLOAD" |
6a488035 TO |
145 | # DBADD= |
146 | EOF | |
147 | ||
148 | cat > "$CIVI_ROOT/tests/phpunit/CiviTest/civicrm.settings.local.php" << EOF | |
149 | <?php | |
150 | define('CIVICRM_DSN', "mysql://${DB_USER}:${DB_PASS}@${DB_HOST}/${DB_NAME}"); | |
151 | define('CIVICRM_TEMPLATE_COMPILEDIR', '${DRUPAL_ROOT}/sites/${SITE_URL}/files/civicrm/templates_c'); | |
152 | define('DONT_DOCUMENT_TEST_CONFIG', TRUE); | |
153 | EOF | |
154 | ||
155 | cat > "$CIVI_ROOT/tests/phpunit/CiviTest/CiviSeleniumSettings.php" << EOF | |
156 | <?php | |
157 | class CiviSeleniumSettings { | |
158 | var \$publicSandbox = false; | |
159 | var \$browser = '*firefox'; | |
160 | var \$sandboxURL = 'http://${SITE_URL}'; | |
161 | var \$sandboxPATH = ''; | |
162 | var \$username = 'demo'; | |
163 | var \$password = 'demo'; | |
164 | var \$adminUsername = '${ADMIN_USER}'; | |
165 | var \$adminPassword = '${ADMIN_PASS}'; | |
dc13c338 TO |
166 | var \$adminApiKey = 'apikey${ADMIN_PASS}'; |
167 | var \$siteKey = '${SITE_KEY}'; | |
6a488035 TO |
168 | var \$UFemail = 'noreply@civicrm.org'; |
169 | function __construct() { | |
170 | \$this->fullSandboxPath = \$this->sandboxURL . \$this->sandboxPATH; | |
171 | } | |
172 | } | |
173 | ||
174 | EOF | |
175 | ||
176 | pushd "$CIVI_ROOT" | |
177 | ./bin/setup.sh | |
178 | popd | |
179 | ||
2367822f ML |
180 | if [ -n "$SQL_DUMP" ]; then |
181 | echo "Importing SQL dump: $SQL_DUMP" | |
182 | mysql $DB_NAME < $SQL_DUMP | |
183 | echo "SQL import complete." | |
184 | ||
185 | if [ -n "$SQL_DUMP2" -a -f "$SQL_DUMP2" ]; then | |
186 | echo "Importing SQL dump: $SQL_DUMP2" | |
187 | mysql $DB_NAME < $SQL_DUMP2 | |
188 | echo "SQL import complete." | |
189 | fi | |
190 | else | |
191 | pushd "$DRUPAL_ROOT" | |
192 | drush -l "${SITE_URL}" -y pm-enable civicrm | |
193 | drush -l "${SITE_URL}" -y pm-enable civicrm_webtest | |
194 | drush -l "${SITE_URL}" -y user-create --password=demo --mail='demo@example.com' demo | |
195 | drush -l "${SITE_URL}" -y user-add-role civicrm_webtest_user demo | |
196 | popd | |
197 | fi | |
198 |