1#!/bin/ksh
2#########################################################################
3
4 #*************************************************************************
5 #
6# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7#
8# Copyright 2000, 2010 Oracle and/or its affiliates.
9#
10# OpenOffice.org - a multi-platform office productivity suite
11#
12# This file is part of OpenOffice.org.
13#
14# OpenOffice.org is free software: you can redistribute it and/or modify
15# it under the terms of the GNU Lesser General Public License version 3
16# only, as published by the Free Software Foundation.
17#
18# OpenOffice.org is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21# GNU Lesser General Public License version 3 for more details
22# (a copy is included in the LICENSE file that accompanied this code).
23#
24# You should have received a copy of the GNU Lesser General Public License
25# version 3 along with OpenOffice.org.  If not, see
26# <http://www.openoffice.org/license.html>
27# for a copy of the LGPLv3 License.
28#
29 #*************************************************************************
30
31#set -x
32umask 0
33
34integer TOTAL_PASS=0
35integer TOTAL_FAIL=0
36integer TOTAL_RUN=0
37integer MAX_RETRIES=5
38typeset RUNNAME=`date +%Y%m%d%H%M%S`
39typeset PRINTDATE=`date`
40typeset PDB_INFILE_DIR
41typeset PDB_OUTFILE_DIR
42typeset XML_OUTFILE_DIR
43typeset REPORT
44typeset RESDIR
45typeset LOGFILE
46typeset COMPLOG
47typeset TEST_COMMENTS
48typeset BGCOLOR
49typeset ODD_BGCOLOR='#BBBBBB'
50typeset EVEN_BGCOLOR='#DCDCDC'
51typeset PASS_COLOR='#00ff00'
52typeset FAIL_COLOR='#ff4040'
53
54typeset ENVFILE=""
55# The following variables should be set in the env file
56typeset MASTERLIST=""
57typeset TESTCASEDIR=""
58typeset RESULTSBASE=""
59typeset XMERGE_JAR=""
60typeset APORTIS_JAR=""
61typeset WORDSMITH_JAR=""
62typeset MINICALC_JAR=""
63typeset PERL5LIB=""
64typeset POSE_EXE=""
65typeset POSE_PRC=""
66typeset TEST_DRIVER_PL=""
67typeset COMPARATOR_PL=""
68typeset COMPLIST=""
69typeset XML_INFILE_DIR=""
70typeset PDB_BASELINE_DIR=""
71typeset XML_BASELINE_DIR=""
72typeset EM_SCRIPT_HOME=""
73typeset QAWRAPPER_SCRIPT_HOME=""
74typeset EM_ROM_FILE=""
75typeset EM_SESSION_FILE=""
76typeset QA_LIB_HOME=""
77typeset QA_COMPARATOR_HOME=""
78typeset CLASSES_DIR=""
79
80
81
82################################################################################
83Usage() {
84	echo "Usage: run-convtest -env <ENVFILE> [-name RUNNAME]"
85	exit 1
86}
87
88
89################################################################################
90StartReportFile() {
91	typeset line=`date`
92
93	ReportLine "<HTML>"
94	ReportLine "<HEAD>"
95	ReportLine "<TITLE>XMerge Converters Test Results - ${RUNNAME}</TITLE>"
96	ReportLine "</HEAD>"
97	ReportLine "<BODY BGCOLOR=#ffffff>"
98	ReportLine "<H1 align=center>XMerge Converters Test Results - ${RUNNAME}</H1>"
99	ReportLine "<P>"
100	ReportLine "Test run on: ${PRINTDATE}"
101	ReportLine "<P>"
102	ReportLine "<CENTER>"
103	ReportLine "<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=2>"
104	ReportLine "<TR BGCOLOR='#9999CC'>"
105	ReportLine "<TH>Test Name</TH>"
106	ReportLine "<TH>Test File</TH>"
107	ReportLine "<TH>.ext</TH>"
108	ReportLine "<TH>Result</TH>"
109	ReportLine "<TH>Comments</TH>"
110	ReportLine "</TR>"
111}
112
113
114################################################################################
115EndReportFile() {
116	# remove full path from LOGFILE (link will be to current dir)
117	typeset loglink=${LOGFILE##*/}
118
119	ReportLine "<P>"
120	ReportLine "<CENTER>"
121	ReportLine "<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=2>"
122	ReportLine "<TR>"
123	ReportLine "<TH>Total Tests PASSED</TH>"
124	ReportLine "<TH>${TOTAL_PASS}</TH>"
125	ReportLine "</TR>"
126	ReportLine "<TR>"
127	ReportLine "<TH>Total Tests FAILED</TH>"
128	ReportLine "<TH>${TOTAL_FAIL}</TH>"
129	ReportLine "</TR>"
130	ReportLine "<TR>"
131	ReportLine "<TH>Total Tests Run</TH>"
132	ReportLine "<TH>${TOTAL_RUN}</TH>"
133	ReportLine "</TR>"
134	ReportLine "</TABLE>"
135	ReportLine "</CENTER>"
136	ReportLine "<P>"
137	ReportLine "<A HREF=${loglink}>Full logfile for test run</A>"
138	ReportLine "<P>"
139	ReportLine "<CENTER>"
140	ReportLine "</BODY>"
141	ReportLine "</HTML>"
142}
143
144################################################################################
145ReportLine() {
146	echo $1 >> $REPORT
147}
148
149################################################################################
150LogLine() {
151	echo $1 >> $LOGFILE
152}
153
154################################################################################
155ReportTestComments() {
156	if [[ $TEST_COMMENTS == "" ]] ; then
157		TEST_COMMENTS="&nbsp;"
158	fi
159
160	ReportLine "<TD>${TEST_COMMENTS}</TD>"
161}
162
163################################################################################
164GetParams() {
165	integer argc=$#
166	integer i=0
167
168	if [[ $argc -lt 1 ]] ; then
169		Usage
170	fi
171
172	while (($i < $argc)) ; do
173		arg=$1
174		shift
175    		i=i+1
176
177		if [[ $arg == '-name' ]] ; then
178			if (( $i < $argc )) ; then
179				RUNNAME=$1
180				echo "RUNNAME=[$RUNNAME]"
181				shift
182				i=i+1
183			else
184				Usage
185			fi
186		elif [[ $arg == '-env' ]] ; then
187			if (( $i < $argc )) ; then
188				ENVFILE=$1
189				shift
190				i=i+1
191			else
192				Usage
193			fi
194		else
195			Usage
196		fi
197	done
198
199	if [[ $ENVFILE == "" ]] ; then
200		Usage
201	fi
202}
203
204
205################################################################################
206ReadEnvFile() {
207	. $ENVFILE
208
209
210	echo ""
211	echo "The following values have been set from $ENVFILE:"
212	echo "MASTERLIST=$MASTERLIST"
213	echo "TESTCASEDIR=$TESTCASEDIR"
214	echo "XMERGE_JAR=$XMERGE_JAR"
215	echo "APORTIS_JAR=$APORTIS_JAR"
216	echo "WORDSMITH_JAR=$WORDSMITH_JAR"
217	echo "MINICALC_JAR=$MINICALC_JAR"
218	echo "RESULTSBASE=$RESULTSBASE"
219	echo "PERL5LIB=$PERL5LIB"
220	echo "POSE_EXE=$POSE_EXE"
221	echo "POSE_PRC=$POSE_PRC"
222	echo "TEST_DRIVER_PL=$TEST_DRIVER_PL"
223	echo "COMPARATOR_PL=$COMPARATOR_PL"
224	echo "XML_INFILE_DIR=$XML_INFILE_DIR"
225	echo "PDB_BASELINE_DIR=$PDB_BASELINE_DIR"
226	echo "XML_BASELINE_DIR=$XML_BASELINE_DIR"
227	echo "EM_SCRIPT_HOME=$EM_SCRIPT_HOME"
228	echo "QAWRAPPER_SCRIPT_HOME=$QAWRAPPER_SCRIPT_HOME"
229	echo "EM_ROM_FILE=$EM_ROM_FILE"
230	echo "EM_SESSION_FILE=$EM_SESSION_FILE"
231	echo "QA_LIB_HOME=$QA_LIB_HOME"
232	echo "QA_COMPARATOR_HOME=$QA_COMPARATOR_HOME"
233	echo "CLASSES_DIR=$CLASSES_DIR"
234	echo "COMPLIST=$COMPLIST"
235}
236
237################################################################################
238POSESetup() {
239	export PERL5LIB
240	export EM_SCRIPT_HOME
241	export QAWRAPPER_SCRIPT_HOME
242	export EM_ROM_FILE
243	export EM_SESSION_FILE
244	export QA_LIB_HOME
245	export QA_COMPARATOR_HOME
246   	export CLASSES_DIR
247
248}
249
250################################################################################
251TestSetup() {
252
253
254	POSESetup
255
256	export ZENDEBUG=1
257
258	COMPLIST="${COMPLIST}/tempcomp.${RUNNAME}.list"
259	# create the directories for the results of this test run
260	RESDIR="${RESULTSBASE}/${RUNNAME}"
261	\rm -Rf $RESDIR
262	mkdir $RESDIR
263
264	# Define the directories for the test input files,
265	# test output files, working directories and baseline files
266	PDB_INFILE_DIR="${RESDIR}/pdb-orig"
267	mkdir "${PDB_INFILE_DIR}"
268	PDB_OUTFILE_DIR="${RESDIR}/pdb-new"
269	mkdir "${PDB_OUTFILE_DIR}"
270	XML_OUTFILE_DIR="${RESDIR}/xml-new"
271	mkdir "${XML_OUTFILE_DIR}"
272
273	LOGFILE="${RESDIR}/logfile"
274	COMPLOG="${RESDIR}/complog"
275	REPORT="${RESDIR}/report.html"
276	StartReportFile
277
278	echo "Results in: $RESDIR"
279	echo "Report file: $REPORT"
280}
281
282################################################################################
283TestCleanup() {
284	EndReportFile
285}
286
287################################################################################
288TestCaseSetup() {
289	# where to pick up converter classes
290	export CLASSPATH=""
291	export CLASSPATH=$CLASSPATH:$XMERGE_JAR
292	export CLASSPATH=$CLASSPATH:$APORTIS_JAR
293	export CLASSPATH=$CLASSPATH:$WORDSMITH_JAR
294	export CLASSPATH=$CLASSPATH:$MINICALC_JAR
295}
296
297################################################################################
298TestCaseCleanup() {
299	# empty function
300	a=42
301}
302
303################################################################################
304RunTestCase() {
305	testcase=$1
306
307	LogLine ""
308	LogLine "test_driver output:"
309
310	# run test_driver in foreground
311	$TEST_DRIVER_PL\
312		-pose-prc=${POSE_PRC}\
313		-pose-exe=${POSE_EXE}\
314		-xml-orig=${XML_INFILE_DIR}\
315		-pdb-orig=${PDB_INFILE_DIR}\
316		-pdb-new=${PDB_OUTFILE_DIR}\
317		-xml-new=${XML_OUTFILE_DIR}\
318		-test=$testcase -merge >> $LOGFILE 2>&1
319
320	# cleanup in case zombie POSE processes are hanging around
321	pkill pose
322	pkill -9 pose
323}
324
325
326################################################################################
327ComparisonSetup() {
328	typeset file=$1
329
330
331	export CLASSPATH="$CLASSES_DIR/xerces.jar"
332
333	# create temporary comparator list file for this test case
334	echo $file > $COMPLIST
335}
336
337################################################################################
338ComparisonCleanup() {
339	# remove temporary comparator list file used for this test case
340	\rm -f $COMPLIST
341}
342
343################################################################################
344RunComparison() {
345	typeset type=$1
346
347	LogLine ""
348	LogLine "Comparator output:"
349	$COMPARATOR_PL\
350		-xml-orig=${XML_BASELINE_DIR}\
351		-pdb-orig=${PDB_BASELINE_DIR}\
352		-pdb-new=${PDB_INFILE_DIR}\
353		-xml-new=${XML_OUTFILE_DIR}\
354		-list=$COMPLIST -log=$COMPLOG -type=$type >> $LOGFILE 2>&1
355#		-list=$COMPLIST -log=$COMPLOG -type=$type | tee -a $LOGFILE 2>&1
356
357	pass=`grep TRUE $COMPLOG | wc -l`
358
359	LogLine ""
360	LogLine "COMPLIST file:"
361	cat $COMPLIST >> $LOGFILE
362	LogLine ""
363	LogLine "Comparator logfile:"
364	cat $COMPLOG >> $LOGFILE
365
366	if [ $pass -eq 0 ]
367	then
368		TEST_COMMENTS="${TEST_COMMENTS}$type comparison ERROR<BR>"
369		echo "$type comparison ERROR"
370		return 0
371	fi
372
373	echo "$type comparison OK"
374	return 1
375}
376
377################################################################################
378CheckOutput() {
379	typeset xmlfile="${XML_OUTFILE_DIR}/$1"
380	typeset pdbfile="${PDB_INFILE_DIR}/$2"
381
382	if [ ! -f $pdbfile ] ; then
383		TEST_COMMENTS="${TEST_COMMENTS}[$pdbfile] does not exist<BR>"
384		LogLine "ERROR: $pdbfile does not exist"
385		echo "ERROR: $pdbfile does not exist"
386		return 0
387	fi
388
389	if [ ! -f $xmlfile ] ; then
390		TEST_COMMENTS="${TEST_COMMENTS}[$xmlfile] does not exist<BR>"
391		LogLine "ERROR: $xmlfile does not exist"
392		echo "ERROR: $xmlfile does not exist"
393		return 0
394	fi
395
396	return 1
397}
398
399################################################################################
400RunTest() {
401	typeset testcasename
402	typeset testcase
403	typeset testfile
404	typeset pdbfile
405	typeset xmlfile
406	typeset ext
407	integer try
408	integer finished_with_test
409	integer test_pass
410
411	TestSetup
412
413	BGCOLOR=$ODD_BGCOLOR
414
415	while read line ; do
416		# get chars up to 1st space
417		testcasename=${line%% *}
418		testcase="${TESTCASEDIR}/$testcasename"
419
420		# get 2nd word
421		testfile=${line#* }
422		testfile=${testfile%% *}
423
424		# get last word
425		ext=${line##* }
426
427		LogLine "############################################"
428		LogLine "Starting the following testcase"
429		LogLine "testcase = $testcase"
430		LogLine "testfile = $testfile"
431		LogLine "ext = $ext"
432
433		ReportLine "<TR BGCOLOR='${BGCOLOR}'>"
434		ReportLine "<TD valign=top>$testcasename</TD>"
435		ReportLine "<TD valign=top>$testfile</TD>"
436		ReportLine "<TD valign=top>$ext</TD>"
437
438		echo ""
439		echo "testcase = $testcase"
440		echo "testfile = $testfile"
441		echo "ext = $ext"
442
443		try=1
444		finished_with_test=0
445		TEST_COMMENTS=""
446
447		while (($finished_with_test == 0)) ; do
448
449			TestCaseSetup
450			RunTestCase $testcase
451			TestCaseCleanup
452
453			xmlfile="${testfile}.${ext}"
454
455			if [[ $ext == "sxc" ]] ; then
456				pdbfile="${testfile}-Sheet1.pdb"
457			else
458				pdbfile="${testfile}.pdb"
459			fi
460
461			CheckOutput $xmlfile $pdbfile
462			res=$?
463
464			if [[ $res -eq 1 ]] ; then
465				ComparisonSetup $pdbfile
466				RunComparison pdb
467				res=$?
468# ignore result until pdb comparator is fixed...
469res=1
470				ComparisonCleanup
471			fi
472
473			if [[ $res -eq 1 ]] ; then
474				ComparisonSetup $xmlfile
475				RunComparison xml
476				res=$?
477				ComparisonCleanup
478			fi
479
480			if [[ $res -eq 1 ]] ; then
481				TOTAL_PASS=TOTAL_PASS+1
482				ReportLine "<TD valign=top BGCOLOR='${PASS_COLOR}'>PASS</TD>"
483				ReportTestComments
484				ReportLine "</TR>"
485				LogLine "Test PASSED (on try $try)"
486				echo "Test PASSED (on try $try)"
487				finished_with_test=1
488			else
489				TEST_COMMENTS="${TEST_COMMENTS}error on try ${try}<BR>"
490				LogLine "TEST FAILED (on try $try)"
491				echo "TEST FAILED (on try $try)"
492
493				if [[ $try -eq $MAX_RETRIES ]] ; then
494					TOTAL_FAIL=TOTAL_FAIL+1
495					ReportLine "<TD valign=top BGCOLOR='${FAIL_COLOR}'>FAIL</TD>"
496					ReportTestComments
497					ReportLine "</TR>"
498					finished_with_test=1
499				fi
500			fi
501
502			try=try+1
503		done
504
505		TOTAL_RUN=TOTAL_RUN+1
506
507		# toggle BGCOLOR for next report line
508		if [[ $BGCOLOR == $ODD_BGCOLOR ]] ; then
509			BGCOLOR=$EVEN_BGCOLOR
510		else
511			BGCOLOR=$ODD_BGCOLOR
512		fi
513
514	done < $MASTERLIST
515
516	ReportLine "</TABLE>"
517	ReportLine "</CENTER>"
518
519	TestCleanup
520
521	echo "Total Tests PASSED: "${TOTAL_PASS}
522	echo "Total Tests FAILED: "${TOTAL_FAIL}
523	echo "Total Tests RUN: "${TOTAL_RUN}
524	echo "Results in: $RESDIR"
525	echo "Report file: $REPORT"
526}
527
528################################################################################
529################################################################################
530# main
531################################################################################
532################################################################################
533
534GetParams $@
535ReadEnvFile
536RunTest
537
538exit 0
539