Source code: org/activemq/filter/DestinationFilterTest.java
1 /**
2 *
3 * Copyright 2004 Protique Ltd
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 **/
18 package org.activemq.filter;
19
20 import org.activemq.message.ActiveMQMessage;
21 import org.activemq.test.TestSupport;
22
23 import javax.jms.Destination;
24 import javax.jms.JMSException;
25
26
27 /**
28 * @version $Revision: 1.1.1.1 $
29 */
30 public class DestinationFilterTest extends TestSupport {
31
32 public void testNonWildcard() throws JMSException {
33 Filter filter = createFilter("FOO.BAR");
34
35 assertFilterMatches(filter, "FOO.BAR", true);
36 assertFilterMatches(filter, "FOO.BA", false);
37 assertFilterMatches(filter, "FOO.BAR.", false);
38 assertFilterMatches(filter, "FOO.BAR.Y", false);
39 assertFilterMatches(filter, "FOO", false);
40 }
41
42 public void testPrefixWildcard() throws JMSException {
43 Filter filter = createFilter("FOO.>");
44
45 assertFilterMatches(filter, "FOO.BAR", true);
46 assertFilterMatches(filter, "FOO.BA", true);
47 assertFilterMatches(filter, "FOO.BAR.", true);
48 assertFilterMatches(filter, "FOO.BAR.Y", true);
49 assertFilterMatches(filter, "FOO", false);
50 assertFilterMatches(filter, "BAR.BAR", false);
51 }
52
53 public void testTwoLevelPrefixWildcard() throws JMSException {
54 Filter filter = createFilter("FOO.BAR.>");
55
56 assertFilterMatches(filter, "FOO.BAR", false);
57 assertFilterMatches(filter, "FOO.BAR.FOO", true);
58 assertFilterMatches(filter, "FOO.BAR.FOO.WHATNOT", true);
59 assertFilterMatches(filter, "FOO.XAR.FOO", false);
60 }
61
62 public void testMatchAnythingWildcard() throws JMSException {
63 Filter filter = createFilter(">");
64
65 assertFilterMatches(filter, "FOO.BAR", true);
66 assertFilterMatches(filter, "FOO.BA", true);
67 assertFilterMatches(filter, "FOO.BAR.", true);
68 assertFilterMatches(filter, "FOO.BAR.Y", true);
69 assertFilterMatches(filter, "", true);
70 assertFilterMatches(filter, "FOO", true);
71 assertFilterMatches(filter, "BAR.BAR", true);
72 }
73
74 public void testWildcard() throws JMSException {
75 Filter filter = createFilter("FOO.*");
76
77 assertFilterMatches(filter, "FOO.BAR", true);
78 assertFilterMatches(filter, "FOO.BA", true);
79 assertFilterMatches(filter, "FOO.BAR.", false);
80 assertFilterMatches(filter, "FOO.BAR.Y", false);
81 assertFilterMatches(filter, "FOO", false);
82 assertFilterMatches(filter, "BAR.BAR", false);
83 }
84
85 public void testDoubleWildcard() throws JMSException {
86 Filter filter = createFilter("FOO.*.*");
87
88 assertFilterMatches(filter, "FOO.BAR", false);
89 assertFilterMatches(filter, "FOO.BAR.XYZ", true);
90 assertFilterMatches(filter, "FOO.BAR.", true);
91 assertFilterMatches(filter, "FOO.BAR.XYZ.", false);
92 assertFilterMatches(filter, "FOO.BAR.XYZ.ZZZ", false);
93 assertFilterMatches(filter, "FOO", false);
94 assertFilterMatches(filter, "BAR.BAR", false);
95 }
96
97 public void testWildcardInMiddle() throws JMSException {
98 Filter filter = createFilter("FOO.*.XYZ");
99
100 assertFilterMatches(filter, "FOO.BAR", false);
101 assertFilterMatches(filter, "FOO.BAR.XYZ", true);
102 assertFilterMatches(filter, "FOO..XYZ", true);
103 assertFilterMatches(filter, "FOO.WHATEVER.XYZ", true);
104 assertFilterMatches(filter, "FOO.BAR.XYZ.", false);
105 assertFilterMatches(filter, "FOO.BAR.XYZ.ZZZ", false);
106 assertFilterMatches(filter, "FOO", false);
107 assertFilterMatches(filter, "BAR.BAR", false);
108 }
109
110 public void testIntermixedWildcards() throws JMSException {
111 Filter filter = createFilter("FOO.*.ABC.*");
112
113 assertFilterMatches(filter, "FOO.BAR", false);
114 assertFilterMatches(filter, "FOO.BAR.ABC", false);
115 assertFilterMatches(filter, "FOO.BAR.ABC.DEF", true);
116 assertFilterMatches(filter, "FOO..ABC.DEF", true);
117 assertFilterMatches(filter, "FOO..ABC.", true);
118 assertFilterMatches(filter, "FOO.BAR.ABC.DEF.", false);
119 assertFilterMatches(filter, "FOO.BAR.ABC.DEF.X", false);
120 assertFilterMatches(filter, "FOO.BAR.ABC", false);
121 assertFilterMatches(filter, "FOO.BAR.XYZ.", false);
122 assertFilterMatches(filter, "FOO.BAR.XYZ.ZZZ", false);
123 assertFilterMatches(filter, "FOO", false);
124 assertFilterMatches(filter, "BAR.BAR", false);
125 }
126
127 public void testCompositeFilter() throws JMSException {
128 Filter filter = createFilter("FOO.BAR.ABC.DEF,FOO.XYZ");
129
130 assertFilterMatches(filter, "FOO.XYZ", true);
131 assertFilterMatches(filter, "FOO.BAR", false);
132 assertFilterMatches(filter, "FOO.BAR.ABC", false);
133 assertFilterMatches(filter, "FOO.BAR.ABC.DEF", true);
134 assertFilterMatches(filter, "FOO.BAR.ABC.DEF.", false);
135 assertFilterMatches(filter, "FOO.BAR.ABC.DEF.X", false);
136 assertFilterMatches(filter, "FOO.BAR.ABC", false);
137 assertFilterMatches(filter, "FOO.BAR.XYZ.", false);
138 assertFilterMatches(filter, "FOO.BAR.XYZ.ZZZ", false);
139 assertFilterMatches(filter, "FOO", false);
140 assertFilterMatches(filter, "BAR.BAR", false);
141 }
142
143 protected void assertFilterMatches(Filter filter, String subject, boolean expected) throws JMSException {
144 Destination destination = createDestination(subject);
145
146 // lets create a Message now
147 ActiveMQMessage message = createMessage();
148 message.setJMSDestination(destination);
149
150 boolean actual = filter.matches(message);
151 assertEquals("Matching " + filter + " to: " + destination, expected, actual);
152 }
153
154 protected Filter createFilter(String subject) {
155 return DestinationFilter.parseFilter(createDestination(subject));
156 }
157 }