1ef39d40dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3ef39d40dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4ef39d40dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5ef39d40dSAndrew Rist  * distributed with this work for additional information
6ef39d40dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7ef39d40dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8ef39d40dSAndrew Rist  * "License"); you may not use this file except in compliance
9ef39d40dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10ef39d40dSAndrew Rist  *
11ef39d40dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12ef39d40dSAndrew Rist  *
13ef39d40dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14ef39d40dSAndrew Rist  * software distributed under the License is distributed on an
15ef39d40dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16ef39d40dSAndrew Rist  * KIND, either express or implied.  See the License for the
17ef39d40dSAndrew Rist  * specific language governing permissions and limitations
18ef39d40dSAndrew Rist  * under the License.
19ef39d40dSAndrew Rist  *
20ef39d40dSAndrew Rist  *************************************************************/
21ef39d40dSAndrew Rist 
22ef39d40dSAndrew Rist 
23cdf0e10cSrcweir package base;
24cdf0e10cSrcweir 
25cdf0e10cSrcweir import complexlib.ComplexTestCase;
26cdf0e10cSrcweir import util.DynamicClassLoader;
27cdf0e10cSrcweir import share.DescGetter;
28cdf0e10cSrcweir import stats.OutProducerFactory;
29cdf0e10cSrcweir import helper.ComplexDescGetter;
30cdf0e10cSrcweir import helper.AppProvider;
31cdf0e10cSrcweir import helper.CfgParser;
32cdf0e10cSrcweir import share.DescEntry;
33cdf0e10cSrcweir import share.LogWriter;
34cdf0e10cSrcweir import stats.Summarizer;
35cdf0e10cSrcweir import lib.TestParameters;
36cdf0e10cSrcweir import util.PropertyName;
37cdf0e10cSrcweir 
38cdf0e10cSrcweir /**
39cdf0e10cSrcweir  * Test base for executing a java complex test.
40cdf0e10cSrcweir  * @see base.TestBase
41cdf0e10cSrcweir  */
42cdf0e10cSrcweir public class java_complex implements TestBase
43cdf0e10cSrcweir {
44cdf0e10cSrcweir 
45cdf0e10cSrcweir     /**
46cdf0e10cSrcweir      * This function executes the complex tests given as parameter "-o" or "TestJob". It querys for the correspond class
47cdf0e10cSrcweir      * and crates the JobDescription.
48cdf0e10cSrcweir      * @param param
49*bb6af6bcSPedro Giffuni      * @return true of all tests run successfuly, else false
50cdf0e10cSrcweir      */
51cdf0e10cSrcweir     public boolean executeTest(TestParameters param)
52cdf0e10cSrcweir     {
53cdf0e10cSrcweir 
54cdf0e10cSrcweir         // is there an ini file for the complex tests defined?
55cdf0e10cSrcweir         String complexIniFileName = ((String) param.get("ComplexIni"));
56cdf0e10cSrcweir         if (complexIniFileName != null)
57cdf0e10cSrcweir         {
58cdf0e10cSrcweir             CfgParser ini = new CfgParser(complexIniFileName);
59cdf0e10cSrcweir             ini.getIniParameters(param);
60cdf0e10cSrcweir         }
61cdf0e10cSrcweir 
62cdf0e10cSrcweir         // get the test job
63cdf0e10cSrcweir         String testJob = ((String) param.get("TestJob"));
64cdf0e10cSrcweir 
65cdf0e10cSrcweir         DescGetter descGetter = new ComplexDescGetter();
66cdf0e10cSrcweir         // get the test jobs
67cdf0e10cSrcweir         DescEntry[] entries = descGetter.getDescriptionFor(testJob, null, true);
68cdf0e10cSrcweir         return executeTest(param, entries);
69cdf0e10cSrcweir 
70cdf0e10cSrcweir     }
71cdf0e10cSrcweir 
72cdf0e10cSrcweir     /**
73cdf0e10cSrcweir      * This function run the given DescEntry[] as ComplexTest
74cdf0e10cSrcweir      * @param param
75cdf0e10cSrcweir      * @param entries
76*bb6af6bcSPedro Giffuni      * @return true of all tests run successfuly, else false
77cdf0e10cSrcweir      */
78cdf0e10cSrcweir     public boolean executeTest(TestParameters param, DescEntry[] entries)
79cdf0e10cSrcweir     {
80cdf0e10cSrcweir         // is there an ini file for the complex tests defined?
81cdf0e10cSrcweir         String complexIniFileName = ((String) param.get("ComplexIni"));
82cdf0e10cSrcweir         if (complexIniFileName != null)
83cdf0e10cSrcweir         {
84cdf0e10cSrcweir             CfgParser ini = new CfgParser(complexIniFileName);
85cdf0e10cSrcweir             ini.getIniParameters(param);
86cdf0e10cSrcweir         }
87cdf0e10cSrcweir 
88cdf0e10cSrcweir         DynamicClassLoader dcl = new DynamicClassLoader();
89cdf0e10cSrcweir         ComplexTestCase testClass = null;
90cdf0e10cSrcweir         boolean returnVal = true;
91cdf0e10cSrcweir 
92cdf0e10cSrcweir //        the concept of the TimeOut depends on runner logs. If the runner log,
93*bb6af6bcSPedro Giffuni //        for example to start a test method, the timeout was reset. This is not
94cdf0e10cSrcweir //        while the test itself log something like "open docuent...".
95cdf0e10cSrcweir //        An property of complex test could be that it have only one test method
96cdf0e10cSrcweir //        which works for serveral minutes. Ih this case the TimeOut get not trigger
97cdf0e10cSrcweir //        and the office was killed.
98cdf0e10cSrcweir //        In complex tests just use "ThreadTimeOut" as timout.
99cdf0e10cSrcweir 
100cdf0e10cSrcweir         // param.put("TimeOut", new Integer(0));
101cdf0e10cSrcweir 
102cdf0e10cSrcweir         for (int i = 0; i < entries.length; i++)
103cdf0e10cSrcweir         {
104cdf0e10cSrcweir 
105cdf0e10cSrcweir             if (entries[i] == null)
106cdf0e10cSrcweir             {
107cdf0e10cSrcweir                 continue;
108cdf0e10cSrcweir             }
109cdf0e10cSrcweir             String iniName = entries[i].longName;
110cdf0e10cSrcweir             iniName = iniName.replace('.', '/');
111cdf0e10cSrcweir             CfgParser ini = new CfgParser(iniName + ".props");
112cdf0e10cSrcweir             ini.getIniParameters(param);
113cdf0e10cSrcweir 
114cdf0e10cSrcweir             LogWriter log = (LogWriter) dcl.getInstance((String) param.get("LogWriter"));
115cdf0e10cSrcweir 
116cdf0e10cSrcweir             AppProvider office = null;
117cdf0e10cSrcweir             if (!param.getBool("NoOffice"))
118cdf0e10cSrcweir             {
119cdf0e10cSrcweir                 try
120cdf0e10cSrcweir                 {
121cdf0e10cSrcweir                     office = (AppProvider) dcl.getInstance("helper.OfficeProvider");
122cdf0e10cSrcweir                     Object msf = office.getManager(param);
123cdf0e10cSrcweir                     if (msf == null)
124cdf0e10cSrcweir                     {
125cdf0e10cSrcweir                         returnVal = false;
126cdf0e10cSrcweir                         continue;
127cdf0e10cSrcweir                     }
128cdf0e10cSrcweir                     param.put("ServiceFactory", msf);
129cdf0e10cSrcweir                 }
130cdf0e10cSrcweir                 catch (IllegalArgumentException e)
131cdf0e10cSrcweir                 {
132cdf0e10cSrcweir                     office = null;
133cdf0e10cSrcweir                 }
134cdf0e10cSrcweir             }
135cdf0e10cSrcweir             log.initialize(entries[i], param.getBool(PropertyName.LOGGING_IS_ACTIVE));
136cdf0e10cSrcweir             entries[i].Logger = log;
137cdf0e10cSrcweir 
138cdf0e10cSrcweir             // create an instance
139cdf0e10cSrcweir             try
140cdf0e10cSrcweir             {
141cdf0e10cSrcweir                 testClass = (ComplexTestCase) dcl.getInstance(entries[i].longName);
142cdf0e10cSrcweir             }
143cdf0e10cSrcweir             catch (java.lang.Exception e)
144cdf0e10cSrcweir             {
145cdf0e10cSrcweir                 e.printStackTrace();
146cdf0e10cSrcweir                 return false;
147cdf0e10cSrcweir             }
148cdf0e10cSrcweir             testClass.executeMethods(entries[i], param);
149cdf0e10cSrcweir 
150cdf0e10cSrcweir             Summarizer sum = new Summarizer();
151cdf0e10cSrcweir             sum.summarizeUp(entries[i]);
152cdf0e10cSrcweir 
153cdf0e10cSrcweir             if (office != null)
154cdf0e10cSrcweir             {
155cdf0e10cSrcweir                 office.closeExistingOffice(param, false);
156cdf0e10cSrcweir             }
157cdf0e10cSrcweir 
158cdf0e10cSrcweir             LogWriter out = OutProducerFactory.createOutProducer(param);
159cdf0e10cSrcweir 
160cdf0e10cSrcweir             out.initialize(entries[i], true);
161cdf0e10cSrcweir             out.summary(entries[i]);
162cdf0e10cSrcweir             returnVal &= entries[i].State.endsWith("OK");
163cdf0e10cSrcweir         }
164cdf0e10cSrcweir         return returnVal;
165cdf0e10cSrcweir     }
166cdf0e10cSrcweir }
167