blob: 2f298c0081937101adb9b74eb709e1512d95d48e [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 base;
import java.io.PrintWriter;
import lib.TestParameters;
import lib.TestCase;
import lib.MultiMethodTest;
import lib.TestEnvironment;
import util.DynamicClassLoader;
import com.sun.star.lang.XMultiServiceFactory;
import share.DescEntry;
import share.DescGetter;
import helper.APIDescGetter;
import share.LogWriter;
import stats.Summarizer;
/**
* this class handles tests written in java and running on a fat Office
* with the runner as a service.
*/
public class java_fat_service implements TestBase {
static protected boolean debug = false;
protected LogWriter log = null;
public boolean executeTest(lib.TestParameters param) {
DynamicClassLoader dcl = new DynamicClassLoader();
log = (LogWriter)dcl.getInstance((String)param.get("LogWriter"));
debug = ((Boolean) param.get("DebugIsActive")).booleanValue();
DescGetter dg = new APIDescGetter();
String job = (String) param.get("TestJob");
boolean retValue = true;
//get Job-Descriptions
log.println("Getting Descriptions for Job: "+job);
DescEntry[] entries = dg.getDescriptionFor(job,
(String) param.get("DescriptionPath"),debug);
if (entries == null ) {
log.println("Couldn't get Description for Job");
return false;
}
String conStr = (String) param.get("ConnectionString");
XMultiServiceFactory msf = (XMultiServiceFactory)param.getMSF();
for (int l=0;l<entries.length;l++) {
if (entries[l] == null ) {
continue;
}
if (entries[l].hasErrorMsg) {
log.println(entries[l].ErrorMsg);
continue;
}
DescEntry entry = entries[l];
//get some helper classes
Summarizer sumIt = new Summarizer();
TestCase tCase = null;
try {
tCase = (TestCase)
dcl.getInstance("mod._"+entry.entryName);
} catch (java.lang.IllegalArgumentException ie) {
entry.ErrorMsg=ie.getMessage();
entry.hasErrorMsg=true;
}
if (tCase == null) {
sumIt.summarizeDown(entry,entry.ErrorMsg);
LogWriter sumObj = (LogWriter)dcl.getInstance(
(String)param.get("OutProducer"));
sumObj.initialize(entry,true);
entry.UserDefinedParams = param;
sumObj.summary(entry);
continue;
}
log.println("Creating: "+tCase.getObjectName());
log.initialize(entry,true);
entry.UserDefinedParams = param;
TestEnvironment tEnv = null;
try {
tCase.setLogWriter((PrintWriter) log);
tCase.initializeTestCase(param);
tEnv = tCase.getTestEnvironment(param);
} catch (Exception e) {
log.println("Exception while creating "+tCase.getObjectName());
log.println("Exception: " + e);
log.println("Message "+e.getMessage());
tEnv = null;
}
if (tEnv == null) {
sumIt.summarizeDown(entry,"Couldn't create "+tCase.getObjectName());
LogWriter sumObj = (LogWriter)dcl.getInstance(
(String)param.get("OutProducer"));
sumObj.initialize(entry,true);
entry.UserDefinedParams = param;
sumObj.summary(entry);
continue;
}
log.println("Created "+tCase.getObjectName()+"\n");
for (int j=0;j<entry.SubEntryCount;j++) {
if (!entry.SubEntries[j].isToTest) {
Summarizer.summarizeDown(entry.SubEntries[j],"not part of the job");
continue;
}
log.println("running: "+entry.SubEntries[j].entryName);
LogWriter ifclog = (LogWriter)dcl.getInstance(
(String)param.get("LogWriter"));
ifclog.initialize(entry.SubEntries[j],true);
entry.SubEntries[j].UserDefinedParams = param;
entry.SubEntries[j].Logger = ifclog;
if (tEnv == null || tEnv.isDisposed()) {
tEnv = getEnv(entry,param);
}
MultiMethodTest ifc = null;
lib.TestResult res = null;
try {
ifc = (MultiMethodTest) dcl.getInstance(
entry.SubEntries[j].entryName);
res = ifc.run(entry.SubEntries[j],tEnv,param);
} catch (IllegalArgumentException iae) {
log.println("Couldn't load class "+entry.SubEntries[j].entryName);
log.println("**** "+iae.getMessage()+" ****");
Summarizer.summarizeDown(entry.SubEntries[j],iae.getMessage());
} catch (java.lang.RuntimeException e) {
tEnv = getEnv(entry,param);
ifc = (MultiMethodTest) dcl.getInstance(
entry.SubEntries[j].entryName);
if ((tEnv != null) && (ifc != null)) {
res = ifc.run(entry.SubEntries[j],tEnv,param);
}
else
{
res = null;
}
}
if (res != null) {
for (int k=0;k<entry.SubEntries[j].SubEntryCount;k++) {
if (res.hasMethod(entry.SubEntries[j].SubEntries[k].entryName)) {
entry.SubEntries[j].SubEntries[k].State=
res.getStatusFor(entry.SubEntries[j].SubEntries[k].entryName).toString();
}
}
}
sumIt.summarizeUp(entry.SubEntries[j]);
LogWriter sumIfc = (LogWriter)dcl.getInstance(
(String)param.get("OutProducer"));
sumIfc.initialize(entry.SubEntries[j],true);
entry.SubEntries[j].UserDefinedParams = param;
sumIfc.summary(entry.SubEntries[j]);
}
try {
tCase.cleanupTestCase(param);
} catch (Exception e) {
e.printStackTrace((PrintWriter)log);
}
sumIt.summarizeUp(entry);
LogWriter sumObj = (LogWriter)dcl.getInstance(
(String)param.get("OutProducer"));
sumObj.initialize(entry,true);
sumObj.summary(entry);
}
if (entries.length > 1) {
log.println("");
int counter = 0;
log.println("Failures that appeared during scenario execution:");
for (int i=0;i<entries.length;i++) {
if (! entries[i].State.endsWith("OK")) {
log.println("\t "+entries[i].longName);
counter++;
}
}
log.println(counter +" of "+entries.length + " tests failed" );
}
return retValue;
}
protected TestEnvironment getEnv(DescEntry entry, TestParameters param) {
DynamicClassLoader dcl = new DynamicClassLoader();
log = (LogWriter)dcl.getInstance((String)param.get("LogWriter"));
XMultiServiceFactory msf = (XMultiServiceFactory)param.getMSF();
TestCase tCase = null;
try
{
tCase = (TestCase) dcl.getInstance("mod._"+entry.entryName);
}
catch (java.lang.IllegalArgumentException ie)
{
entry.ErrorMsg=ie.getMessage();
entry.hasErrorMsg=true;
}
log.println("Creating: "+tCase.getObjectName());
// LogWriter log = (LogWriter)dcl.getInstance( (String)param.get("LogWriter"));
log.initialize(entry,true);
entry.UserDefinedParams = param;
tCase.setLogWriter((PrintWriter) log);
TestEnvironment tEnv = null;
try
{
tCase.initializeTestCase(param);
tEnv = tCase.getTestEnvironment(param);
}
catch (com.sun.star.lang.DisposedException de)
{
log.println("Office disposed");
}
return tEnv;
}
// protected void shortWait(int millis) {
// try {
// Thread.sleep(millis);
// } catch (java.lang.InterruptedException ie) {}
// }
}