xref: /AOO41X/main/qadevOOo/runner/org/openoffice/Runner.java (revision ef39d40d3f5e66cf3f035b3e93783012b340500d)
1*ef39d40dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*ef39d40dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*ef39d40dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*ef39d40dSAndrew Rist  * distributed with this work for additional information
6*ef39d40dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*ef39d40dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*ef39d40dSAndrew Rist  * "License"); you may not use this file except in compliance
9*ef39d40dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*ef39d40dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*ef39d40dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*ef39d40dSAndrew Rist  * software distributed under the License is distributed on an
15*ef39d40dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*ef39d40dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*ef39d40dSAndrew Rist  * specific language governing permissions and limitations
18*ef39d40dSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*ef39d40dSAndrew Rist  *************************************************************/
21*ef39d40dSAndrew Rist 
22*ef39d40dSAndrew Rist 
23cdf0e10cSrcweir package org.openoffice;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import java.util.Enumeration;
26cdf0e10cSrcweir import java.util.Properties;
27cdf0e10cSrcweir import java.util.StringTokenizer;
28cdf0e10cSrcweir import lib.TestParameters;
29cdf0e10cSrcweir import util.DynamicClassLoader;
30cdf0e10cSrcweir import base.TestBase;
31cdf0e10cSrcweir import helper.ClParser;
32cdf0e10cSrcweir import helper.CfgParser;
33cdf0e10cSrcweir 
34cdf0e10cSrcweir /**
35cdf0e10cSrcweir  * The main class, will call ClParser and CfgParser to <br>
36cdf0e10cSrcweir  * fill the TestParameters.<br>
37cdf0e10cSrcweir  * Will then call the appropriate Testbase to run the tests.
38cdf0e10cSrcweir  */
39cdf0e10cSrcweir public class Runner
40cdf0e10cSrcweir {
41cdf0e10cSrcweir 
42cdf0e10cSrcweir     private static long m_nStartTime;
43cdf0e10cSrcweir 
getRunnerStartTime()44cdf0e10cSrcweir     public static long getRunnerStartTime()
45cdf0e10cSrcweir     {
46cdf0e10cSrcweir         return m_nStartTime;
47cdf0e10cSrcweir     }
48cdf0e10cSrcweir     /*
49cdf0e10cSrcweir     simple helper functions to start/stop a timer, to know how long a process need in milliseconds
50cdf0e10cSrcweir      */
51cdf0e10cSrcweir 
getTime()52cdf0e10cSrcweir     private static long getTime()
53cdf0e10cSrcweir     {
54cdf0e10cSrcweir         return System.currentTimeMillis();
55cdf0e10cSrcweir     }
56cdf0e10cSrcweir 
setStartTime(long _nStartTime)57cdf0e10cSrcweir     private static void setStartTime(long _nStartTime)
58cdf0e10cSrcweir     {
59cdf0e10cSrcweir         m_nStartTime = _nStartTime;
60cdf0e10cSrcweir     }
61cdf0e10cSrcweir 
62cdf0e10cSrcweir     /*
63cdf0e10cSrcweir     return the time, which is done until last startTime()
64cdf0e10cSrcweir      */
meanTime(long _nCurrentTimer)65cdf0e10cSrcweir     public static long meanTime(long _nCurrentTimer)
66cdf0e10cSrcweir     {
67cdf0e10cSrcweir         if (_nCurrentTimer == 0)
68cdf0e10cSrcweir         {
69cdf0e10cSrcweir             System.out.println("Forgotten to initialise a start timer?");
70cdf0e10cSrcweir             return 0;
71cdf0e10cSrcweir         }
72cdf0e10cSrcweir         long nMeanTime = getTime();
73cdf0e10cSrcweir         return nMeanTime - _nCurrentTimer;
74cdf0e10cSrcweir     }
75cdf0e10cSrcweir 
beautifyTime(long _nTime)76cdf0e10cSrcweir     private static String beautifyTime(long _nTime)
77cdf0e10cSrcweir     {
78cdf0e10cSrcweir         long sec = (_nTime / 1000) % 60;
79cdf0e10cSrcweir         long min = (_nTime / (60 * 1000)) % 60;
80cdf0e10cSrcweir         long hour = _nTime / (60 * 60 * 1000);
81cdf0e10cSrcweir         StringBuffer aTime = new StringBuffer();
82cdf0e10cSrcweir         aTime.append(helper.StringHelper.createValueString((int) hour, 2)).
83cdf0e10cSrcweir                 append(':').
84cdf0e10cSrcweir                 append(helper.StringHelper.createValueString((int) min, 2)).
85cdf0e10cSrcweir                 append(':').
86cdf0e10cSrcweir                 append(helper.StringHelper.createValueString((int) sec, 2));
87cdf0e10cSrcweir         return aTime.toString();
88cdf0e10cSrcweir     }
89cdf0e10cSrcweir 
90cdf0e10cSrcweir     /**
91cdf0e10cSrcweir      Helper to check if there are problems with Cygwin Path variables.
92cdf0e10cSrcweir      */
checkVariableForCygwin(String _sVariable)93cdf0e10cSrcweir     private static boolean checkVariableForCygwin(String _sVariable)
94cdf0e10cSrcweir     {
95cdf0e10cSrcweir         if (_sVariable == null)
96cdf0e10cSrcweir         {
97cdf0e10cSrcweir             return false;
98cdf0e10cSrcweir         }
99cdf0e10cSrcweir         if (_sVariable.startsWith("/cygdrive"))
100cdf0e10cSrcweir         {
101cdf0e10cSrcweir             return true;
102cdf0e10cSrcweir         }
103cdf0e10cSrcweir         return false;
104cdf0e10cSrcweir     }
105cdf0e10cSrcweir 
checkPathVariable(String _sPath, String delim)106cdf0e10cSrcweir     private static boolean checkPathVariable(String _sPath, String delim)
107cdf0e10cSrcweir     {
108cdf0e10cSrcweir         String sPath = System.getProperty(_sPath);
109cdf0e10cSrcweir         if (sPath != null)
110cdf0e10cSrcweir         {
111cdf0e10cSrcweir             StringTokenizer aTokenEnum = new StringTokenizer(sPath, delim);
112cdf0e10cSrcweir             while (aTokenEnum.hasMoreElements())
113cdf0e10cSrcweir             {
114cdf0e10cSrcweir                 String sToken = (String) aTokenEnum.nextElement();
115cdf0e10cSrcweir                 if (checkVariableForCygwin(sToken))
116cdf0e10cSrcweir                 {
117cdf0e10cSrcweir                     System.err.println("ERROR: OOoRunner detect cygwin path in '" + _sPath + "'");
118cdf0e10cSrcweir                     return true;
119cdf0e10cSrcweir                 }
120cdf0e10cSrcweir             }
121cdf0e10cSrcweir         }
122cdf0e10cSrcweir         return false;
123cdf0e10cSrcweir     }
124cdf0e10cSrcweir 
checkAllVariablesForCygwinPath(TestParameters _aParams)125cdf0e10cSrcweir     private static void checkAllVariablesForCygwinPath(TestParameters _aParams)
126cdf0e10cSrcweir     {
127cdf0e10cSrcweir         // ----- check all System.getProperty(key) variables -----
128cdf0e10cSrcweir         String sOsName = System.getProperty("os.name");
129cdf0e10cSrcweir         if (!sOsName.toLowerCase().startsWith("windows"))
130cdf0e10cSrcweir         {
131cdf0e10cSrcweir             // we need to check only on windows
132cdf0e10cSrcweir             return;
133cdf0e10cSrcweir         }
134cdf0e10cSrcweir 
135cdf0e10cSrcweir         Properties aProps = System.getProperties();
136cdf0e10cSrcweir         Enumeration aEnum = aProps.propertyNames();
137cdf0e10cSrcweir         // Enumeration aEnum = aProps.elements();        // these are only the values
138cdf0e10cSrcweir         boolean bEmergencyStop = false;
139cdf0e10cSrcweir 
140cdf0e10cSrcweir         while (aEnum.hasMoreElements())
141cdf0e10cSrcweir         {
142cdf0e10cSrcweir             String sKey = (String) aEnum.nextElement();
143cdf0e10cSrcweir             String sValue = System.getProperty(sKey);
144cdf0e10cSrcweir 
145cdf0e10cSrcweir             if (checkVariableForCygwin(sValue))
146cdf0e10cSrcweir             {
147cdf0e10cSrcweir                 System.err.println("ERROR: OOoRunner detect cygwin path in '" + sKey + ":=" + sValue + "'");
148cdf0e10cSrcweir                 bEmergencyStop = true;
149cdf0e10cSrcweir             }
150cdf0e10cSrcweir         }
151cdf0e10cSrcweir 
152cdf0e10cSrcweir         // ----- check path variables separatly -----
153cdf0e10cSrcweir         String sDelim = System.getProperty("path.separator");
154cdf0e10cSrcweir         bEmergencyStop |= checkPathVariable("java.library.path", sDelim);
155cdf0e10cSrcweir         bEmergencyStop |= checkPathVariable("java.class.path", sDelim);
156cdf0e10cSrcweir         bEmergencyStop |= checkPathVariable("sun.boot.class.path", sDelim);
157cdf0e10cSrcweir 
158cdf0e10cSrcweir         // ----- check all TestParameters -----
159cdf0e10cSrcweir         aEnum = _aParams.keys();
160cdf0e10cSrcweir         while (aEnum.hasMoreElements())
161cdf0e10cSrcweir         {
162cdf0e10cSrcweir             String sKey = (String) aEnum.nextElement();
163cdf0e10cSrcweir             if (_aParams.get(sKey) instanceof String)
164cdf0e10cSrcweir             {
165cdf0e10cSrcweir                 String sValue = (String) _aParams.get(sKey);
166cdf0e10cSrcweir 
167cdf0e10cSrcweir                 if (checkVariableForCygwin(sValue))
168cdf0e10cSrcweir                 {
169cdf0e10cSrcweir                     System.err.println("ERROR: OOoRunner detect cygwin path in '" + sKey + ":=" + sValue + "'");
170cdf0e10cSrcweir                     bEmergencyStop = true;
171cdf0e10cSrcweir                 }
172cdf0e10cSrcweir             }
173cdf0e10cSrcweir         }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir         if (bEmergencyStop)
176cdf0e10cSrcweir         {
177cdf0e10cSrcweir             System.exit(-1);
178cdf0e10cSrcweir         }
179cdf0e10cSrcweir     }
180cdf0e10cSrcweir 
run(String... args)181cdf0e10cSrcweir     public static boolean run(String... args)
182cdf0e10cSrcweir     {
183cdf0e10cSrcweir         System.out.println("OOoRunner Main() version from 20101118 (yyyymmdd)");
184cdf0e10cSrcweir 
185cdf0e10cSrcweir         setStartTime(getTime());
186cdf0e10cSrcweir 
187cdf0e10cSrcweir         DynamicClassLoader dcl = new DynamicClassLoader();
188cdf0e10cSrcweir 
189cdf0e10cSrcweir         // get a class for test parameters
190cdf0e10cSrcweir         TestParameters param = new TestParameters();
191cdf0e10cSrcweir 
192cdf0e10cSrcweir         ClParser cli = new ClParser();
193cdf0e10cSrcweir 
194cdf0e10cSrcweir         //parse the commandline arguments if an ini-parameter is given
195cdf0e10cSrcweir         String iniFile = cli.getIniPath(args);
196cdf0e10cSrcweir 
197cdf0e10cSrcweir         //initialize cfgParser with ini-path
198cdf0e10cSrcweir         CfgParser ini = new CfgParser(iniFile);
199cdf0e10cSrcweir 
200cdf0e10cSrcweir         //parse ConfigFile
201cdf0e10cSrcweir         ini.getIniParameters(param);
202cdf0e10cSrcweir 
203cdf0e10cSrcweir 
204cdf0e10cSrcweir         //parse the commandline arguments if an runnerprops-parameter is given
205cdf0e10cSrcweir         String runnerIniFile = cli.getRunnerIniPath(args);
206cdf0e10cSrcweir 
207cdf0e10cSrcweir         //initialize cfgParser with ini-path
208cdf0e10cSrcweir         CfgParser runnerIni = new CfgParser(runnerIniFile);
209cdf0e10cSrcweir 
210cdf0e10cSrcweir         //parse ConfigFile
211cdf0e10cSrcweir         runnerIni.getIniParameters(param);
212cdf0e10cSrcweir 
213cdf0e10cSrcweir         //parse the commandline arguments
214cdf0e10cSrcweir         // TODO: no right error message, if no parameter given!
215cdf0e10cSrcweir         cli.getCommandLineParameter(param, args);
216cdf0e10cSrcweir 
217cdf0e10cSrcweir         Object tj = param.get("TestJob");
218cdf0e10cSrcweir 
219cdf0e10cSrcweir         if (tj == null)
220cdf0e10cSrcweir         {
221cdf0e10cSrcweir             System.out.println("==========================================================================");
222cdf0e10cSrcweir             System.out.println("No TestJob given, please make sure that you ");
223cdf0e10cSrcweir             System.out.println("a.) called the OOoRunner with the paramter -o <job> or -sce <scenarioFile>");
224cdf0e10cSrcweir             System.out.println("or");
225cdf0e10cSrcweir             System.out.println("b.) have an entry called TestJob in your used properties file");
226cdf0e10cSrcweir             System.out.println("==========================================================================");
227cdf0e10cSrcweir             System.exit(-1);
228cdf0e10cSrcweir         }
229cdf0e10cSrcweir 
230cdf0e10cSrcweir         System.out.println("TestJob: " + tj);
231cdf0e10cSrcweir         String sName = "base." + (String) param.get("TestBase");
232cdf0e10cSrcweir         TestBase toExecute = (TestBase) dcl.getInstance(sName);
233cdf0e10cSrcweir 
234cdf0e10cSrcweir         checkAllVariablesForCygwinPath(param);
235cdf0e10cSrcweir 
236cdf0e10cSrcweir         boolean worked = toExecute.executeTest(param);
237cdf0e10cSrcweir         long nTime = meanTime(getRunnerStartTime());
238cdf0e10cSrcweir         String sBeautifyTime = beautifyTime(nTime);
239cdf0e10cSrcweir 
240cdf0e10cSrcweir         System.out.println("Job run took: " + nTime + "ms " + " [" + sBeautifyTime + "]");
241cdf0e10cSrcweir 
242cdf0e10cSrcweir         if (!worked)
243cdf0e10cSrcweir         {
244cdf0e10cSrcweir             System.out.println("Job " + param.get("TestJob") + " failed");
245cdf0e10cSrcweir         }
246cdf0e10cSrcweir         else
247cdf0e10cSrcweir         {
248cdf0e10cSrcweir             System.out.println("Job " + param.get("TestJob") + " done");
249cdf0e10cSrcweir         }
250cdf0e10cSrcweir         return worked;
251cdf0e10cSrcweir     }
252cdf0e10cSrcweir 
main(String[] args)253cdf0e10cSrcweir     public static void main(String[] args)
254cdf0e10cSrcweir     {
255cdf0e10cSrcweir         System.exit(run(args) ? 0 : -1);
256cdf0e10cSrcweir     }
257cdf0e10cSrcweir }
258