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