View Javadoc

1   /*
2    * $Id: DefaultServiceExceptionStrategyTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
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.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          // request one more time to ensure that only one exception message was sent per exception
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  }