コード例 #1
0
  public void testPayloadTypeFilter() {
    PayloadTypeFilter filter = new PayloadTypeFilter(Exception.class);
    assertNotNull(filter.getExpectedType());
    assertTrue(filter.accept(new MuleMessage(new Exception("test"))));
    assertTrue(!filter.accept(new MuleMessage("test")));

    filter.setExpectedType(String.class);
    assertTrue(filter.accept(new MuleMessage("test")));
    assertTrue(!filter.accept(new MuleMessage(new Exception("test"))));
  }
コード例 #2
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();
  }
コード例 #3
0
  @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);
  }