Merge pull request #4806 from civicrm/4.5
[civicrm-core.git] / tools / scripts / release-testing / upgrader.sh.txt
CommitLineData
6a488035
TO
1#!/bin/bash
2
3: <<COMMENTBLOCK
4
5Release testing script is located in *tools* repository, in scripts/release-testing directory.
6
7h2. Utility script
8
9Script is located in scripts/release-testing/upgrader.sh It's written in bash and offers following functions:
10
11* *upgrader.sh cleanup-files* - removes CiviCRM installation files
12* *upgrader.sh cleanup-dbs* - makes sure that CiviCRM database is empty and Drupal database is in pristine state
13* *upgrader.sh install /path/to/tarball* - installs CiviCRM files from provided tarball and runs install webtest
14* *upgrader.sh upgrade /path/to/tarball* - puts CiviCRM files from provided tarball in place of currently existing install and runs upgrade webtest
15* *upgrader.sh dumpschema-cividb /path/to/dumpfile.mysql* - dumps CiviCRM schema into given file
16* *upgrader.sh run-checks* - verifies if all the params are set correctly
17* *upgrader.sh run-tests* - TBD
18
19Before you can use the script, you need to set following variables inside:
20* CIVIDBNAME - name of CiviCRM database
21* CIVIDBUSER - username to access CiviCRM database
22* CIVIDBPASS - password to access CiviCRM database
23* DRUPALDBNAME - name of Drupal database
24* DRUPALDBUSER - username to access Drupal database
25* DRUPALDBPASS - password to access Drupal database
26* DRUPALPRISTINEDBFILE - path to mysql dump of pristine Drupal database
27* DRUPALDIR - a path to Drupal root directory
28* MODULESDIR - a path to Drupal modules directory
29* CIVICRMDIR - a path where CiviCRM is expected to be
30* DRUPALURL - URL of Drupal installation used for upgrade testing
31* CIVICRMURL - URL of CiviCRM installation used for upgrade testing
32* PHPUNITSCRIPTDIR - path from which WebTests (using PHPunit) will be run
33* PHPUNITCOMMAND - name of the script used to run WebTests
34
35
36h2. Example release testing scenarios
37
38h3. Simple release tests
39
40Simple release test is located in scripts/release-testing/simpleupgradetest.sh
41
42{code}
43./upgrader.sh run-checks
44./upgrader.sh cleanup-dbs
45./upgrader.sh cleanup-files
46./upgrader.sh install 3.3.0-tarball
47./upgrader.sh upgrade 3.4.1-tarball
48{code}
49
50Step by step description:
51* good idea to run-checks at the beginning to make sure all the stuff is set up correctly
52* first two lines: cleans up databases for upgrade testing installation and removes CiviCRM files (in case they weren't cleaned up from previous runs) for upgrade testing installation
66cae705
EM
53* installs start version (3.3.0 in above case) -
54* upgrades 3.3.0 to 3.4.1
6a488035
TO
55
56
57h3. Upgraded database schema verification
58
59Upgraded database schema verification test is located in scripts/release-testing/simpleupgradetest.sh
60
61{code}
62./upgrader.sh run-checks
63./upgrader.sh cleanup-dbs
64./upgrader.sh cleanup-files
65
66./upgrader.sh install 3.4.1-tarball
67./upgrader.sh dumpschema-cividb 3.4.1-clean.mysql
68
69./upgrader.sh cleanup-dbs
70./upgrader.sh cleanup-files
71
72./upgrader.sh install 3.3.0-tarball
73./upgrader.sh upgrade 3.4.1-tarball
74./upgrader.sh dumpschema-cividb 3.4.1-upgraded.mysql
75
76diff 3.4.1-clean.mysql 3.4.1-upgraded.mysql
77{code}
78
79Step by step description:
80* good idea to run-checks at the beginning to make sure all the stuff is set up correctly
81* first two lines: cleans up databases for upgrade testing installation and removes CiviCRM files (in case they weren't cleaned up from previous runs) for upgrade testing installation
82* installs start version (3.4.1 in above case)
83* dumps database schema for clean 3.4.1 install
84* cleans up again
85* installs 3.3.0
86* upgrades 3.3.0 to 3.4.1
87* dumps database schema for upgraded 3.4.1 install
88* produces a diff between dumps to verify if core upgrade code takes all the necessary schema changes into consideration
89
90h2. Assembling other release testing scenario
91
92TBD
93
94COMMENTBLOCK
95
96############
97#
98# START: Configuration
99#
100############
101
102CIVIDBNAME=
103CIVIDBUSER=
104CIVIDBPASS=
105
106DRUPALDBNAME=
107DRUPALDBUSER=
108DRUPALDBPASS=
109DRUPALPRISTINEDBFILE=
110
111DRUPALDIR=
112MODULESDIR=$DRUPALDIR"/sites/all/modules"
113SETTINGSDIR=$DRUPALDIR"/sites/all"
114CIVICRMDIR=$MODULESDIR"/civicrm"
115DRUPALURL="http://url.url"
116CIVICRMURL=$DRUPALURL"/civicrm/dashboard"
117
118
119PHPUNITSCRIPTDIR=""
120PHPUNITCOMMAND="scripts/phpunit"
121
122############
123#
124# END: Configuration
125#
126# DO NOT EDIT BELOW THIS LINE
127#
128# START: Command line params verification
129#
130############
131
132PU_INSTALLTEST="WebTest_Release_InstallScript"
133PU_UPGRADETEST="WebTest_Release_UpgradeScript"
134PU_SUITE="WebTest_AllTests"
135
136echo
137
138USAGE="Usage: upgrader.sh ACTION [/path/to/file]"
139SELF=$(cd $(dirname $0); pwd -P)/$(basename $0)
140ACTION=$1
141FILENAME=$2
142
143if [ -z $ACTION ] ; then
144 echo $USAGE
145 exit 1
146fi
147
148if [ $ACTION == "install" ] && [ -z $FILENAME ] ; then
149 echo $USAGE
150 echo "(Tarball parameter required for install)"
151 exit 1
152fi
153
154if [ $ACTION == "upgrade" ] && [ -z $FILENAME ] ; then
155 echo $USAGE
156 echo "(Tarball parameter required for upgrade)"
157 exit 1
158fi
159
160if [ $ACTION == "dumpschema-cividb" ] && [ -z $FILENAME ] ; then
161 echo $USAGE
162 echo "(Filename parameter required for dumpschema-cividb)"
163 exit 1
164fi
165
166############
167#
168# END: Command line params verification
169#
170# START: Utility functions
171#
172############
173
174function upgecho {
175 echo "*** Upgrader (action: $ACTION): $1 "
176}
177
178function errecho {
179 upgecho "## ERROR: $1 "
180}
181
182function run-checks {
183
184 SILENT=$1
185 CHECKS=0
186
187 if [ $SILENT -eq 1 ] ; then
188 upgecho "Starting checks..."
189 fi
190
191 if [ $ACTION == "install" ] && [ ! -r $FILENAME ] ; then
192 errecho "Tarball: \""$FILENAME"\" doesn't exist or is not readable."
193 CHECKS=1
194 fi
66cae705 195
6a488035
TO
196 if [ $ACTION == "upgrade" ] && [ ! -r $FILENAME ] ; then
197 errecho "Tarball: \""$FILENAME"\" doesn't exist or is not readable."
198 CHECKS=1
199 fi
200
201 if [ ! -r $DRUPALPRISTINEDBFILE ] ; then
202 errecho "Drupal pristine database file: \""$DRUPALPRISTINEDBFILE"\" doesn't exist or is not readable."
203 CHECKS=1
204 fi
205
206 if [ ! -w $DRUPALDIR ] ; then
207 errecho "Drupal directory (value: $DRUPALDIR) does not exist or not writable."
208 CHECKS=1
209 fi
210
211 if [ ! -w $MODULESDIR ] ; then
212 errecho "Drupal modules directory (value: $MODULESDIR) does not exist or not writable."
213 CHECKS=1
214 fi
215
216
217 if [ -d $CIVICRMDIR ] ; then
218 upgecho "CiviCRM directory (value: $CIVICRMDIR) already exists, but maybe it's not a problem."
219 fi
220
221 if [ $CHECKS -eq 1 ] ; then
222 errecho "Quitting due to errors: see messages above."
223 exit 1
224 fi
225
226
227
228 if [ $SILENT -eq 1 ] ; then
229
230 upgecho "Action: $ACTION"
231 upgecho "Tarball: $FILENAME"
232 upgecho "Script path: $SELF"
233 upgecho "Drupal location: $DRUPALDIR"
234 upgecho "CiviCRM will be installed to: $CIVICRMDIR"
235 upgecho "CiviCRM Database credentials: u: $CIVIDBUSER, p: $CIVIDBPASS, n: $CIVIDBNAME"
236 upgecho "Drupal Database credentials: u: $DRUPALDBUSER, p: $DRUPALDBPASS, n: $DRUPALDBNAME"
237
238 upgecho "Done with checks, everything seems fine."
239
240 fi
241
242}
243
244############
245#
246# END: Utility functions
247#
248# START: Webtest related functions
249#
250############
251
252function run-upgrade-scenario {
253 upgecho "Running upgrade scenario tests."
66cae705 254 echo "*** Take it away, Sebastian! "
6a488035
TO
255 echo
256 cd $PHPUNITSCRIPTDIR
257 $PHPUNITCOMMAND $PU_UPGRADETEST
258 echo
259}
260
261function run-install-scenario {
262 upgecho "Running install scenario tests."
66cae705 263 echo "*** Take it away, Sebastian! "
6a488035
TO
264 echo
265 cd $PHPUNITSCRIPTDIR
266 $PHPUNITCOMMAND $PU_INSTALLTEST
66cae705 267 echo
6a488035
TO
268}
269
270function run-tests {
271 upgecho "Running post upgrade tests."
66cae705 272 echo "*** Take it away, Sebastian! "
6a488035
TO
273 echo
274 cd $PHPUNITSCRIPTDIR
275 $PHPUNITCOMMAND $PU_SUITE
276 echo
277}
278
279############
280#
281# END: Webtest related functions
282#
283# START: Core functionality
284#
285############
286
287function remove-files {
288 upgecho "Cleaning up files. ($CIVICRMDIR is gone!)"
289 rm -rf $CIVICRMDIR
290}
291
292function remove-settings {
66cae705 293 upgecho "Removing civicrm.settings.php. ($SETTINGSDIR/civicrm.settings.php is gone!)"
6a488035
TO
294 rm -rf $SETTINGSDIR"/civicrm.settings.php"
295}
296
297function cleanup-cividb {
298 upgecho "Cleaning up CiviCRM db (dropped and created)."
299 mysqladmin -f -u $CIVIDBUSER -p$CIVIDBPASS drop $CIVIDBNAME >> /dev/null 2>&1
300 mysqladmin -f -u $CIVIDBUSER -p$CIVIDBPASS create $CIVIDBNAME >> /dev/null 2>&1
301}
302
303function cleanup-drupdb {
304 upgecho "Cleaning up Drupal db (pristine copy loaded)."
305 mysqladmin -f -u $DRUPALDBUSER -p$DRUPALDBPASS drop $DRUPALDBNAME >> /dev/null 2>&1
306 mysqladmin -f -u $DRUPALDBUSER -p$DRUPALDBPASS create $DRUPALDBNAME >> /dev/null 2>&1
307 mysql -u $DRUPALDBUSER -p$DRUPALDBPASS $DRUPALDBNAME < $DRUPALPRISTINEDBFILE
308}
309
310function dump-schema {
311 mysqldump --no-data -u $CIVIDBUSER -p$CIVIDBPASS $CIVIDBNAME > $1
312}
313
314function install-files {
315 upgecho "Installing files from $FILENAME."
316 cd $MODULESDIR
317 tar xzvf $1 >> /dev/null 2>&1
318}
319
320############
321#
322# END: Core functionality
323#
324# START: Action hub
325#
326############
327
328case $ACTION in
329
330 run-checks)
331 run-checks 1
332 ;;
333
334 cleanup-files)
335 run-checks 0
336 remove-files
337 remove-settings
338 ;;
339
340 cleanup-dbs)
341 run-checks 0
342 cleanup-drupdb
343 cleanup-cividb
344 ;;
345
346 install)
347 run-checks 0
348 install-files $FILENAME
349 run-install-scenario
350 ;;
351
352 upgrade)
353 run-checks 0
354 remove-files
355 install-files $FILENAME
356 run-upgrade-scenario
357 ;;
358
359 dumpschema-cividb)
66cae705 360 run-checks 0
6a488035
TO
361 dump-schema $FILENAME
362 ;;
363
364 tests)
66cae705 365 run-checks 0
6a488035
TO
366 run-tests
367 ;;
368esac
369
370############
371#
372# END: Action hub
373#
374############
375
376echo