1   /*
2    * $Id: MessageSplitterRouterTestCase.java 7976 2007-08-21 14:26:13Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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.routing.outbound;
12  
13  import org.mule.impl.MuleMessage;
14  import org.mule.impl.endpoint.MuleEndpointURI;
15  import org.mule.tck.AbstractMuleTestCase;
16  import org.mule.tck.MuleTestUtils;
17  import org.mule.umo.UMOMessage;
18  import org.mule.umo.UMOSession;
19  import org.mule.umo.endpoint.UMOEndpoint;
20  import org.mule.util.StringUtils;
21  
22  import com.mockobjects.dynamic.C;
23  import com.mockobjects.dynamic.Mock;
24  
25  import java.util.ArrayList;
26  import java.util.Arrays;
27  import java.util.List;
28  
29  public class MessageSplitterRouterTestCase extends AbstractMuleTestCase
30  {
31  
32      public void testMessageSplitterRouter() throws Exception
33      {
34          Mock session = MuleTestUtils.getMockSession();
35  
36          UMOEndpoint endpoint1 = getTestEndpoint("Test1Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
37          endpoint1.setEndpointURI(new MuleEndpointURI("test://endpointUri.1"));
38          UMOEndpoint endpoint2 = getTestEndpoint("Test2Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
39          endpoint2.setEndpointURI(new MuleEndpointURI("test://endpointUri.2"));
40          UMOEndpoint endpoint3 = getTestEndpoint("Test3Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
41          endpoint3.setEndpointURI(new MuleEndpointURI("test://endpointUri.3"));
42  
43          // Dummy message splitter
44          AbstractMessageSplitter router = new AbstractMessageSplitter()
45          {
46              private List parts;
47  
48              protected void initialise(UMOMessage message)
49              {
50                  multimatch = false;
51                  parts = Arrays.asList(StringUtils.splitAndTrim(message.getPayload().toString(), ","));
52              }
53  
54              protected UMOMessage getMessagePart(UMOMessage message, UMOEndpoint endpoint)
55              {
56                  if (endpoint.getEndpointURI().getAddress().equals("endpointUri.1"))
57                  {
58                      return new MuleMessage(parts.get(0));
59                  }
60                  else if (endpoint.getEndpointURI().getAddress().equals("endpointUri.2"))
61                  {
62                      return new MuleMessage(parts.get(1));
63                  }
64                  else if (endpoint.getEndpointURI().getAddress().equals("endpointUri.3"))
65                  {
66                      return new MuleMessage(parts.get(2));
67                  }
68                  else
69                  {
70                      return null;
71                  }
72              }
73          };
74  
75          List endpoints = new ArrayList();
76          endpoints.add(endpoint1);
77          endpoints.add(endpoint2);
78          endpoints.add(endpoint3);
79          router.setEndpoints(endpoints);
80  
81          UMOMessage message = new MuleMessage("test,mule,message");
82  
83          assertTrue(router.isMatch(message));
84          session.expect("dispatchEvent", C.args(C.isA(UMOMessage.class), C.eq(endpoint1)));
85          session.expect("dispatchEvent", C.args(C.isA(UMOMessage.class), C.eq(endpoint2)));
86          session.expect("dispatchEvent", C.args(C.isA(UMOMessage.class), C.eq(endpoint3)));
87          router.route(message, (UMOSession)session.proxy(), false);
88          session.verify();
89  
90          message = new MuleMessage("test,mule,message");
91  
92          session.expectAndReturn("sendEvent", C.args(C.isA(UMOMessage.class), C.eq(endpoint1)), message);
93          session.expectAndReturn("sendEvent", C.args(C.isA(UMOMessage.class), C.eq(endpoint2)), message);
94          session.expectAndReturn("sendEvent", C.args(C.isA(UMOMessage.class), C.eq(endpoint3)), message);
95          UMOMessage result = router.route(message, (UMOSession)session.proxy(), true);
96          assertNotNull(result);
97          assertEquals(message, result);
98          session.verify();
99      }
100 }