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")))); }
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); }