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.codehaus.activemq.filter;
19
20 import org.codehaus.activemq.TestSupport;
21 import org.codehaus.activemq.message.ActiveMQMessage;
22
23 import javax.jms.Destination;
24 import javax.jms.JMSException;
25
26
27 /***
28 * @version $Revision: 1.2 $
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 testIntermixedWildcards() throws JMSException {
98 Filter filter = createFilter("FOO.*.ABC.*");
99
100 assertFilterMatches(filter, "FOO.BAR", false);
101 assertFilterMatches(filter, "FOO.BAR.ABC", false);
102 assertFilterMatches(filter, "FOO.BAR.ABC.DEF", true);
103 assertFilterMatches(filter, "FOO..ABC.DEF", true);
104 assertFilterMatches(filter, "FOO..ABC.", true);
105 assertFilterMatches(filter, "FOO.BAR.ABC.DEF.", false);
106 assertFilterMatches(filter, "FOO.BAR.ABC.DEF.X", false);
107 assertFilterMatches(filter, "FOO.BAR.ABC", false);
108 assertFilterMatches(filter, "FOO.BAR.XYZ.", false);
109 assertFilterMatches(filter, "FOO.BAR.XYZ.ZZZ", false);
110 assertFilterMatches(filter, "FOO", false);
111 assertFilterMatches(filter, "BAR.BAR", false);
112 }
113
114 public void testCompositeFilter() throws JMSException {
115 Filter filter = createFilter("FOO.BAR.ABC.DEF,FOO.XYZ");
116
117 assertFilterMatches(filter, "FOO.XYZ", true);
118 assertFilterMatches(filter, "FOO.BAR", false);
119 assertFilterMatches(filter, "FOO.BAR.ABC", false);
120 assertFilterMatches(filter, "FOO.BAR.ABC.DEF", true);
121 assertFilterMatches(filter, "FOO.BAR.ABC.DEF.", false);
122 assertFilterMatches(filter, "FOO.BAR.ABC.DEF.X", false);
123 assertFilterMatches(filter, "FOO.BAR.ABC", false);
124 assertFilterMatches(filter, "FOO.BAR.XYZ.", false);
125 assertFilterMatches(filter, "FOO.BAR.XYZ.ZZZ", false);
126 assertFilterMatches(filter, "FOO", false);
127 assertFilterMatches(filter, "BAR.BAR", false);
128 }
129
130 protected void assertFilterMatches(Filter filter, String subject, boolean expected) throws JMSException {
131 Destination destination = createDestination(subject);
132
133
134 ActiveMQMessage message = createMessage();
135 message.setJMSDestination(destination);
136
137 boolean actual = filter.matches(message);
138 assertEquals("Matching " + filter + " to: " + destination, expected, actual);
139 }
140
141 protected Filter createFilter(String subject) {
142 return DestinationFilter.parseFilter(createDestination(subject));
143 }
144 }