View Javadoc

1   /*
2    * $Id: DefaultServiceExceptionStrategyTestCase.java 20637 2010-12-11 02:32:12Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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          // request one more time to ensure that only one exception message was sent per exception
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 }