1
2
3
4
5
6
7
8
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
36
37 public class XPathFilterTestCase extends AbstractMuleTestCase
38 {
39
40
41
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
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
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 }