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.client.LocalMuleClient;
16 import org.mule.api.processor.MessageProcessor;
17 import org.mule.api.service.Service;
18 import org.mule.exception.DefaultServiceExceptionStrategy;
19 import org.mule.message.ExceptionMessage;
20 import org.mule.module.client.MuleClient;
21 import org.mule.routing.outbound.MulticastingRouter;
22 import org.mule.tck.FunctionalTestCase;
23 import org.mule.tck.exceptions.FunctionalTestException;
24
25 import java.util.HashMap;
26 import java.util.Map;
27
28 public class DefaultServiceExceptionStrategyTestCase extends FunctionalTestCase
29 {
30 @Override
31 protected String getConfigResources()
32 {
33 return "org/mule/test/integration/exceptions/default-service-exception-strategy-config.xml";
34 }
35
36 public void testDefaultExceptionStrategySingleEndpoint() throws MuleException
37 {
38 Service service = muleContext.getRegistry().lookupService("testService1");
39 assertNotNull(service);
40 assertNotNull(service.getExceptionListener());
41 assertTrue(service.getExceptionListener() instanceof DefaultServiceExceptionStrategy);
42 assertEquals(1, ((DefaultServiceExceptionStrategy) service.getExceptionListener()).getMessageProcessors().size());
43
44 MuleClient mc = new MuleClient(muleContext);
45 mc.dispatch("vm://in1", "test", null);
46 assertExceptionMessage(mc.request("vm://out1", RECEIVE_TIMEOUT));
47
48 assertNull(mc.request("vm://out1", RECEIVE_TIMEOUT));
49 }
50
51 public void testDefaultExceptionStrategyMultipleEndpoints() throws MuleException
52 {
53 Service service = muleContext.getRegistry().lookupService("testService2");
54 assertNotNull(service);
55 assertNotNull(service.getExceptionListener());
56 assertTrue(service.getExceptionListener() instanceof DefaultServiceExceptionStrategy);
57 DefaultServiceExceptionStrategy exceptionListener =
58 (DefaultServiceExceptionStrategy) service.getExceptionListener();
59 MessageProcessor mp = exceptionListener.getMessageProcessors().iterator().next();
60 assertTrue(mp.getClass().getName(), mp instanceof MulticastingRouter);
61 assertEquals(2, ((MulticastingRouter) mp).getRoutes().size());
62
63 MuleClient mc = new MuleClient(muleContext);
64 mc.dispatch("vm://in2", "test", null);
65 MuleMessage out2 = mc.request("vm://out2", FunctionalTestCase.RECEIVE_TIMEOUT);
66 MuleMessage out3 = mc.request("vm://out3", FunctionalTestCase.RECEIVE_TIMEOUT);
67 assertExceptionMessage(out2);
68 assertExceptionMessage(out3);
69 assertNotSame(out2, out3);
70 assertEquals(out2.getPayload(), out3.getPayload());
71 }
72
73 public void testDefaultExceptionStrategyNonEndpoint() throws Exception
74 {
75 LocalMuleClient mc = muleContext.getClient();
76
77 mc.dispatch("vm://in3", "test", null);
78
79 MuleMessage out4 = mc.request("vm://out4", FunctionalTestCase.RECEIVE_TIMEOUT);
80 assertEquals("ERROR!", out4.getPayloadAsString());
81 }
82
83 public void testSerializablePayload() throws MuleException
84 {
85 Map<String, String> map = new HashMap<String, String>();
86 map.put("key1", "value1");
87 map.put("key2", "value2");
88
89 MuleClient mc = new MuleClient(muleContext);
90 mc.dispatch("vm://in1", map, null);
91 MuleMessage message = mc.request("vm://out1", FunctionalTestCase.RECEIVE_TIMEOUT);
92
93 assertTrue(message.getPayload() instanceof ExceptionMessage);
94 Object payload = ((ExceptionMessage) message.getPayload()).getPayload();
95 assertTrue("payload shoud be a Map, but is " + payload.getClass().getName(),
96 payload instanceof Map<?, ?>);
97 Map<?, ?> payloadMap = (Map<?, ?>) payload;
98 assertEquals("value1", payloadMap.get("key1"));
99 assertEquals("value2", payloadMap.get("key2"));
100 }
101
102 private void assertExceptionMessage(MuleMessage out)
103 {
104 assertTrue(out.getPayload() instanceof ExceptionMessage);
105 ExceptionMessage exceptionMessage = (ExceptionMessage) out.getPayload();
106 assertEquals(FunctionalTestException.class, exceptionMessage.getException().getCause().getClass());
107 assertEquals("test", exceptionMessage.getPayload());
108 }
109 }