@Test
  public void testRouterWithCatchAll() throws Exception {
    final int[] count1 = new int[] {0};
    final int[] count2 = new int[] {0};
    final int[] catchAllCount = new int[] {0};

    DefaultOutboundRouterCollection messageRouter = new DefaultOutboundRouterCollection();

    FilteringOutboundRouter filterRouter1 =
        new FilteringOutboundRouter() {
          @Override
          public MuleEvent route(MuleEvent event) throws RoutingException {
            count1[0]++;
            return event;
          }
        };

    FilteringOutboundRouter filterRouter2 =
        new FilteringOutboundRouter() {
          @Override
          public MuleEvent route(MuleEvent event) throws RoutingException {
            count2[0]++;
            return event;
          }
        };

    filterRouter1.setFilter(new PayloadTypeFilter(Exception.class));
    filterRouter2.setFilter(new PayloadTypeFilter(StringBuilder.class));
    messageRouter.addRoute(filterRouter1);
    messageRouter.addRoute(filterRouter2);

    AbstractCatchAllStrategy strategy =
        new AbstractCatchAllStrategy() {
          @Override
          public MuleEvent doCatchMessage(MuleEvent event) throws RoutingException {
            catchAllCount[0]++;
            return null;
          }
        };

    messageRouter.setCatchAllStrategy(strategy);

    MuleEvent event = getTestEvent("hello");
    messageRouter.process(event);
    assertEquals(1, catchAllCount[0]);
    assertEquals(0, count1[0]);
    assertEquals(0, count2[0]);

    event = getTestEvent(new StringBuilder());
    messageRouter.process(event);
    assertEquals(1, catchAllCount[0]);
    assertEquals(0, count1[0]);
    assertEquals(1, count2[0]);

    event = getTestEvent(new Exception());
    messageRouter.process(event);
    assertEquals(1, catchAllCount[0]);
    assertEquals(1, count1[0]);
    assertEquals(1, count2[0]);
  }
Ejemplo n.º 2
0
  public void testRouterWithCatchAll() throws Exception {
    final int[] count1 = new int[] {0};
    final int[] count2 = new int[] {0};
    final int[] catchAllCount = new int[] {0};

    OutboundRouterCollection messageRouter = new OutboundRouterCollection();

    FilteringOutboundRouter filterRouter1 =
        new FilteringOutboundRouter() {
          public UMOMessage route(UMOMessage message, UMOSession session, boolean synchronous)
              throws RoutingException {
            count1[0]++;
            return message;
          }
        };

    FilteringOutboundRouter filterRouter2 =
        new FilteringOutboundRouter() {
          public UMOMessage route(UMOMessage message, UMOSession session, boolean synchronous)
              throws RoutingException {
            count2[0]++;
            return message;
          }
        };

    filterRouter1.setFilter(new PayloadTypeFilter(Exception.class));
    filterRouter2.setFilter(new PayloadTypeFilter(StringBuffer.class));
    messageRouter.addRouter(filterRouter1);
    messageRouter.addRouter(filterRouter2);

    LoggingCatchAllStrategy strategy =
        new LoggingCatchAllStrategy() {
          public UMOMessage catchMessage(
              UMOMessage message, UMOSession session, boolean synchronous) throws RoutingException {
            catchAllCount[0]++;
            return null;
          }
        };

    messageRouter.setCatchAllStrategy(strategy);

    UMOSession session = getTestSession(getTestComponent(getTestDescriptor("test", "test")));

    messageRouter.route(new MuleMessage("hello"), session, true);
    assertEquals(1, catchAllCount[0]);
    assertEquals(0, count1[0]);
    assertEquals(0, count2[0]);

    messageRouter.route(new MuleMessage(new StringBuffer()), session, true);
    assertEquals(1, catchAllCount[0]);
    assertEquals(0, count1[0]);
    assertEquals(1, count2[0]);

    messageRouter.route(new MuleMessage(new Exception()), session, true);
    assertEquals(1, catchAllCount[0]);
    assertEquals(1, count1[0]);
    assertEquals(1, count2[0]);
  }
