View Javadoc

1   /*
2    * $Id: XmlFilterNamespaceHandlerTestCase.java 22438 2011-07-18 14:33:27Z claude.mamo $
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.module.xml.config;
12  
13  import org.mule.api.processor.MessageProcessor;
14  import org.mule.api.processor.MessageProcessorChain;
15  import org.mule.api.routing.MatchableMessageProcessor;
16  import org.mule.api.routing.OutboundRouterCollection;
17  import org.mule.api.service.Service;
18  import org.mule.construct.Flow;
19  import org.mule.module.xml.filters.IsXmlFilter;
20  import org.mule.module.xml.filters.JXPathFilter;
21  import org.mule.routing.MessageFilter;
22  import org.mule.routing.filters.logic.NotFilter;
23  import org.mule.routing.outbound.FilteringOutboundRouter;
24  import org.mule.tck.AbstractServiceAndFlowTestCase;
25  
26  import java.lang.reflect.Field;
27  import java.util.ArrayList;
28  import java.util.Arrays;
29  import java.util.Collection;
30  import java.util.List;
31  import java.util.Map;
32  
33  import org.junit.Test;
34  import org.junit.runners.Parameterized.Parameters;
35  
36  import static org.junit.Assert.assertEquals;
37  import static org.junit.Assert.assertNotNull;
38  import static org.junit.Assert.assertTrue;
39  import static org.junit.Assert.fail;
40  
41  public class XmlFilterNamespaceHandlerTestCase extends AbstractServiceAndFlowTestCase
42  {
43      @Parameters
44      public static Collection<Object[]> parameters()
45      {
46          return Arrays.asList(new Object[][]{
47              {ConfigVariant.SERVICE, "org/mule/module/xml/xml-filter-functional-test-service.xml"},
48              {ConfigVariant.FLOW, "org/mule/module/xml/xml-filter-functional-test-flow.xml"}});
49      }
50  
51      public XmlFilterNamespaceHandlerTestCase(ConfigVariant variant, String configResources)
52      {
53          super(variant, configResources);
54      }
55  
56      /**
57       * IsXmlFilter doesn't have any properties to test, so just check it is created
58       *
59       * @throws IllegalAccessException
60       * @throws IllegalArgumentException
61       * @throws NoSuchFieldException
62       * @throws SecurityException
63       */
64      @Test
65      public void testIsXmlFilter()
66          throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchFieldException
67      {
68          Object serviceFlow =  muleContext.getRegistry().lookupObject("test for xml");
69  
70          if (serviceFlow instanceof Service)
71          {
72              List<MatchableMessageProcessor> routers =
73                  ((OutboundRouterCollection) ((Service) serviceFlow).getOutboundMessageProcessor()).getRoutes();
74  
75              assertEquals(2, routers.size());
76              assertTrue(routers.get(0).getClass().getName(), routers.get(0) instanceof FilteringOutboundRouter);
77              assertTrue(((FilteringOutboundRouter) routers.get(0)).getFilter() instanceof IsXmlFilter);
78              assertTrue(routers.get(1).getClass().getName(), routers.get(1) instanceof FilteringOutboundRouter);
79              assertTrue(((FilteringOutboundRouter) routers.get(1)).getFilter() instanceof NotFilter);
80              assertTrue(((NotFilter) ((FilteringOutboundRouter) routers.get(1)).getFilter()).getFilter() instanceof IsXmlFilter);
81  
82          }
83          else if (serviceFlow instanceof Flow)
84          {
85              Object notXmlSubFlowWrapper;
86              Field f;
87              MessageProcessorChain notXmlSubFlow;
88              List<MessageProcessor> outEndpoints = new ArrayList<MessageProcessor>(2);
89  
90              outEndpoints.add(((Flow) serviceFlow).getMessageProcessors().get(0));
91              notXmlSubFlowWrapper = muleContext.getRegistry().lookupObject("notXml");
92  
93              f = notXmlSubFlowWrapper.getClass().getDeclaredField("delegate");
94              f.setAccessible(true);
95              notXmlSubFlow = (MessageProcessorChain) f.get(notXmlSubFlowWrapper);
96              outEndpoints.add((notXmlSubFlow.getMessageProcessors().get(0)));
97  
98              assertEquals(2, outEndpoints.size());
99              assertTrue(outEndpoints.get(0).getClass().getName(), outEndpoints.get(0) instanceof MessageFilter);
100             assertTrue(((MessageFilter) outEndpoints.get(0)).getFilter() instanceof IsXmlFilter);
101             assertTrue(outEndpoints.get(1).getClass().getName(), outEndpoints.get(1) instanceof MessageFilter);
102             assertTrue(((MessageFilter) outEndpoints.get(1)).getFilter() instanceof NotFilter);
103             assertTrue(((NotFilter) ((MessageFilter) outEndpoints.get(1)).getFilter()).getFilter() instanceof IsXmlFilter);
104         }
105         else
106         {
107             fail("Unexpected Object");
108         }
109     }
110 
111     @Test
112     public void testJXPathFilter()
113     {
114         Object serviceFlow = null;
115 
116         serviceFlow = muleContext.getRegistry().lookupObject("filter xml for content");
117 
118         if (serviceFlow instanceof Service)
119         {
120 
121             List<MatchableMessageProcessor> routers =
122                 ((OutboundRouterCollection) ((Service) serviceFlow).getOutboundMessageProcessor()).getRoutes();
123             assertEquals(1, routers.size());
124             assertTrue(routers.get(0).getClass().getName(), routers.get(0) instanceof FilteringOutboundRouter);
125             assertTrue(((FilteringOutboundRouter) routers.get(0)).getFilter() instanceof JXPathFilter);
126             JXPathFilter filter = (JXPathFilter) ((FilteringOutboundRouter) routers.get(0)).getFilter();
127             assertEquals("filter xml for content", filter.getExpectedValue());
128             assertEquals("/mule:mule/mule:model/mule:service[2]/@name", filter.getPattern());
129             assertNotNull(filter.getNamespaces());
130             Map<?, ?> namespaces = filter.getNamespaces();
131             assertEquals(2, namespaces.size());
132             assertEquals("http://www.springframework.org/schema/beans", namespaces.get("spring"));
133             assertTrue(namespaces.get("mule")
134                 .toString()
135                 .startsWith("http://www.mulesoft.org/schema/mule/core"));
136 
137         }
138         else if (serviceFlow instanceof Flow)
139         {
140 
141             List<MessageProcessor> outEndpoints = new ArrayList<MessageProcessor>(1);
142             outEndpoints.add(((Flow) serviceFlow).getMessageProcessors().get(0));
143 
144             assertEquals(1, outEndpoints.size());
145             assertTrue(outEndpoints.get(0).getClass().getName(), outEndpoints.get(0) instanceof MessageFilter);
146 
147             assertTrue(((MessageFilter) outEndpoints.get(0)).getFilter() instanceof JXPathFilter);
148             JXPathFilter filter = (JXPathFilter) ((MessageFilter) outEndpoints.get(0)).getFilter();
149             assertEquals("filter xml for content", filter.getExpectedValue());
150             assertEquals("/mule:mule/mule:flow[2]/@name", filter.getPattern());
151             assertNotNull(filter.getNamespaces());
152             Map<?, ?> namespaces = filter.getNamespaces();
153             assertEquals(2, namespaces.size());
154             assertEquals("http://www.springframework.org/schema/beans", namespaces.get("spring"));
155             assertTrue(namespaces.get("mule")
156                 .toString()
157                 .startsWith("http://www.mulesoft.org/schema/mule/core"));
158         }
159         else
160         {
161             fail("Unexpected Object");
162         }
163     }
164 }