1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir package base; 29*cdf0e10cSrcweir 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir import java.io.PrintWriter; 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir import lib.TestParameters; 34*cdf0e10cSrcweir import lib.TestCase; 35*cdf0e10cSrcweir import lib.MultiMethodTest; 36*cdf0e10cSrcweir import lib.TestEnvironment; 37*cdf0e10cSrcweir import util.DynamicClassLoader; 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir import share.DescEntry; 42*cdf0e10cSrcweir import share.DescGetter; 43*cdf0e10cSrcweir import helper.APIDescGetter; 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir import share.LogWriter; 46*cdf0e10cSrcweir import stats.Summarizer; 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir /** 49*cdf0e10cSrcweir * this class handles tests written in java and running on a fat Office 50*cdf0e10cSrcweir * with the runner as a service. 51*cdf0e10cSrcweir */ 52*cdf0e10cSrcweir public class java_fat_service implements TestBase { 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir static protected boolean debug = false; 55*cdf0e10cSrcweir protected LogWriter log = null; 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir public boolean executeTest(lib.TestParameters param) { 58*cdf0e10cSrcweir DynamicClassLoader dcl = new DynamicClassLoader(); 59*cdf0e10cSrcweir log = (LogWriter)dcl.getInstance((String)param.get("LogWriter")); 60*cdf0e10cSrcweir debug = ((Boolean) param.get("DebugIsActive")).booleanValue(); 61*cdf0e10cSrcweir 62*cdf0e10cSrcweir DescGetter dg = new APIDescGetter(); 63*cdf0e10cSrcweir String job = (String) param.get("TestJob"); 64*cdf0e10cSrcweir boolean retValue = true; 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir //get Job-Descriptions 67*cdf0e10cSrcweir log.println("Getting Descriptions for Job: "+job); 68*cdf0e10cSrcweir DescEntry[] entries = dg.getDescriptionFor(job, 69*cdf0e10cSrcweir (String) param.get("DescriptionPath"),debug); 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir if (entries == null ) { 72*cdf0e10cSrcweir log.println("Couldn't get Description for Job"); 73*cdf0e10cSrcweir return false; 74*cdf0e10cSrcweir } 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir String conStr = (String) param.get("ConnectionString"); 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir XMultiServiceFactory msf = (XMultiServiceFactory)param.getMSF(); 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir for (int l=0;l<entries.length;l++) { 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir if (entries[l] == null ) { 83*cdf0e10cSrcweir continue; 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir if (entries[l].hasErrorMsg) { 87*cdf0e10cSrcweir log.println(entries[l].ErrorMsg); 88*cdf0e10cSrcweir continue; 89*cdf0e10cSrcweir } 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir DescEntry entry = entries[l]; 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir //get some helper classes 94*cdf0e10cSrcweir Summarizer sumIt = new Summarizer(); 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir TestCase tCase = null; 97*cdf0e10cSrcweir try { 98*cdf0e10cSrcweir tCase = (TestCase) 99*cdf0e10cSrcweir dcl.getInstance("mod._"+entry.entryName); 100*cdf0e10cSrcweir } catch (java.lang.IllegalArgumentException ie) { 101*cdf0e10cSrcweir entry.ErrorMsg=ie.getMessage(); 102*cdf0e10cSrcweir entry.hasErrorMsg=true; 103*cdf0e10cSrcweir } 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir if (tCase == null) { 106*cdf0e10cSrcweir sumIt.summarizeDown(entry,entry.ErrorMsg); 107*cdf0e10cSrcweir LogWriter sumObj = (LogWriter)dcl.getInstance( 108*cdf0e10cSrcweir (String)param.get("OutProducer")); 109*cdf0e10cSrcweir sumObj.initialize(entry,true); 110*cdf0e10cSrcweir entry.UserDefinedParams = param; 111*cdf0e10cSrcweir sumObj.summary(entry); 112*cdf0e10cSrcweir continue; 113*cdf0e10cSrcweir } 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir log.println("Creating: "+tCase.getObjectName()); 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir log.initialize(entry,true); 118*cdf0e10cSrcweir entry.UserDefinedParams = param; 119*cdf0e10cSrcweir TestEnvironment tEnv = null; 120*cdf0e10cSrcweir try { 121*cdf0e10cSrcweir tCase.setLogWriter((PrintWriter) log); 122*cdf0e10cSrcweir tCase.initializeTestCase(param); 123*cdf0e10cSrcweir tEnv = tCase.getTestEnvironment(param); 124*cdf0e10cSrcweir } catch (Exception e) { 125*cdf0e10cSrcweir log.println("Exception while creating "+tCase.getObjectName()); 126*cdf0e10cSrcweir log.println("Exception: " + e); 127*cdf0e10cSrcweir log.println("Message "+e.getMessage()); 128*cdf0e10cSrcweir tEnv = null; 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir if (tEnv == null) { 131*cdf0e10cSrcweir sumIt.summarizeDown(entry,"Couldn't create "+tCase.getObjectName()); 132*cdf0e10cSrcweir LogWriter sumObj = (LogWriter)dcl.getInstance( 133*cdf0e10cSrcweir (String)param.get("OutProducer")); 134*cdf0e10cSrcweir sumObj.initialize(entry,true); 135*cdf0e10cSrcweir entry.UserDefinedParams = param; 136*cdf0e10cSrcweir sumObj.summary(entry); 137*cdf0e10cSrcweir continue; 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir log.println("Created "+tCase.getObjectName()+"\n"); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir for (int j=0;j<entry.SubEntryCount;j++) { 142*cdf0e10cSrcweir if (!entry.SubEntries[j].isToTest) { 143*cdf0e10cSrcweir Summarizer.summarizeDown(entry.SubEntries[j],"not part of the job"); 144*cdf0e10cSrcweir continue; 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir log.println("running: "+entry.SubEntries[j].entryName); 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir LogWriter ifclog = (LogWriter)dcl.getInstance( 150*cdf0e10cSrcweir (String)param.get("LogWriter")); 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir ifclog.initialize(entry.SubEntries[j],true); 153*cdf0e10cSrcweir entry.SubEntries[j].UserDefinedParams = param; 154*cdf0e10cSrcweir entry.SubEntries[j].Logger = ifclog; 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir if (tEnv == null || tEnv.isDisposed()) { 157*cdf0e10cSrcweir tEnv = getEnv(entry,param); 158*cdf0e10cSrcweir } 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir MultiMethodTest ifc = null; 161*cdf0e10cSrcweir lib.TestResult res = null; 162*cdf0e10cSrcweir try { 163*cdf0e10cSrcweir ifc = (MultiMethodTest) dcl.getInstance( 164*cdf0e10cSrcweir entry.SubEntries[j].entryName); 165*cdf0e10cSrcweir res = ifc.run(entry.SubEntries[j],tEnv,param); 166*cdf0e10cSrcweir } catch (IllegalArgumentException iae) { 167*cdf0e10cSrcweir log.println("Couldn't load class "+entry.SubEntries[j].entryName); 168*cdf0e10cSrcweir log.println("**** "+iae.getMessage()+" ****"); 169*cdf0e10cSrcweir Summarizer.summarizeDown(entry.SubEntries[j],iae.getMessage()); 170*cdf0e10cSrcweir } catch (java.lang.RuntimeException e) { 171*cdf0e10cSrcweir tEnv = getEnv(entry,param); 172*cdf0e10cSrcweir ifc = (MultiMethodTest) dcl.getInstance( 173*cdf0e10cSrcweir entry.SubEntries[j].entryName); 174*cdf0e10cSrcweir if ((tEnv != null) && (ifc != null)) { 175*cdf0e10cSrcweir res = ifc.run(entry.SubEntries[j],tEnv,param); 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir else 178*cdf0e10cSrcweir { 179*cdf0e10cSrcweir res = null; 180*cdf0e10cSrcweir } 181*cdf0e10cSrcweir } 182*cdf0e10cSrcweir if (res != null) { 183*cdf0e10cSrcweir for (int k=0;k<entry.SubEntries[j].SubEntryCount;k++) { 184*cdf0e10cSrcweir if (res.hasMethod(entry.SubEntries[j].SubEntries[k].entryName)) { 185*cdf0e10cSrcweir entry.SubEntries[j].SubEntries[k].State= 186*cdf0e10cSrcweir res.getStatusFor(entry.SubEntries[j].SubEntries[k].entryName).toString(); 187*cdf0e10cSrcweir } 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir } 190*cdf0e10cSrcweir sumIt.summarizeUp(entry.SubEntries[j]); 191*cdf0e10cSrcweir 192*cdf0e10cSrcweir LogWriter sumIfc = (LogWriter)dcl.getInstance( 193*cdf0e10cSrcweir (String)param.get("OutProducer")); 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir sumIfc.initialize(entry.SubEntries[j],true); 196*cdf0e10cSrcweir entry.SubEntries[j].UserDefinedParams = param; 197*cdf0e10cSrcweir sumIfc.summary(entry.SubEntries[j]); 198*cdf0e10cSrcweir } 199*cdf0e10cSrcweir try { 200*cdf0e10cSrcweir tCase.cleanupTestCase(param); 201*cdf0e10cSrcweir } catch (Exception e) { 202*cdf0e10cSrcweir e.printStackTrace((PrintWriter)log); 203*cdf0e10cSrcweir } 204*cdf0e10cSrcweir sumIt.summarizeUp(entry); 205*cdf0e10cSrcweir LogWriter sumObj = (LogWriter)dcl.getInstance( 206*cdf0e10cSrcweir (String)param.get("OutProducer")); 207*cdf0e10cSrcweir sumObj.initialize(entry,true); 208*cdf0e10cSrcweir sumObj.summary(entry); 209*cdf0e10cSrcweir } 210*cdf0e10cSrcweir if (entries.length > 1) { 211*cdf0e10cSrcweir log.println(""); 212*cdf0e10cSrcweir int counter = 0; 213*cdf0e10cSrcweir log.println("Failures that appeared during scenario execution:"); 214*cdf0e10cSrcweir for (int i=0;i<entries.length;i++) { 215*cdf0e10cSrcweir if (! entries[i].State.endsWith("OK")) { 216*cdf0e10cSrcweir log.println("\t "+entries[i].longName); 217*cdf0e10cSrcweir counter++; 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir } 220*cdf0e10cSrcweir log.println(counter +" of "+entries.length + " tests failed" ); 221*cdf0e10cSrcweir } 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir return retValue; 224*cdf0e10cSrcweir } 225*cdf0e10cSrcweir 226*cdf0e10cSrcweir protected TestEnvironment getEnv(DescEntry entry, TestParameters param) { 227*cdf0e10cSrcweir DynamicClassLoader dcl = new DynamicClassLoader(); 228*cdf0e10cSrcweir log = (LogWriter)dcl.getInstance((String)param.get("LogWriter")); 229*cdf0e10cSrcweir XMultiServiceFactory msf = (XMultiServiceFactory)param.getMSF(); 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir TestCase tCase = null; 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir try 234*cdf0e10cSrcweir { 235*cdf0e10cSrcweir tCase = (TestCase) dcl.getInstance("mod._"+entry.entryName); 236*cdf0e10cSrcweir } 237*cdf0e10cSrcweir catch (java.lang.IllegalArgumentException ie) 238*cdf0e10cSrcweir { 239*cdf0e10cSrcweir entry.ErrorMsg=ie.getMessage(); 240*cdf0e10cSrcweir entry.hasErrorMsg=true; 241*cdf0e10cSrcweir } 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir log.println("Creating: "+tCase.getObjectName()); 244*cdf0e10cSrcweir // LogWriter log = (LogWriter)dcl.getInstance( (String)param.get("LogWriter")); 245*cdf0e10cSrcweir log.initialize(entry,true); 246*cdf0e10cSrcweir entry.UserDefinedParams = param; 247*cdf0e10cSrcweir tCase.setLogWriter((PrintWriter) log); 248*cdf0e10cSrcweir TestEnvironment tEnv = null; 249*cdf0e10cSrcweir try 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir tCase.initializeTestCase(param); 252*cdf0e10cSrcweir tEnv = tCase.getTestEnvironment(param); 253*cdf0e10cSrcweir } 254*cdf0e10cSrcweir catch (com.sun.star.lang.DisposedException de) 255*cdf0e10cSrcweir { 256*cdf0e10cSrcweir log.println("Office disposed"); 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir return tEnv; 259*cdf0e10cSrcweir } 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir // protected void shortWait(int millis) { 262*cdf0e10cSrcweir // try { 263*cdf0e10cSrcweir // Thread.sleep(millis); 264*cdf0e10cSrcweir // } catch (java.lang.InterruptedException ie) {} 265*cdf0e10cSrcweir // } 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir } 268