Ejemplo n.º 3
0
  public void testOutboundMessageRouter() throws Exception {
    Mock session = MuleTestUtils.getMockSession();
    session.expectAndReturn("getComponent", getTestComponent(getTestDescriptor("test", "blah")));
    OutboundRouterCollection messageRouter = new OutboundRouterCollection();
    messageRouter.setCatchAllStrategy(new LoggingCatchAllStrategy());
    assertNotNull(messageRouter.getCatchAllStrategy());

    UMOEndpoint endpoint1 = getTestEndpoint("Test1Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
    assertNotNull(endpoint1);

    UMOEndpoint endpoint2 = getTestEndpoint("Test2Provider", UMOEndpoint.ENDPOINT_TYPE_SENDER);
    assertNotNull(endpoint2);

    FilteringOutboundRouter router1 = new FilteringOutboundRouter();
    PayloadTypeFilter filter = new PayloadTypeFilter(String.class);
    router1.setFilter(filter);
    List endpoints = new ArrayList();
    endpoints.add(endpoint1);
    router1.setEndpoints(endpoints);

    FilteringOutboundRouter router2 = new FilteringOutboundRouter();
    PayloadTypeFilter filter2 = new PayloadTypeFilter();
    filter2.setExpectedType(Exception.class);
    router2.setFilter(filter2);
    endpoints = new ArrayList();
    endpoints.add(endpoint2);
    router2.setEndpoints(endpoints);

    messageRouter.addRouter(router1);
    assertEquals(1, messageRouter.getRouters().size());
    assertNotNull(messageRouter.removeRouter(router1));
    assertEquals(0, messageRouter.getRouters().size());
    List list = new ArrayList();
    list.add(router1);
    list.add(router2);
    messageRouter.setRouters(list);

    UMOMessage message = new MuleMessage("test event");

    session.expect("dispatchEvent", C.eq(message, endpoint1));
    messageRouter.route(message, (UMOSession) session.proxy(), false);
    session.verify();

    message = new MuleMessage(new IllegalArgumentException());

    session.expectAndReturn("getComponent", getTestComponent(getTestDescriptor("test", "blah")));
    session.expect("dispatchEvent", C.eq(message, endpoint2));
    messageRouter.route(message, (UMOSession) session.proxy(), false);
    session.verify();

    FilteringOutboundRouter router3 = new FilteringOutboundRouter();
    router3.setFilter(new PayloadTypeFilter(Object.class));
    endpoints = new ArrayList();
    endpoints.add(endpoint2);
    router3.setEndpoints(endpoints);
    messageRouter.addRouter(router3);

    // now the message should be routed twice to different endpoints
    message = new MuleMessage("testing multiple routing");
    session.expectAndReturn("getComponent", getTestComponent(getTestDescriptor("test", "blah")));
    session.expectAndReturn("getComponent", getTestComponent(getTestDescriptor("test", "blah")));

    session.expect("dispatchEvent", C.eq(message, endpoint1));
    session.expect("dispatchEvent", C.eq(message, endpoint2));
    messageRouter.setMatchAll(true);
    messageRouter.route(message, (UMOSession) session.proxy(), false);
    session.verify();
  }
  @Test
  public void testOutboundMessageRouter() throws Exception {
    DefaultOutboundRouterCollection messageRouter =
        createObject(DefaultOutboundRouterCollection.class);
    messageRouter.setCatchAllStrategy(new LoggingCatchAllStrategy());
    assertNotNull(messageRouter.getCatchAllStrategy());

    OutboundEndpoint endpoint1 =
        getTestOutboundEndpoint("Test1Provider", "test://Test1Provider?exchangePattern=one-way");
    assertNotNull(endpoint1);
    OutboundEndpoint mockendpoint1 = RouterTestUtils.createMockEndpoint(endpoint1);

    OutboundEndpoint endpoint2 = getTestOutboundEndpoint("Test2Provider");
    assertNotNull(endpoint2);
    OutboundEndpoint mockendpoint2 = RouterTestUtils.createMockEndpoint(endpoint2);

    FilteringOutboundRouter router1 = new FilteringOutboundRouter();
    PayloadTypeFilter filter = new PayloadTypeFilter(String.class);
    router1.setFilter(filter);
    List<MessageProcessor> endpoints = new ArrayList<MessageProcessor>();
    endpoints.add(mockendpoint1);
    router1.setRoutes(endpoints);

    FilteringOutboundRouter router2 = new FilteringOutboundRouter();
    PayloadTypeFilter filter2 = new PayloadTypeFilter();
    filter2.setExpectedType(Exception.class);
    router2.setFilter(filter2);
    endpoints = new ArrayList<MessageProcessor>();
    endpoints.add(mockendpoint2);
    router2.setRoutes(endpoints);

    messageRouter.addRoute(router1);
    assertEquals(1, messageRouter.getRoutes().size());
    messageRouter.removeRoute(router1);
    assertEquals(0, messageRouter.getRoutes().size());

    List<MatchableMessageProcessor> list = new ArrayList<MatchableMessageProcessor>();
    list.add(router1);
    list.add(router2);
    messageRouter.setMessageProcessors(list);

    MuleSession session = mock(MuleSession.class);
    MuleEvent event = getTestEvent("test event", session);

    when(mockendpoint1.process(any(MuleEvent.class))).thenAnswer(new MuleEventCheckAnswer());
    messageRouter.process(event);

    event = getTestEvent(new IllegalArgumentException(), session);

    when(mockendpoint2.process(any(MuleEvent.class))).thenAnswer(new MuleEventCheckAnswer());
    messageRouter.process(event);

    FilteringOutboundRouter router3 = new FilteringOutboundRouter();
    router3.setFilter(new PayloadTypeFilter(Object.class));
    endpoints = new ArrayList<MessageProcessor>();
    endpoints.add(mockendpoint2);
    router3.setRoutes(endpoints);
    messageRouter.addRoute(router3);

    // now the message should be routed twice to different targets
    event = getTestEvent("testing multiple routing", session);

    messageRouter.setMatchAll(true);
    messageRouter.process(event);
  }