Clover Coverage Report - Kuali Student 1.2-M3-SNAPSHOT (Aggregated)
Coverage timestamp: Mon Jun 6 2011 05:02:46 EDT
../../../../../../img/srcFileCovDistChart9.png 31% of files have more coverage
101   261   27   20.2
30   182   0.27   5
5     5.4  
1    
 
  ServiceTestClassRunner       Line # 38 101 0% 27 15 89% 0.8897059
 
No Tests
 
1    /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10    * software distributed under the License is distributed on an "AS IS"
11    * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12    * or implied. See the License for the specific language governing
13    * permissions and limitations under the License.
14    */
15   
16    package org.kuali.student.common.test.spring;
17   
18    import java.lang.reflect.Field;
19    import java.util.EventListener;
20    import java.util.HashMap;
21    import java.util.Map;
22   
23    import javax.jws.WebService;
24    import javax.servlet.Servlet;
25    import javax.xml.namespace.QName;
26   
27    import org.junit.internal.runners.InitializationError;
28    import org.junit.internal.runners.JUnit4ClassRunner;
29    import org.junit.runner.notification.RunNotifier;
30    import org.kuali.student.common.ws.beans.JaxWsClientFactory;
31    import org.mortbay.jetty.Server;
32    import org.mortbay.jetty.servlet.Context;
33    import org.mortbay.jetty.servlet.ServletHandler;
34    import org.mortbay.jetty.servlet.ServletHolder;
35    import org.mortbay.jetty.servlet.ServletMapping;
36    import org.springframework.web.context.ContextLoaderListener;
37   
 
