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