1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
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 |
|
|
|
|
| 89% |
Uncovered Elements: 15 (136) |
Complexity: 27 |
Complexity Density: 0.27 |
|
38 |
|
public class ServiceTestClassRunner extends JUnit4ClassRunner { |
39 |
|
private final Class<?> testImplClass; |
40 |
|
private Server server; |
41 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (2) |
Complexity: 1 |
Complexity Density: 0.5 |
|
42 |
371
|
public ServiceTestClassRunner(Class<?> klass) throws InitializationError {... |
43 |
371
|
super(klass); |
44 |
371
|
testImplClass = klass; |
45 |
|
|
46 |
|
} |
47 |
|
|
48 |
|
|
49 |
|
|
50 |
|
|
51 |
|
|
52 |
|
|
53 |
|
|
54 |
|
|
55 |
|
@see |
56 |
|
|
|
|
| 81.6% |
Uncovered Elements: 7 (38) |
Complexity: 8 |
Complexity Density: 0.29 |
|
57 |
246
|
@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 |
|
|
114 |
|
|
115 |
|
|
|
|
| 91.8% |
Uncovered Elements: 7 (85) |
Complexity: 15 |
Complexity Density: 0.23 |
|
116 |
15
|
private void startServer() {... |
117 |
15
|
try { |
118 |
|
|
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 |
|
|
126 |
|
|
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 |
|
|
149 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
219 |
15
|
String contextConfigLocation = "classpath:META-INF/" + wsEngine + "-context.xml"; |
220 |
15
|
if(!"".equals(daoImpls)){ |
221 |
|
|
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 |
|
|
243 |
|
|
244 |
|
@see |
245 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (3) |
Complexity: 1 |
Complexity Density: 0.33 |
|
246 |
15
|
@Override... |
247 |
|
public void run(RunNotifier notifier) { |
248 |
15
|
startServer(); |
249 |
15
|
super.run(notifier); |
250 |
15
|
stopServer(); |
251 |
|
} |
252 |
|
|
|
|
| 66.7% |
Uncovered Elements: 1 (3) |
Complexity: 2 |
Complexity Density: 0.67 |
|
253 |
15
|
private void stopServer() {... |
254 |
15
|
try { |
255 |
15
|
server.stop(); |
256 |
|
} catch (Exception e) { |
257 |
0
|
throw new RuntimeException(e); |
258 |
|
} |
259 |
|
} |
260 |
|
|
261 |
|
} |