Clover Coverage Report - KS Common Test 1.2-M3-SNAPSHOT
Coverage timestamp: Mon Jun 6 2011 05:43:50 EDT
../../../../../../img/srcFileCovDistChart9.png 43% 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 17 87.5% 0.875
 
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  3 toggle public ServiceTestClassRunner(Class<?> klass) throws InitializationError {
43  3 super(klass);
44  3 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  6 toggle @Override
58    protected Object createTest() throws Exception {
59  6 Object instance = super.createTest();
60  6 try {
61  6 for (Field f : instance.getClass().getDeclaredFields()) {
62  11 if (f.isAnnotationPresent(Client.class)) {
63  6 Client a = f.getAnnotation(Client.class);
64  6 String port = System.getProperty("ks.test.port");
65   
66  6 Class<?> serviceImplClass = Class.forName(a.value());
67  6 String serviceName = "";
68  6 String serviceNamespaceURI = "";
69  6 String serviceWsdlLocation = "http://localhost:" + port
70  6 + "/Service/Service" + (a.secure() ? "Secure" : "")
71    + "?wsdl";
72  6 String serviceAddress = "http://localhost:" + port
73  6 + "/Service/Service" + (a.secure() ? "Secure" : "");
74   
75  6 if (serviceImplClass.isAnnotationPresent(WebService.class)) {
76  6 WebService wsAnnotation = serviceImplClass
77    .getAnnotation(WebService.class);
78  6 serviceName = wsAnnotation.serviceName();
79  6 serviceNamespaceURI = wsAnnotation.targetNamespace();
80    }
81   
82  6 Class<?> clientImplClass = Class
83    .forName("org.kuali.student.common.ws.beans.JaxWsClientFactoryBean");
84   
85  6 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  6 JaxWsClientFactory clientFactory = (JaxWsClientFactory) clientImplClass
94    .newInstance();
95   
96  6 clientFactory.setServiceEndpointInterface(f.getType());
97  6 clientFactory.setServiceName(new QName(serviceNamespaceURI,
98    serviceName));
99  6 clientFactory.setWsdlLocation(serviceWsdlLocation);
100  6 clientFactory.setAddress(serviceAddress);
101   
102  6 f.setAccessible(true);
103  6 f.set(instance, clientFactory.getObject());
104    }
105    }
106    } catch (Exception e) {
107  0 throw new RuntimeException(e);
108    }
109  6 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  3 toggle private void startServer() {
117  3 try {
118    // Set the default Port
119  3 if (System.getProperty("ks.test.default.port")==null||System.getProperty("ks.test.default.port").isEmpty()){
120  3 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  3 for (Field f : testImplClass.getDeclaredFields()) {
128  5 if (f.isAnnotationPresent(Client.class)) {
129  3 Client a = f.getAnnotation(Client.class);
130  3 if (a.secure()) {
131  0 System.setProperty("ks.test.serviceImplSecure", a
132    .value());
133    } else {
134  3 System.setProperty("ks.test.serviceImplClass", a
135    .value());
136    }
137  3 if(a.port()!=null&&!a.port().isEmpty()){
138  1 System.setProperty("ks.test.port", a.port());
139    }
140  3 if(!"".equals(a.additionalContextFile())){
141  3 System.setProperty("ks.test.additionalContextFile", a.additionalContextFile());
142    }else{
143  0 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  3 if (System.getProperty("ks.test.serviceImplSecure") == null) {
151  1 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  3 if (testImplClass
157    .isAnnotationPresent(PersistenceFileLocation.class)) {
158  2 PersistenceFileLocation a = testImplClass
159    .getAnnotation(PersistenceFileLocation.class);
160  2 System.setProperty("ks.test.persistenceLocation", a.value());
161    } else {
162  1 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  3 Daos daos = testImplClass.getAnnotation(Daos.class);
168   
169  3 String daoImpls = "";
170  3 if (daos != null) {
171  2 int i = 1;
172  2 for (Dao dao : daos.value()) {
173  4 daoImpls += dao.value() + "|" + dao.testDataFile() +"|" + dao.testSqlFile() ;
174  4 if (i < daos.value().length) {
175  2 daoImpls += ",";
176    }
177  4 i++;
178    }
179    }
180  3 System.setProperty("ks.test.daoImplClasses", daoImpls);
181   
182  3 server = new Server(Integer.valueOf(System
183    .getProperty("ks.test.port")));
184   
185  3 Context context = new Context();
186  3 ServletHandler servletHandler = new ServletHandler();
187  3 ServletHolder servletHolder = new ServletHolder();
188  3 ServletMapping servletMapping = new ServletMapping();
189  3 ContextLoaderListener contextLoaderListener = new ContextLoaderListener();
190   
191   
192  3 Class<?> servletClass;
193  3 String wsEngine;
194  3 try{
195  3 servletClass = Class.forName("org.apache.cxf.transport.servlet.CXFServlet");
196  3 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  3 Servlet servlet = (Servlet) servletClass.newInstance();
203   
204  3 servletHolder.setName("Service");
205  3 servletHolder.setServlet(servlet);
206  3 servletHandler.setServlets(new ServletHolder[] { servletHolder });
207   
208  3 servletMapping.setPathSpec("/*");
209  3 servletMapping.setServletName("Service");
210  3 servletHandler
211    .setServletMappings(new ServletMapping[] { servletMapping });
212   
213  3 context.setContextPath("/Service");
214  3 context.setResourceBase("src/test/resources");
215   
216  3 Map<String, String> initParams = new HashMap<String, String>();
217   
218    //Set the context config location
219  3 String contextConfigLocation = "classpath:META-INF/" + wsEngine + "-context.xml";
220  3 if(!"".equals(daoImpls)){
221    //If there are Daos defined, add the dao context file
222  2 contextConfigLocation +="\nclasspath:META-INF/default-dao-context-test.xml";
223    }
224   
225  3 initParams.put("contextConfigLocation", contextConfigLocation);
226  3 initParams.put("log4jConfigLocation", "log4j.properties");
227  3 context.setInitParams(initParams);
228  3 context
229    .setEventListeners(new EventListener[] { contextLoaderListener });
230  3 context.setServletHandler(servletHandler);
231   
232  3 server.setHandler(context);
233   
234  3 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  3 toggle @Override
247    public void run(RunNotifier notifier) {
248  3 startServer();
249  3 super.run(notifier);
250  3 stopServer();
251    }
252   
 
253  3 toggle private void stopServer() {
254  3 try {
255  3 server.stop();
256    } catch (Exception e) {
257  0 throw new RuntimeException(e);
258    }
259    }
260   
261    }