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