38    public class ServiceTestClassRunner extends JUnit4ClassRunner {
39    private final Class<?> testImplClass;
40    private Server server;
41   
 
42  371 toggle public ServiceTestClassRunner(Class<?> klass) throws InitializationError {
43  371 super(klass);
44  371 testImplClass = klass;
45   
46    }
47   
48    /**
49    * Creates a client and injects it into the test class based on the
50    * &#064;Client annotations
51    */
52    /*
53    * (non-Javadoc)
54    *
55    * @see org.junit.internal.runners.JUnit4ClassRunner#createTest()
56    */
 
57  246 toggle @Override
58    protected Object createTest() throws Exception {
59  246 Object instance = super.createTest();
60  246 try {
61  246 for (Field f : instance.getClass().getDeclaredFields()) {
62  561 if (f.isAnnotationPresent(Client.class)) {
63  246 Client a = f.getAnnotation(Client.class);
64  246 String port = System.getProperty("ks.test.port");
65   
66  246 Class<?> serviceImplClass = Class.forName(a.value());
67  246 String serviceName = "";
68  246 String serviceNamespaceURI = "";
69  246 String serviceWsdlLocation = "http://localhost:" + port
70  246 + "/Service/Service" + (a.secure() ? "Secure" : "")
71    + "?wsdl";
72  246 String serviceAddress = "http://localhost:" + port
73  246 + "/Service/Service" + (a.secure() ? "Secure" : "");
74   
75  246 if (serviceImplClass.isAnnotationPresent(WebService.class)) {
76  246 WebService wsAnnotation = serviceImplClass
77    .getAnnotation(WebService.class);
78  246 serviceName = wsAnnotation.serviceName();
79  246 serviceNamespaceURI = wsAnnotation.targetNamespace();
80    }
81   
82  246 Class<?> clientImplClass = Class
83    .forName("org.kuali.student.common.ws.beans.JaxWsClientFactoryBean");
84   
85  246 if (a.secure()) {
86  0 try {
87  0 clientImplClass = Class
88    .forName("org.kuali.student.common.cxf.security.SecureJaxWsProxyFactoryBean");
89    } catch (ClassNotFoundException cnfe) {
90    }
91    }
92   
93  246 JaxWsClientFactory clientFactory = (JaxWsClientFactory) clientImplClass
94    .newInstance();
95   
96  246 clientFactory.setServiceEndpointInterface(f.getType());
97  246 clientFactory.setServiceName(new QName(serviceNamespaceURI,
98    serviceName));
99  246 clientFactory.setWsdlLocation(serviceWsdlLocation);
100  246 clientFactory.setAddress(serviceAddress);
101   
102  246 f.setAccessible(true);
103  246 f.set(instance, clientFactory.getObject());
104    }
105    }
106    } catch (Exception e) {
107  0 throw new RuntimeException(e);
108    }
109  246 return instance;
110    }
111   
112    /**
113    * Start a server based on the service Impl &#064;WebService annotaions and
114    * the test class &#064;
115    */
 
116  15 toggle private void startServer() {
117  15 try {
118    // Set the default Port
119  15 if (System.getProperty("ks.test.default.port")==null||System.getProperty("ks.test.default.port").isEmpty()){
120  15 System.setProperty("ks.test.port", "9191");
121    } else {
122  0 System.setProperty("ks.test.port", System.getProperty("ks.test.default.port"));
123    }
124   
125    // Grab the client annotation and set the service implementation and
126    // port as system properties
127  15 for (Field f : testImplClass.getDeclaredFields()) {
128  34 if (f.isAnnotationPresent(Client.class)) {
129  15 Client a = f.getAnnotation(Client.class);
130  15 if (a.secure()) {
131  0 System.setProperty("ks.test.serviceImplSecure", a
132    .value());
133    } else {
134  15 System.setProperty("ks.test.serviceImplClass", a
135    .value());
136    }
137  15 if(a.port()!=null&&!a.port().isEmpty()){
138  1 System.setProperty("ks.test.port", a.port());
139    }
140  15 if(!"".equals(a.additionalContextFile())){
141  13 System.setProperty("ks.test.additionalContextFile", a.additionalContextFile());
142    }else{
143  2 System.setProperty("ks.test.additionalContextFile", "classpath:*noSuchContextFile.xml");
144    }
145    }
146    }
147   
148    // If no secure client defined, set secure service endpoint impl
149    // to be same as non-secure endpoint impl
150  15 if (System.getProperty("ks.test.serviceImplSecure") == null) {
151  13 System.setProperty("ks.test.serviceImplSecure", System
152    .getProperty("ks.test.serviceImplClass"));
153    }
154   
155    // Grab the persistence context loacation or set a default value
156  15 if (testImplClass
157    .isAnnotationPresent(PersistenceFileLocation.class)) {
158  12 PersistenceFileLocation a = testImplClass
159    .getAnnotation(PersistenceFileLocation.class);
160  12 System.setProperty("ks.test.persistenceLocation", a.value());
161    } else {
162  3 System.setProperty("ks.test.persistenceLocation",
163    "classpath:META-INF/persistence.xml");
164    }
165   
166    // Grab the Dao information and pass it to a System variable
167  15 Daos daos = testImplClass.getAnnotation(Daos.class);
168   
169  15 String daoImpls = "";
170  15 if (daos != null) {
171  12 int i = 1;
172  12 for (Dao dao : daos.value()) {
173  14 daoImpls += dao.value() + "|" + dao.testDataFile() +"|" + dao.testSqlFile() ;
174  14 if (i < daos.value().length) {
175  2 daoImpls += ",";
176    }
177  14 i++;
178    }
179    }
180  15 System.setProperty("ks.test.daoImplClasses", daoImpls);
181   
182  15 server = new Server(Integer.valueOf(System
183    .getProperty("ks.test.port")));
184   
185  15 Context context = new Context();
186  15 ServletHandler servletHandler = new ServletHandler();
187  15 ServletHolder servletHolder = new ServletHolder();
188  15 ServletMapping servletMapping = new ServletMapping();
189  15 ContextLoaderListener contextLoaderListener = new ContextLoaderListener();
190   
191   
192  15 Class<?> servletClass;
193  15 String wsEngine;
194  15 try{
195  15 servletClass = Class.forName("org.apache.cxf.transport.servlet.CXFServlet");
196  15 wsEngine = "cxf";
197    } catch (ClassNotFoundException e) {
198  0 servletClass = Class.forName("com.sun.xml.ws.transport.http.servlet.WSSpringServlet");
199  0 wsEngine = "jaxws";
200    }
201   
202  15 Servlet servlet = (Servlet) servletClass.newInstance();
203   
204  15 servletHolder.setName("Service");
205  15 servletHolder.setServlet(servlet);
206  15 servletHandler.setServlets(new ServletHolder[] { servletHolder });
207   
208  15 servletMapping.setPathSpec("/*");
209  15 servletMapping.setServletName("Service");
210  15 servletHandler
211    .setServletMappings(new ServletMapping[] { servletMapping });
212   
213  15 context.setContextPath("/Service");
214  15 context.setResourceBase("src/test/resources");
215   
216  15 Map<String, String> initParams = new HashMap<String, String>();
217   
218    //Set the context config location
219  15 String contextConfigLocation = "classpath:META-INF/" + wsEngine + "-context.xml";
220  15 if(!"".equals(daoImpls)){
221    //If there are Daos defined, add the dao context file
222  12 contextConfigLocation +="\nclasspath:META-INF/default-dao-context-test.xml";
223    }
224   
225  15 initParams.put("contextConfigLocation", contextConfigLocation);
226  15 initParams.put("log4jConfigLocation", "log4j.properties");
227  15 context.setInitParams(initParams);
228  15 context
229    .setEventListeners(new EventListener[] { contextLoaderListener });
230  15 context.setServletHandler(servletHandler);
231   
232  15 server.setHandler(context);
233   
234  15 server.start();
235    } catch (Exception e) {
236  0 throw new RuntimeException(e);
237    }
238   
239    }
240   
241    /*
242    * (non-Javadoc)
243    *
244    * @see org.junit.internal.runners.JUnit4ClassRunner#run(org.junit.runner.notification.RunNotifier)
245    */
 
246  15 toggle @Override
247    public void run(RunNotifier notifier) {
248  15 startServer();
249  15 super.run(notifier);
250  15 stopServer();
251    }
252   
 
253  15 toggle private void stopServer() {
254  15 try {
255  15 server.stop();
256    } catch (Exception e) {
257  0 throw new RuntimeException(e);
258    }
259    }
260   
261    }