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