1
2
3
4
5
6
7
8
9
10
11
12 package org.mule.module.jca;
13
14 import org.mule.api.MuleException;
15 import org.mule.api.endpoint.ImmutableEndpoint;
16 import org.mule.api.endpoint.InboundEndpoint;
17 import org.mule.api.model.Model;
18 import org.mule.api.routing.InboundRouterCollection;
19 import org.mule.api.service.Service;
20 import org.mule.model.seda.SedaModel;
21 import org.mule.tck.AbstractMuleTestCase;
22
23 import java.lang.reflect.Method;
24 import java.util.Timer;
25
26 import javax.resource.ResourceException;
27 import javax.resource.spi.ActivationSpec;
28 import javax.resource.spi.BootstrapContext;
29 import javax.resource.spi.InvalidPropertyException;
30 import javax.resource.spi.ResourceAdapter;
31 import javax.resource.spi.UnavailableException;
32 import javax.resource.spi.XATerminator;
33 import javax.resource.spi.endpoint.MessageEndpoint;
34 import javax.resource.spi.endpoint.MessageEndpointFactory;
35 import javax.resource.spi.work.WorkManager;
36 import javax.transaction.xa.XAResource;
37
38 public class MuleResourceAdapterTestCase extends AbstractMuleTestCase
39 {
40 private MuleResourceAdapter resourceAdapter;
41
42 protected void doSetUp() throws Exception
43 {
44 resourceAdapter = new MuleResourceAdapter();
45 resourceAdapter.muleContext = muleContext;
46 resourceAdapter.bootstrapContext = new MockBoostrapContext();
47 }
48
49 protected void doTearDown() throws Exception
50 {
51 resourceAdapter = null;
52 }
53
54 public void testResolveModelName() throws ResourceException
55 {
56 MuleActivationSpec activationSpec = new MuleActivationSpec();
57 activationSpec.setModelName("activationSpecModelName");
58 resourceAdapter.setModelName("resourceAdaptorModelName");
59 String modelName = resourceAdapter.resolveModelName(activationSpec);
60 assertEquals("activationSpecModelName", modelName);
61 }
62
63 public void testResolveModelNameFromResourceAdaptor() throws ResourceException
64 {
65 MuleActivationSpec activationSpec = new MuleActivationSpec();
66 resourceAdapter.setModelName("resourceAdaptorModelName");
67 String modelName = resourceAdapter.resolveModelName(activationSpec);
68 assertEquals("resourceAdaptorModelName", modelName);
69 }
70
71 public void testResolveModelNameFromActivationSpec() throws ResourceException
72 {
73 MuleActivationSpec activationSpec = new MuleActivationSpec();
74 activationSpec.setModelName("activationSpecModelName");
75 String modelName = resourceAdapter.resolveModelName(activationSpec);
76 assertEquals("activationSpecModelName", modelName);
77 }
78
79 public void testResolveModelModelNameMissing()
80 {
81 MuleActivationSpec activationSpec = new MuleActivationSpec();
82 try
83 {
84 resourceAdapter.resolveModelName(activationSpec);
85 fail("Exception expected: No modelName set.");
86 }
87 catch (ResourceException e)
88 {
89
90 }
91 }
92
93 public void testGetJcaModelCreateNew() throws MuleException, ResourceException
94 {
95 JcaModel jcaModel = resourceAdapter.getJcaModel("jca");
96 assertEquals("jca", jcaModel.getName());
97 }
98
99 public void testGetJcaModelUseExisting() throws MuleException, ResourceException
100 {
101 Model jcaModel = new JcaModel();
102 jcaModel.setName("jca");
103 muleContext.getRegistry().registerModel(jcaModel);
104 JcaModel jcaModel2 = resourceAdapter.getJcaModel("jca");
105 assertEquals("jca", jcaModel2.getName());
106 assertEquals(jcaModel, jcaModel2);
107 }
108
109 public void testGetJcaModel3ExistingWrongType() throws MuleException
110 {
111 Model sedaModel = new SedaModel();
112 sedaModel.setName("jca");
113 muleContext.getRegistry().registerModel(sedaModel);
114 try
115 {
116 resourceAdapter.getJcaModel("jca");
117 fail("Exception Expected: Model is not JcaModel");
118 }
119 catch (Exception e)
120 {
121
122 }
123 }
124
125 public void testCreateMessageInflowEndpoint() throws MuleException
126 {
127 MuleActivationSpec activationSpec = new MuleActivationSpec();
128 activationSpec.setEndpoint("test://testEndpoint");
129 ImmutableEndpoint endpoint = resourceAdapter.createMessageInflowEndpoint(activationSpec);
130 testEndpoint(endpoint);
131 }
132
133 public void testCreateJcaComponent() throws Exception
134 {
135 MessageEndpointFactory endpointFactory = new MockEndpointFactory();
136 JcaModel jcaModel = resourceAdapter.getJcaModel("jca");
137 MuleActivationSpec activationSpec = new MuleActivationSpec();
138 activationSpec.setEndpoint("test://testEndpoint");
139 InboundEndpoint endpoint = resourceAdapter.createMessageInflowEndpoint(activationSpec);
140
141 Service service = resourceAdapter.createJcaService(endpointFactory, jcaModel, endpoint);
142
143
144 assertNotNull(service);
145 assertEquals("JcaService#" + endpointFactory.hashCode(), service.getName());
146 assertNotNull(service);
147 assertTrue(service instanceof JcaService);
148 assertNotNull(service.getComponent());
149 assertTrue(service.getComponent() instanceof JcaComponent);
150 assertNotNull(((JcaComponent) service.getComponent()).workManager);
151 testJcaService(service);
152
153 testEndpoint(service);
154
155
156 ImmutableEndpoint endpoint2 = (ImmutableEndpoint) service.getInboundRouter().getEndpoints().get(0);
157 assertEquals(endpoint, endpoint2);
158
159
160 assertEquals(endpointFactory, ((JcaComponent) service.getComponent()).messageEndpointFactory);
161 }
162
163 public void testendpointActivationOK() throws Exception
164 {
165 MuleActivationSpec activationSpec = new MuleActivationSpec();
166 activationSpec.setResourceAdapter(resourceAdapter);
167 activationSpec.setModelName("jcaModel");
168 activationSpec.setEndpoint("test://testEndpoint");
169 MessageEndpointFactory endpointFactory = new MockEndpointFactory();
170
171 assertEquals(0, resourceAdapter.endpoints.size());
172
173 resourceAdapter.endpointActivation(endpointFactory, activationSpec);
174 assertEquals(1, resourceAdapter.endpoints.size());
175
176 MuleEndpointKey key = new MuleEndpointKey(endpointFactory, activationSpec);
177 Service service = (Service) resourceAdapter.endpoints.get(key);
178
179 assertEquals("JcaService#" + endpointFactory.hashCode(), service.getName());
180 testJcaService(service);
181 testEndpoint(service);
182
183 assertTrue(service.getComponent() instanceof JcaComponent);
184
185 assertEquals(endpointFactory, ((JcaComponent) service.getComponent()).messageEndpointFactory);
186
187
188
189 resourceAdapter.endpointActivation(endpointFactory, activationSpec);
190 assertEquals(1, resourceAdapter.endpoints.size());
191
192
193
194 resourceAdapter.endpointActivation(new MockEndpointFactory(), activationSpec);
195 assertEquals(2, resourceAdapter.endpoints.size());
196
197 }
198
199 public void testendpointActivationIncorrectActivationSpec()
200 {
201 try
202 {
203 ActivationSpec activationSpec = new MockActivationSpec();
204 activationSpec.setResourceAdapter(resourceAdapter);
205 resourceAdapter.endpointActivation(new MockEndpointFactory(), activationSpec);
206 fail("Exception expected: Invalid ActivationSpec type");
207 }
208 catch (ResourceException e)
209 {
210
211 }
212 assertEquals(0, resourceAdapter.endpoints.size());
213 }
214
215 public void testendpointDeactivationOK() throws ResourceException
216 {
217 MuleActivationSpec activationSpec = new MuleActivationSpec();
218 activationSpec.setResourceAdapter(resourceAdapter);
219 activationSpec.setModelName("jcaModel");
220 activationSpec.setEndpoint("test://test");
221 MessageEndpointFactory endpointFactory = new MockEndpointFactory();
222 assertEquals(0, resourceAdapter.endpoints.size());
223 resourceAdapter.endpointActivation(endpointFactory, activationSpec);
224 assertEquals(1, resourceAdapter.endpoints.size());
225 resourceAdapter.endpointDeactivation(endpointFactory, activationSpec);
226 assertEquals(0, resourceAdapter.endpoints.size());
227 }
228
229 protected void testEndpoint(Service service)
230 {
231 InboundRouterCollection inboundRouterCollection = service.getInboundRouter();
232 ImmutableEndpoint endpoint = (ImmutableEndpoint) inboundRouterCollection.getEndpoints().get(0);
233 testEndpoint(endpoint);
234 }
235
236 protected void testEndpoint(ImmutableEndpoint endpoint)
237 {
238 assertNotNull(endpoint);
239 assertNotNull(endpoint.getConnector());
240 assertEquals("testEndpoint", endpoint.getEndpointURI().getAddress());
241 assertEquals(false, endpoint.isSynchronous());
242 }
243
244 protected void testJcaService(Service service)
245 {
246
247
248 assertNotNull(service);
249
250 assertNotNull(service.getInboundRouter());
251
252
253
254 assertEquals(0, service.getInboundRouter().getRouters().size());
255 }
256
257 }
258
259 class MockEndpointFactory implements MessageEndpointFactory
260 {
261
262 public MessageEndpoint createEndpoint(XAResource arg0) throws UnavailableException
263 {
264
265 return null;
266 }
267
268 public boolean isDeliveryTransacted(Method arg0) throws NoSuchMethodException
269 {
270
271 return false;
272 }
273 }
274
275 class MockActivationSpec implements ActivationSpec
276 {
277
278 public void validate() throws InvalidPropertyException
279 {
280
281
282 }
283
284 public ResourceAdapter getResourceAdapter()
285 {
286
287 return null;
288 }
289
290 public void setResourceAdapter(ResourceAdapter arg0) throws ResourceException
291 {
292
293
294 }
295 }
296
297 class MockBoostrapContext implements BootstrapContext
298 {
299
300 public Timer createTimer() throws UnavailableException
301 {
302
303 return null;
304 }
305
306 public WorkManager getWorkManager()
307 {
308 return new TestJCAWorkManager();
309 }
310
311 public XATerminator getXATerminator()
312 {
313
314 return null;
315 }
316 }