1
2
3
4
5
6
7
8
9
10
11 package org.mule.test.integration.exceptions;
12
13 import org.mule.api.MuleException;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.service.Service;
16 import org.mule.exception.DefaultServiceExceptionStrategy;
17 import org.mule.message.ExceptionMessage;
18 import org.mule.module.client.MuleClient;
19 import org.mule.tck.FunctionalTestCase;
20 import org.mule.tck.exceptions.FunctionalTestException;
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25 public class DefaultServiceExceptionStrategyTestCase extends FunctionalTestCase
26 {
27 @Override
28 protected String getConfigResources()
29 {
30 return "org/mule/test/integration/exceptions/default-service-exception-strategy-config.xml";
31 }
32
33 public void testDefaultExceptionStrategySingleEndpoint() throws MuleException
34 {
35 assertExceptionStrategyHasNumberOfEndpoints("testService1", 1);
36
37 MuleClient mc = new MuleClient(muleContext);
38 mc.dispatch("vm://in1", "test", null);
39 assertExceptionMessage(mc.request("vm://out1", RECEIVE_TIMEOUT));
40
41 assertNull(mc.request("vm://out1", RECEIVE_TIMEOUT));
42 }
43
44 public void testDefaultExceptionStrategyMultipleEndpoints() throws MuleException
45 {
46 assertExceptionStrategyHasNumberOfEndpoints("testService2", 2);
47
48 MuleClient mc = new MuleClient(muleContext);
49 mc.dispatch("vm://in2", "test", null);
50 MuleMessage out2 = mc.request("vm://out2", FunctionalTestCase.RECEIVE_TIMEOUT);
51 MuleMessage out3 = mc.request("vm://out3", FunctionalTestCase.RECEIVE_TIMEOUT);
52 assertExceptionMessage(out2);
53 assertExceptionMessage(out3);
54 assertNotSame(out2, out3);
55 assertEquals(out2.getPayload(), out3.getPayload());
56 }
57
58 public void testSerializablePayload() throws MuleException
59 {
60 Map<String, String> map = new HashMap<String, String>();
61 map.put("key1", "value1");
62 map.put("key2", "value2");
63
64 MuleClient mc = new MuleClient(muleContext);
65 mc.dispatch("vm://in1", map, null);
66 MuleMessage message = mc.request("vm://out1", FunctionalTestCase.RECEIVE_TIMEOUT);
67
68 assertTrue(message.getPayload() instanceof ExceptionMessage);
69 Object payload = ((ExceptionMessage) message.getPayload()).getPayload();
70 assertTrue("payload shoud be a Map, but is " + payload.getClass().getName(),
71 payload instanceof Map<?, ?>);
72 Map<?, ?> payloadMap = (Map<?, ?>) payload;
73 assertEquals("value1", payloadMap.get("key1"));
74 assertEquals("value2", payloadMap.get("key2"));
75 }
76
77 private void assertExceptionMessage(MuleMessage out)
78 {
79 assertTrue(out.getPayload() instanceof ExceptionMessage);
80 ExceptionMessage exceptionMessage = (ExceptionMessage) out.getPayload();
81 assertEquals(FunctionalTestException.class, exceptionMessage.getException().getCause().getClass());
82 assertEquals("test", exceptionMessage.getPayload());
83 }
84
85 private void assertExceptionStrategyHasNumberOfEndpoints(String serviceName, int numberOfEndpoints)
86 {
87 Service service = muleContext.getRegistry().lookupService(serviceName);
88 assertNotNull(service);
89 assertNotNull(service.getExceptionListener());
90 assertTrue(service.getExceptionListener() instanceof DefaultServiceExceptionStrategy);
91 DefaultServiceExceptionStrategy exceptionListener =
92 (DefaultServiceExceptionStrategy) service.getExceptionListener();
93 assertEquals(numberOfEndpoints, exceptionListener.getMessageProcessors().size());
94 }
95 }