View Javadoc

1   /*
2    * $Id: XPathFilterTestCase.java 22387 2011-07-12 03:53:36Z dirk.olmes $
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.filters;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleContext;
15  import org.mule.tck.junit4.AbstractMuleTestCase;
16  
17  import java.io.InputStream;
18  import java.util.HashMap;
19  
20  import javax.xml.parsers.DocumentBuilderFactory;
21  import javax.xml.xpath.XPathFactory;
22  
23  import org.junit.Test;
24  import org.mockito.Mockito;
25  import org.w3c.dom.Document;
26  import org.w3c.dom.Node;
27  
28  import static org.junit.Assert.assertEquals;
29  import static org.junit.Assert.assertFalse;
30  import static org.junit.Assert.assertNotNull;
31  import static org.junit.Assert.assertSame;
32  import static org.junit.Assert.assertTrue;
33  
34  /**
35   * @author Ryan Heaton
36   */
37  public class XPathFilterTestCase extends AbstractMuleTestCase
38  {
39  
40      /**
41       * tests accepting the mule message.
42       */
43      @Test
44      public void testAcceptMessage() throws Exception
45      {
46          final Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
47          MuleContext muleContext = Mockito.mock(MuleContext.class);
48          DefaultMuleMessage message = new DefaultMuleMessage(null, muleContext);
49          XPathFilter filter = new XPathFilter()
50          {
51              @Override
52              public Node toDOMNode(Object src) throws Exception
53              {
54                  return document;
55              }
56  
57              @Override
58              protected boolean accept(Node node)
59              {
60                  return node == document;
61              }
62          };
63  
64          assertFalse("shouldn't accept a message if no payload is set.", filter.accept(message));
65          message.setPayload(new Object());
66          filter.setPattern("/some/pattern = null");
67          assertTrue(filter.accept(message));
68          assertEquals("null", filter.getExpectedValue());
69          assertEquals("/some/pattern", filter.getPattern().trim());
70          assertSame(document, message.getPayload());
71          message.setPayload(new Object());
72          filter.setExpectedValue(null);
73          assertTrue(filter.accept(message));
74          assertEquals("true", filter.getExpectedValue());
75          assertEquals("/some/pattern", filter.getPattern().trim());
76          assertSame(document, message.getPayload());
77      }
78  
79      /**
80       * tests accepting a node.
81       */
82      @Test
83      public void testAcceptNode() throws Exception
84      {
85          InputStream testXml = getClass().getResourceAsStream("/test.xml");
86          assertNotNull(testXml);
87          XPathFilter filter = new XPathFilter();
88  
89          filter.setXpath(XPathFactory.newInstance().newXPath());
90  
91          filter.setPattern("/some/unknown/path");
92          filter.setExpectedValue("bogus");
93          filter.initialise();
94          DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
95          builderFactory.setNamespaceAware(true);
96          Document document = builderFactory.newDocumentBuilder().parse(testXml);
97          assertFalse("shouldn't have accepted a null evaluation when expected value isn't null.",
98              filter.accept(document));
99          filter.setExpectedValue("null");
100         assertTrue(filter.accept(document));
101         filter.setPattern("test/some/in");
102         assertFalse(filter.accept(document));
103         filter.setExpectedValue("another");
104         assertTrue(filter.accept(document));
105     }
106 
107     /**
108      * tests accepting a node.
109      */
110     @Test
111     public void testAcceptSoapNode() throws Exception
112     {
113         InputStream soapEnvelope = getClass().getResourceAsStream("/request.xml");
114         assertNotNull(soapEnvelope);
115         XPathFilter filter = new XPathFilter();
116 
117         filter.setXpath(XPathFactory.newInstance().newXPath());
118 
119         filter.setPattern("/soap:Envelope/soap:Body/mule:echo/mule:echo");
120         filter.setExpectedValue("Hello!");
121         HashMap<String, String> prefix2Namespace = new HashMap<String, String>();
122         prefix2Namespace.put("soap", "http://schemas.xmlsoap.org/soap/envelope/");
123         prefix2Namespace.put("mule", "http://simple.component.mule.org/");
124         filter.setNamespaces(prefix2Namespace);
125         filter.initialise();
126         DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
127         builderFactory.setNamespaceAware(true);
128         Document envDoc = builderFactory.newDocumentBuilder().parse(soapEnvelope);
129         assertTrue(filter.accept(envDoc));
130     }
131 
132 }