blob: cb4543f9e3b831bfbc15f02c535ed2947d8dbfa0 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package org.openoffice;
import java.util.Enumeration;
import java.util.Properties;
import java.util.StringTokenizer;
import lib.TestParameters;
import util.DynamicClassLoader;
import base.TestBase;
import helper.ClParser;
import helper.CfgParser;
/**
* The main class, will call ClParser and CfgParser to <br>
* fill the TestParameters.<br>
* Will then call the appropriate Testbase to run the tests.
*/
public class Runner
{
private static long m_nStartTime;
public static long getRunnerStartTime()
{
return m_nStartTime;
}
/*
simple helper functions to start/stop a timer, to know how long a process need in milliseconds
*/
private static long getTime()
{
return System.currentTimeMillis();
}
private static void setStartTime(long _nStartTime)
{
m_nStartTime = _nStartTime;
}
/*
return the time, which is done until last startTime()
*/
public static long meanTime(long _nCurrentTimer)
{
if (_nCurrentTimer == 0)
{
System.out.println("Forgotten to initialise a start timer?");
return 0;
}
long nMeanTime = getTime();
return nMeanTime - _nCurrentTimer;
}
private static String beautifyTime(long _nTime)
{
long sec = (_nTime / 1000) % 60;
long min = (_nTime / (60 * 1000)) % 60;
long hour = _nTime / (60 * 60 * 1000);
StringBuffer aTime = new StringBuffer();
aTime.append(helper.StringHelper.createValueString((int) hour, 2)).
append(':').
append(helper.StringHelper.createValueString((int) min, 2)).
append(':').
append(helper.StringHelper.createValueString((int) sec, 2));
return aTime.toString();
}
/**
Helper to check if there are problems with Cygwin Path variables.
*/
private static boolean checkVariableForCygwin(String _sVariable)
{
if (_sVariable == null)
{
return false;
}
if (_sVariable.startsWith("/cygdrive"))
{
return true;
}
return false;
}
private static boolean checkPathVariable(String _sPath, String delim)
{
String sPath = System.getProperty(_sPath);
if (sPath != null)
{
StringTokenizer aTokenEnum = new StringTokenizer(sPath, delim);
while (aTokenEnum.hasMoreElements())
{
String sToken = (String) aTokenEnum.nextElement();
if (checkVariableForCygwin(sToken))
{
System.err.println("ERROR: OOoRunner detect cygwin path in '" + _sPath + "'");
return true;
}
}
}
return false;
}
private static void checkAllVariablesForCygwinPath(TestParameters _aParams)
{
// ----- check all System.getProperty(key) variables -----
String sOsName = System.getProperty("os.name");
if (!sOsName.toLowerCase().startsWith("windows"))
{
// we need to check only on windows
return;
}
Properties aProps = System.getProperties();
Enumeration aEnum = aProps.propertyNames();
// Enumeration aEnum = aProps.elements(); // these are only the values
boolean bEmergencyStop = false;
while (aEnum.hasMoreElements())
{
String sKey = (String) aEnum.nextElement();
String sValue = System.getProperty(sKey);
if (checkVariableForCygwin(sValue))
{
System.err.println("ERROR: OOoRunner detect cygwin path in '" + sKey + ":=" + sValue + "'");
bEmergencyStop = true;
}
}
// ----- check path variables separatly -----
String sDelim = System.getProperty("path.separator");
bEmergencyStop |= checkPathVariable("java.library.path", sDelim);
bEmergencyStop |= checkPathVariable("java.class.path", sDelim);
bEmergencyStop |= checkPathVariable("sun.boot.class.path", sDelim);
// ----- check all TestParameters -----
aEnum = _aParams.keys();
while (aEnum.hasMoreElements())
{
String sKey = (String) aEnum.nextElement();
if (_aParams.get(sKey) instanceof String)
{
String sValue = (String) _aParams.get(sKey);
if (checkVariableForCygwin(sValue))
{
System.err.println("ERROR: OOoRunner detect cygwin path in '" + sKey + ":=" + sValue + "'");
bEmergencyStop = true;
}
}
}
if (bEmergencyStop)
{
System.exit(-1);
}
}
public static boolean run(String... args)
{
System.out.println("OOoRunner Main() version from 20101118 (yyyymmdd)");
setStartTime(getTime());
DynamicClassLoader dcl = new DynamicClassLoader();
// get a class for test parameters
TestParameters param = new TestParameters();
ClParser cli = new ClParser();
//parse the commandline arguments if an ini-parameter is given
String iniFile = cli.getIniPath(args);
//initialize cfgParser with ini-path
CfgParser ini = new CfgParser(iniFile);
//parse ConfigFile
ini.getIniParameters(param);
//parse the commandline arguments if an runnerprops-parameter is given
String runnerIniFile = cli.getRunnerIniPath(args);
//initialize cfgParser with ini-path
CfgParser runnerIni = new CfgParser(runnerIniFile);
//parse ConfigFile
runnerIni.getIniParameters(param);
//parse the commandline arguments
// TODO: no right error message, if no parameter given!
cli.getCommandLineParameter(param, args);
Object tj = param.get("TestJob");
if (tj == null)
{
System.out.println("==========================================================================");
System.out.println("No TestJob given, please make sure that you ");
System.out.println("a.) called the OOoRunner with the paramter -o <job> or -sce <scenarioFile>");
System.out.println("or");
System.out.println("b.) have an entry called TestJob in your used properties file");
System.out.println("==========================================================================");
System.exit(-1);
}
System.out.println("TestJob: " + tj);
String sName = "base." + (String) param.get("TestBase");
TestBase toExecute = (TestBase) dcl.getInstance(sName);
checkAllVariablesForCygwinPath(param);
boolean worked = toExecute.executeTest(param);
long nTime = meanTime(getRunnerStartTime());
String sBeautifyTime = beautifyTime(nTime);
System.out.println("Job run took: " + nTime + "ms " + " [" + sBeautifyTime + "]");
if (!worked)
{
System.out.println("Job " + param.get("TestJob") + " failed");
}
else
{
System.out.println("Job " + param.get("TestJob") + " done");
}
return worked;
}
public static void main(String[] args)
{
System.exit(run(args) ? 0 : -1);
}
}