diff options
Diffstat (limited to 'qadevOOo/runner/base')
-rw-r--r-- | qadevOOo/runner/base/TestBase.java | 39 | ||||
-rw-r--r-- | qadevOOo/runner/base/basic_fat.java | 457 | ||||
-rw-r--r-- | qadevOOo/runner/base/java_cmp.java | 83 | ||||
-rw-r--r-- | qadevOOo/runner/base/java_complex.java | 170 | ||||
-rw-r--r-- | qadevOOo/runner/base/java_fat.java | 602 | ||||
-rw-r--r-- | qadevOOo/runner/base/java_fat_service.java | 267 | ||||
-rw-r--r-- | qadevOOo/runner/base/makefile.mk | 52 |
7 files changed, 1670 insertions, 0 deletions
diff --git a/qadevOOo/runner/base/TestBase.java b/qadevOOo/runner/base/TestBase.java new file mode 100644 index 000000000000..d09f28721ab0 --- /dev/null +++ b/qadevOOo/runner/base/TestBase.java @@ -0,0 +1,39 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package base; + +import lib.TestParameters; +/** + * + * Base Interface to execute a given TestJob + */ +public interface TestBase { + + public boolean executeTest(TestParameters param); + +} diff --git a/qadevOOo/runner/base/basic_fat.java b/qadevOOo/runner/base/basic_fat.java new file mode 100644 index 000000000000..74a6708cf801 --- /dev/null +++ b/qadevOOo/runner/base/basic_fat.java @@ -0,0 +1,457 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +package base; + + +import basicrunner.BasicIfcTest; +import basicrunner.BasicTestCase; + +import com.sun.star.lang.XMultiServiceFactory; + +import helper.APIDescGetter; +import helper.AppProvider; +import helper.OfficeProvider; +import helper.OfficeWatcher; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.PrintWriter; + +import java.util.Vector; + +import lib.TestCase; +import lib.TestEnvironment; +import lib.TestParameters; + +import share.DescEntry; +import share.DescGetter; +import share.LogWriter; + +import stats.OutProducerFactory; +import stats.Summarizer; + +import util.DynamicClassLoader; + +/** + * The testbase for executing basic tests. + * @see lib.TestBase + */ +public class basic_fat implements TestBase +{ + + public static boolean debug = false; + + /** + * Execute a test. + * @param param The test parameters. + * @return True, if the test was executed. + */ + public boolean executeTest(TestParameters param) + { + DescGetter dg = new APIDescGetter(); + String job = (String) param.get("TestJob"); + OfficeProvider office = null; + debug = param.getBool("DebugIsActive"); + + + //get Job-Descriptions + System.out.print("Getting Descriptions for Job: " + job + " from "); + + DescEntry[] entries = dg.getDescriptionFor(job, + (String) param.get( + "DescriptionPath"), + debug); + + if (entries == null) + { + System.out.println("Couldn't get Description for Job"); + + return false; + } + + String ExclusionFile = (String) param.get("ExclusionList"); + Vector exclusions = null; + + if (ExclusionFile != null) + { + exclusions = getExclusionList(ExclusionFile, debug); + } + + String conStr = (String) param.get("ConnectionString"); + System.out.println(""); + System.out.print("> Connecting the Office "); + System.out.println("With " + conStr); + + for (int l = 0; l < entries.length; l++) + { + if (entries[l].hasErrorMsg) + { + System.out.println(entries[l].ErrorMsg); + + continue; + } + + office = new OfficeProvider(); + + XMultiServiceFactory msf = (XMultiServiceFactory) office.getManager( + param); + + if (msf == null) + { + return false; + } + + param.put("ServiceFactory", msf); + + DescEntry entry = entries[l]; + + //get some helper classes + Summarizer sumIt = new Summarizer(); + DynamicClassLoader dcl = new DynamicClassLoader(); + + TestCase tCase = null; + + tCase = (TestCase) new BasicTestCase(entry); + + if (tCase == null) + { + sumIt.summarizeDown(entry, entry.ErrorMsg); + + LogWriter sumObj = OutProducerFactory.createOutProducer(param); + sumObj.initialize(entry, true); + sumObj.summary(entry); + + continue; + } + + System.out.println("Creating: " + tCase.getObjectName()); + + LogWriter log = (LogWriter) dcl.getInstance( + (String) param.get("LogWriter")); + log.initialize(entry, true); + entry.UserDefinedParams = param; + tCase.setLogWriter((PrintWriter) log); + + try + { + tCase.initializeTestCase(param); + } + catch (RuntimeException e) + { + helper.ProcessHandler ph = (helper.ProcessHandler) param.get( + "AppProvider"); + + if (ph != null) + { + OfficeWatcher ow = (OfficeWatcher) param.get("Watcher"); + + if ((ow != null) && ow.isAlive()) + { + ow.finish = true; + } + + ph.kill(); + shortWait(5000); + } + + continue; + } + + TestEnvironment tEnv = tCase.getTestEnvironment(param); + + if (tEnv == null) + { + sumIt.summarizeDown(entry, "Unable to create testcase"); + + LogWriter sumObj = OutProducerFactory.createOutProducer(param); + sumObj.initialize(entry, true); + sumObj.summary(entry); + + helper.ProcessHandler ph = (helper.ProcessHandler) param.get( + "AppProvider"); + + if (ph != null) + { + OfficeWatcher ow = (OfficeWatcher) param.get("Watcher"); + + if ((ow != null) && ow.isAlive()) + { + ow.finish = true; + } + + ph.kill(); + shortWait(5000); + } + + continue; + } + + System.out.println("created " + tCase.getObjectName()); + + for (int j = 0; j < entry.SubEntryCount; j++) + { + if (!entry.SubEntries[j].isToTest) + { + Summarizer.summarizeDown(entry.SubEntries[j], + "not part of the job"); + + continue; + } + + if ((exclusions != null) && + (exclusions.contains(entry.SubEntries[j].longName))) + { + Summarizer.summarizeDown(entry.SubEntries[j], + "known issue"); + + continue; + } + + System.out.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()) + { + helper.ProcessHandler ph = (helper.ProcessHandler) param.get( + "AppProvider"); + + if (ph != null) + { + office.closeExistingOffice(param, true); + shortWait(5000); + } + + tEnv = getEnv(entry, param); + } + + BasicIfcTest ifc = null; + lib.TestResult res = null; + ifc = new BasicIfcTest(entry.SubEntries[j].longName); + res = ifc.run(entry.SubEntries[j], tEnv, param); + + sumIt.summarizeUp(entry.SubEntries[j]); + + LogWriter sumIfc = OutProducerFactory.createOutProducer(param); + + sumIfc.initialize(entry.SubEntries[j], true); + sumIfc.summary(entry.SubEntries[j]); + } + + try + { + tCase.cleanupTestCase(param); + } + catch (Exception e) + { + log.println("TestCase already gone"); + + helper.ProcessHandler ph = (helper.ProcessHandler) param.get( + "AppProvider"); + + if (ph != null) + { + office.closeExistingOffice(param, true); + shortWait(5000); + } + } + + sumIt.summarizeUp(entry); + + LogWriter sumObj = OutProducerFactory.createOutProducer(param); + sumObj.initialize(entry, true); + sumObj.summary(entry); + } + + if (entries.length > 1) + { + System.out.println(); + + int counter = 0; + System.out.println( + "Failures that appeared during scenario execution:"); + + for (int i = 0; i < entries.length; i++) + { + if (!entries[i].State.endsWith("OK")) + { + System.out.println("\t " + entries[i].longName); + counter++; + } + } + + System.out.println(counter + " of " + entries.length + + " tests failed"); + } + + helper.ProcessHandler ph = (helper.ProcessHandler) param.get( + "AppProvider"); + + if (ph != null) + { + office.closeExistingOffice(param, true); + } + + return true; + } + + protected TestEnvironment getEnv(DescEntry entry, TestParameters param) + { + DynamicClassLoader dcl = new DynamicClassLoader(); + String officeProviderName = (String) param.get("OfficeProvider"); + AppProvider office = (AppProvider) dcl.getInstance(officeProviderName); + + if (office == null) + { + System.out.println("ERROR: Wrong parameter 'OfficeProvider', " + + " it cannot be instantiated."); + System.exit(-1); + } + + XMultiServiceFactory msf = (XMultiServiceFactory) office.getManager( + param); + + if (msf == null) + { + return null; + } + + param.put("ServiceFactory", msf); + + TestCase tCase = (TestCase) new BasicTestCase(entry); + + System.out.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 (java.lang.RuntimeException e) + { + System.out.println(e.getMessage()); + + helper.ProcessHandler ph = (helper.ProcessHandler) param.get( + "AppProvider"); + + if (ph != null) + { + office.closeExistingOffice(param, true); + shortWait(5000); + } + + entry.ErrorMsg = e.getMessage(); + entry.hasErrorMsg = true; + } + + return tEnv; + } + + protected void shortWait(int millis) + { + try + { + Thread.sleep(millis); + } + catch (java.lang.InterruptedException ie) + { + } + } + + protected Vector getExclusionList(String url, boolean debug) + { + Vector entryList = new Vector(); + String line = "#"; + BufferedReader exclusion = null; + + try + { + exclusion = new BufferedReader(new FileReader(url)); + } + catch (java.io.FileNotFoundException fnfe) + { + if (debug) + { + System.out.println("Couldn't find file " + url); + } + + return entryList; + } + + while (line != null) + { + try + { + if (!line.startsWith("#")) + { + entryList.add(line); + } + + line = exclusion.readLine(); + } + catch (java.io.IOException ioe) + { + if (debug) + { + System.out.println( + "Exception while reading exclusion list"); + } + + return entryList; + } + } + + try + { + exclusion.close(); + } + catch (java.io.IOException ioe) + { + if (debug) + { + System.out.println("Couldn't close file " + url); + } + + return entryList; + } + + return entryList; + } +} diff --git a/qadevOOo/runner/base/java_cmp.java b/qadevOOo/runner/base/java_cmp.java new file mode 100644 index 000000000000..c25de6efc4a9 --- /dev/null +++ b/qadevOOo/runner/base/java_cmp.java @@ -0,0 +1,83 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package base; + + + + +/** + * + * this class handles tests written in java without running an Office with + * own bootstrapping of UNO + */ +public class java_cmp implements TestBase { + + private TestBase mWrappedTestBase = new java_fat(); + + public boolean executeTest(lib.TestParameters param) { + param.put("OfficeProvider", "helper.UnoProvider"); + return mWrappedTestBase.executeTest(param); + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qadevOOo/runner/base/java_complex.java b/qadevOOo/runner/base/java_complex.java new file mode 100644 index 000000000000..946e14b42934 --- /dev/null +++ b/qadevOOo/runner/base/java_complex.java @@ -0,0 +1,170 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +package base; + +import complexlib.ComplexTestCase; +import util.DynamicClassLoader; +import share.DescGetter; +import stats.OutProducerFactory; +import helper.ComplexDescGetter; +import helper.AppProvider; +import helper.CfgParser; +import share.DescEntry; +import share.LogWriter; +import stats.Summarizer; +import lib.TestParameters; +import util.PropertyName; + +/** + * Test base for executing a java complex test. + * @see base.TestBase + */ +public class java_complex implements TestBase +{ + + /** + * This function executes the complex tests given as parameter "-o" or "TestJob". It querys for the correspond class + * and crates the JobDescription. + * @param param + * @return true of all tests run successfuly, esle false + */ + public boolean executeTest(TestParameters param) + { + + // is there an ini file for the complex tests defined? + String complexIniFileName = ((String) param.get("ComplexIni")); + if (complexIniFileName != null) + { + CfgParser ini = new CfgParser(complexIniFileName); + ini.getIniParameters(param); + } + + // get the test job + String testJob = ((String) param.get("TestJob")); + + DescGetter descGetter = new ComplexDescGetter(); + // get the test jobs + DescEntry[] entries = descGetter.getDescriptionFor(testJob, null, true); + return executeTest(param, entries); + + } + + /** + * This function run the given DescEntry[] as ComplexTest + * @param param + * @param entries + * @return true of all tests run successfuly, esle false + */ + public boolean executeTest(TestParameters param, DescEntry[] entries) + { + // is there an ini file for the complex tests defined? + String complexIniFileName = ((String) param.get("ComplexIni")); + if (complexIniFileName != null) + { + CfgParser ini = new CfgParser(complexIniFileName); + ini.getIniParameters(param); + } + + DynamicClassLoader dcl = new DynamicClassLoader(); + ComplexTestCase testClass = null; + boolean returnVal = true; + +// the concept of the TimeOut depends on runner logs. If the runner log, +// for exmaple to start a test method, the timeout was restet. This is not +// while the test itself log something like "open docuent...". +// An property of complex test could be that it have only one test method +// which works for serveral minutes. Ih this case the TimeOut get not trigger +// and the office was killed. +// In complex tests just use "ThreadTimeOut" as timout. + + // param.put("TimeOut", new Integer(0)); + + for (int i = 0; i < entries.length; i++) + { + + if (entries[i] == null) + { + continue; + } + String iniName = entries[i].longName; + iniName = iniName.replace('.', '/'); + CfgParser ini = new CfgParser(iniName + ".props"); + ini.getIniParameters(param); + + LogWriter log = (LogWriter) dcl.getInstance((String) param.get("LogWriter")); + + AppProvider office = null; + if (!param.getBool("NoOffice")) + { + try + { + office = (AppProvider) dcl.getInstance("helper.OfficeProvider"); + Object msf = office.getManager(param); + if (msf == null) + { + returnVal = false; + continue; + } + param.put("ServiceFactory", msf); + } + catch (IllegalArgumentException e) + { + office = null; + } + } + log.initialize(entries[i], param.getBool(PropertyName.LOGGING_IS_ACTIVE)); + entries[i].Logger = log; + + // create an instance + try + { + testClass = (ComplexTestCase) dcl.getInstance(entries[i].longName); + } + catch (java.lang.Exception e) + { + e.printStackTrace(); + return false; + } + testClass.executeMethods(entries[i], param); + + Summarizer sum = new Summarizer(); + sum.summarizeUp(entries[i]); + + if (office != null) + { + office.closeExistingOffice(param, false); + } + + LogWriter out = OutProducerFactory.createOutProducer(param); + + out.initialize(entries[i], true); + out.summary(entries[i]); + returnVal &= entries[i].State.endsWith("OK"); + } + return returnVal; + } +} diff --git a/qadevOOo/runner/base/java_fat.java b/qadevOOo/runner/base/java_fat.java new file mode 100644 index 000000000000..4dd3ad51a817 --- /dev/null +++ b/qadevOOo/runner/base/java_fat.java @@ -0,0 +1,602 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +package base; + +import com.sun.star.lang.XMultiServiceFactory; + +import helper.APIDescGetter; +import helper.AppProvider; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.PrintWriter; + +import java.util.Vector; + +import lib.MultiMethodTest; +import lib.TestCase; +import lib.TestEnvironment; +import lib.TestParameters; +import lib.TestResult; + +import share.DescEntry; +import share.DescGetter; +import share.LogWriter; + +import stats.OutProducerFactory; +import stats.Summarizer; + +import util.DynamicClassLoader; + +/** + * + * this class handles tests written in java and running on a fat Office + */ +public class java_fat implements TestBase +{ + + private static boolean m_isDebug = false; + private static boolean keepdocument = false; + private static boolean logging = true; + private static boolean newOffice = false; + private DynamicClassLoader m_aDynamicClassLoader = null; + + private lib.TestParameters m_aParams; + private AppProvider m_aOffice; + + public boolean executeTest(lib.TestParameters _aParams) + { + m_aParams = _aParams; + + m_aDynamicClassLoader = new DynamicClassLoader(); + + DescGetter dg = new APIDescGetter(); + String job = (String) m_aParams.get("TestJob"); + String ExclusionFile = (String) m_aParams.get("ExclusionList"); + Vector exclusions = null; + boolean retValue = true; + m_isDebug = m_aParams.getBool("DebugIsActive"); + logging = m_aParams.getBool("LoggingIsActive"); + keepdocument = m_aParams.getBool("KeepDocument"); + newOffice = m_aParams.getBool(util.PropertyName.NEW_OFFICE_INSTANCE); + if (keepdocument) + { + System.setProperty("KeepDocument", "true"); + } + if (ExclusionFile != null) + { + exclusions = getExclusionList(ExclusionFile, m_isDebug); + } + //get Job-Descriptions + // System.out.println("Getting Descriptions for Job: " + job); + + String sDescriptionPath = (String) m_aParams.get("DescriptionPath"); + DescEntry[] entries = dg.getDescriptionFor(job, sDescriptionPath, m_isDebug); + + // System.out.println(); + + if (entries == null) + { + System.out.println("Couldn't get Description for Job: " + job); + + return false; + } + +// String officeProviderName = (String) m_aParams.get("OfficeProvider"); +// AppProvider office = (AppProvider) m_aDynamicClassLoader.getInstance(officeProviderName); +// +// if (office == null) { +// System.out.println("ERROR: Wrong parameter 'OfficeProvider', " + +// " it cannot be instantiated."); +// System.exit(-1); +// } + + m_aOffice = startOffice(m_aParams); + + boolean firstRun = true; + + // Run through all entries (e.g. sw.SwXBookmark.*) + + for (int l = 0; l < entries.length; l++) + { + DescEntry entry = entries[l]; + + if (entry == null) + { + continue; + } + + if (entry.hasErrorMsg) + { + System.out.println(entries[l].ErrorMsg); + retValue = false; + continue; + } + + if (!firstRun && newOffice) + { + if (!m_aOffice.closeExistingOffice(m_aParams, true)) + { + m_aOffice.disposeManager(m_aParams); + } + startOffice(m_aParams); + } + firstRun = false; + + XMultiServiceFactory msf = (XMultiServiceFactory) m_aParams.getMSF(); + + if (msf == null) + { + retValue = false; + continue; + } + + //get some helper classes + Summarizer sumIt = new Summarizer(); + TestCase tCase = getTestCase(entry); + if (tCase == null) + { + continue; + } + +// if (m_isDebug) +// { +// System.out.println("sleeping 2 seconds.."); +// } + util.utils.shortWait(2000); + + System.out.println("Creating: " + entry.entryName); + + LogWriter log = (LogWriter) m_aDynamicClassLoader.getInstance((String) m_aParams.get("LogWriter")); + log.initialize(entry, logging); + entry.UserDefinedParams = m_aParams; + + tCase.setLogWriter((PrintWriter) log); + tCase.initializeTestCase(m_aParams); + + TestEnvironment tEnv = getTestEnvironment(tCase, entry); + if (tEnv == null) + { + continue; + } + + final String sObjectName = tCase.getObjectName(); + // System.out.println(sObjectName + " recreated "); + + for (int j = 0; j < entry.SubEntryCount; j++) + { + DescEntry aSubEntry = entry.SubEntries[j]; + final boolean bIsToTest = aSubEntry.isToTest; + if (!bIsToTest) + { + Summarizer.summarizeDown(aSubEntry, "not part of the job"); + continue; + } + + // final String sEntryName = aSubEntry.entryName; + final String sLongEntryName = aSubEntry.longName; + + if ((exclusions != null) && (exclusions.contains(sLongEntryName))) + { + Summarizer.summarizeDown(aSubEntry, "known issue"); + continue; + } + + // System.out.println("running: '" + sLongEntryName + "' testcode: [" + sEntryName + "]"); + // this will shown in test itself + + LogWriter ifclog = (LogWriter) m_aDynamicClassLoader.getInstance( (String) m_aParams.get("LogWriter")); + + ifclog.initialize(aSubEntry, logging); + aSubEntry.UserDefinedParams = m_aParams; + aSubEntry.Logger = ifclog; + + if ((tEnv == null) || tEnv.isDisposed()) + { + closeExistingOffice(); + tEnv = getEnv(entry, m_aParams); + tCase = tEnv.getTestCase(); + } + + // MultiMethodTest ifc = null; + lib.TestResult res = null; + + // run the interface test twice if it failed. + int countInterfaceTestRun = 0; + boolean finished = false; + while (!finished) + { + try + { + countInterfaceTestRun++; + finished = true; + res = executeInterfaceTest(aSubEntry, tEnv, m_aParams); + } + catch (IllegalArgumentException iae) + { + System.out.println("Couldn't load class " + aSubEntry.entryName); + System.out.println("**** " + iae.getMessage() + " ****"); + Summarizer.summarizeDown(aSubEntry, iae.getMessage()); + } + catch (java.lang.NoClassDefFoundError iae) + { + System.out.println("Couldn't load class " + aSubEntry.entryName); + System.out.println("**** " + iae.getMessage() + " ****"); + Summarizer.summarizeDown(aSubEntry, iae.getMessage()); + } + catch (java.lang.RuntimeException e) + { + closeExistingOffice(); + tEnv = getEnv(entry, m_aParams); + tCase = tEnv.getTestCase(); + if (countInterfaceTestRun < 2) + { + finished = false; + } + else + { + Summarizer.summarizeDown(aSubEntry, e.toString() + ".FAILED"); + } + } + } + setState(aSubEntry, res); + + sumIt.summarizeUp(aSubEntry); + + LogWriter sumIfc = OutProducerFactory.createOutProducer(m_aParams); + aSubEntry.UserDefinedParams = m_aParams; + sumIfc.initialize(aSubEntry, logging); + sumIfc.summary(aSubEntry); + } + + try + { + if (!keepdocument) + { + tCase.cleanupTestCase(m_aParams); + } + } + catch (Exception e) + { + System.err.println( "couldn't cleanup:" + e.toString() ); + } + catch (java.lang.NoClassDefFoundError e) + { + System.err.println( "couldn't cleanup:" + e.toString() ); + } + + sumIt.summarizeUp(entry); + + LogWriter sumObj = OutProducerFactory.createOutProducer(m_aParams); + + sumObj.initialize(entry, logging); + sumObj.summary(entry); + } + + if (entries.length > 0) + { + System.out.println(); + + int counter = 0; + System.out.println("Failures that appeared during scenario execution:"); + + for (int i = 0; i < entries.length; i++) + { + final String sState = entries[i].State; + if (!sState.endsWith("OK")) + { + System.out.println("\t " + entries[i].longName); + counter++; + } + } + + System.out.println(counter + " of " + entries.length + " tests failed"); + if (counter != 0) { + retValue = false; + } + } + + closeExistingOffice(); + return retValue; + } + +// + private TestEnvironment getTestEnvironment(TestCase tCase, DescEntry entry) + { + TestEnvironment tEnv = null; + + try + { + tEnv = tCase.getTestEnvironment(m_aParams); + } + catch (Exception e) + { + System.out.println("Exception while creating " + tCase.getObjectName()); + System.out.println("Message " + e.getMessage()); + e.printStackTrace(); + tEnv = null; + } + catch (java.lang.UnsatisfiedLinkError e) + { + System.out.println("Exception while creating " + tCase.getObjectName()); + System.out.println("Message " + e.getMessage()); + tEnv = null; + } + catch (java.lang.NoClassDefFoundError e) + { + System.out.println("Exception while creating " + tCase.getObjectName()); + System.out.println("Message " + e.getMessage()); + tEnv = null; + } + + if (tEnv == null) + { + Summarizer.summarizeDown(entry, "Couldn't create " + tCase.getObjectName()); + + LogWriter sumObj = OutProducerFactory.createOutProducer(m_aParams); + entry.UserDefinedParams = m_aParams; + sumObj.initialize(entry, logging); + sumObj.summary(entry); + } + return tEnv; + } + // ------------------------------------------------------------------------- + private TestCase getTestCase(DescEntry _aEntry) + { + TestCase tCase = null; + + try + { + tCase = (TestCase) m_aDynamicClassLoader.getInstance("mod._" + _aEntry.entryName); + } + catch (java.lang.IllegalArgumentException ie) + { + _aEntry.ErrorMsg = ie.getMessage(); + _aEntry.hasErrorMsg = true; + } + catch (java.lang.NoClassDefFoundError ie) + { + _aEntry.ErrorMsg = ie.getMessage(); + _aEntry.hasErrorMsg = true; + } + + if (tCase == null) + { + Summarizer.summarizeDown(_aEntry, _aEntry.ErrorMsg); + + LogWriter sumObj = OutProducerFactory.createOutProducer(m_aParams); + _aEntry.UserDefinedParams = m_aParams; + sumObj.initialize(_aEntry, logging); + sumObj.summary(_aEntry); + } + return tCase; +} + + private void setState(DescEntry aSubEntry, lib.TestResult res) + { + if (res != null) + { + for (int k = 0; k < aSubEntry.SubEntryCount; k++) + { + DescEntry aSubSubEntry = aSubEntry.SubEntries[k]; + if (res.hasMethod( aSubSubEntry.entryName)) + { + aSubSubEntry.State = res.getStatusFor(aSubSubEntry.entryName).toString(); + } + } + } + } + + private TestEnvironment getEnv(DescEntry entry, TestParameters param) + { +// if (m_aDynamicClassLoader == null) +// m_aDynamicClassLoader = new DynamicClassLoader(); +// String officeProviderName = (String) m_aParams.get("OfficeProvider"); +// AppProvider office = (AppProvider) m_aDynamicClassLoader.getInstance(officeProviderName); +// +// if (office == null) { +// System.out.println("ERROR: Wrong parameter 'OfficeProvider', " + +// " it cannot be instantiated."); +// System.exit(-1); +// } +// +// XMultiServiceFactory msf = (XMultiServiceFactory) office.getManager( +// m_aParams); +// +// if (msf == null) { +// return null; +// } +// +// m_aParams.put("ServiceFactory", msf); + + // AppProvider office = startOffice(m_aParams); + + TestCase tCase = null; + + try + { + tCase = (TestCase) m_aDynamicClassLoader.getInstance("mod._" + entry.entryName); + } + catch (java.lang.IllegalArgumentException ie) + { + entry.ErrorMsg = ie.getMessage(); + entry.hasErrorMsg = true; + } + catch (java.lang.NoClassDefFoundError ie) + { + entry.ErrorMsg = ie.getMessage(); + entry.hasErrorMsg = true; + } + + System.out.println("Creating: " + entry.entryName); + + entry.UserDefinedParams = param; + + LogWriter log = (LogWriter) m_aDynamicClassLoader.getInstance((String) param.get("LogWriter")); + log.initialize(entry, logging); + tCase.setLogWriter((PrintWriter) log); + + try + { + tCase.initializeTestCase(param); + return tCase.getTestEnvironment(param); + } + catch (com.sun.star.lang.DisposedException de) + { + System.out.println("Office disposed"); + closeExistingOffice(); + throw de; + } + catch (lib.StatusException e) + { + System.out.println(e.getMessage()); + + closeExistingOffice(); + + entry.ErrorMsg = e.getMessage(); + entry.hasErrorMsg = true; + throw e; + } + } + + private void closeExistingOffice() + { + helper.ProcessHandler ph = (helper.ProcessHandler) m_aParams.get("AppProvider"); + + if (ph != null) + { + m_aOffice.closeExistingOffice(m_aParams, true); + util.utils.shortWait(5000); + } + + } + +// private void shortWait(int millis) +// { +// try +// { +// Thread.sleep(millis); +// } +// catch (java.lang.InterruptedException ie) +// { +// } +// } + + private Vector getExclusionList(String url, boolean debug) + { + Vector entryList = new Vector(); + String line = "#"; + BufferedReader exclusion = null; + + try + { + exclusion = new BufferedReader(new FileReader(url)); + } + catch (java.io.FileNotFoundException fnfe) + { + if (debug) + { + System.out.println("Couldn't find file " + url); + } + + return entryList; + } + + while (line != null) + { + try + { + if (!line.startsWith("#") && (line.length() > 1)) + { + entryList.add(line.trim()); + } + + line = exclusion.readLine(); + } + catch (java.io.IOException ioe) + { + if (debug) + { + System.out.println("Exception while reading exclusion list"); + } + + return entryList; + } + } + + try + { + exclusion.close(); + } + catch (java.io.IOException ioe) + { + if (debug) + { + System.out.println("Couldn't close file " + url); + } + + return entryList; + } + + return entryList; + } + + private TestResult executeInterfaceTest( + DescEntry entry, TestEnvironment tEnv, TestParameters param) + throws IllegalArgumentException, java.lang.NoClassDefFoundError + { + MultiMethodTest ifc = (MultiMethodTest) m_aDynamicClassLoader.getInstance(entry.entryName); + return ifc.run(entry, tEnv, param); + } + + private AppProvider startOffice(lib.TestParameters param) + { + + if (m_aDynamicClassLoader == null) + { + m_aDynamicClassLoader = new DynamicClassLoader(); + } + + String officeProviderName = (String) param.get("OfficeProvider"); + AppProvider office = (AppProvider) m_aDynamicClassLoader.getInstance(officeProviderName); + + if (office == null) + { + System.out.println("ERROR: Wrong parameter 'OfficeProvider', " + " it cannot be instantiated."); + System.exit(-1); + } + + XMultiServiceFactory msf = (XMultiServiceFactory) office.getManager(param); + + if (msf != null) + { + param.put("ServiceFactory", msf); + } + + return office; + } +} diff --git a/qadevOOo/runner/base/java_fat_service.java b/qadevOOo/runner/base/java_fat_service.java new file mode 100644 index 000000000000..0c8fd17e43ec --- /dev/null +++ b/qadevOOo/runner/base/java_fat_service.java @@ -0,0 +1,267 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 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) {} +// } + +} diff --git a/qadevOOo/runner/base/makefile.mk b/qadevOOo/runner/base/makefile.mk new file mode 100644 index 000000000000..17fb497c0c8b --- /dev/null +++ b/qadevOOo/runner/base/makefile.mk @@ -0,0 +1,52 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=..$/.. + +PRJNAME = OOoRunner +PACKAGE = base +TARGET = runner_base + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Files -------------------------------------------------------- + +JARFILES = ridl.jar jurt.jar unoil.jar +JAVAFILES = TestBase.java \ + java_complex.java \ + java_fat.java \ + java_fat_service.java \ + java_cmp.java \ + basic_fat.java + +JAVACLASSFILES= $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class) + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk |