1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.filter;
19
20 import org.apache.hadoop.hbase.SmallTests;
21 import org.junit.Assert;
22 import org.junit.Test;
23 import org.junit.experimental.categories.Category;
24
25 @Category(SmallTests.class)
26 public class TestFuzzyRowFilter {
27 @Test
28 public void testSatisfies() {
29 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS,
30 FuzzyRowFilter.satisfies(new byte[]{1, (byte) -128, 0, 0, 1},
31 new byte[]{1, 0, 1},
32 new byte[]{0, 1, 0}));
33
34 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.YES,
35 FuzzyRowFilter.satisfies(new byte[]{1, (byte) -128, 1, 0, 1},
36 new byte[]{1, 0, 1},
37 new byte[]{0, 1, 0}));
38
39 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS,
40 FuzzyRowFilter.satisfies(new byte[]{1, (byte) -128, 2, 0, 1},
41 new byte[]{1, 0, 1},
42 new byte[]{0, 1, 0}));
43
44 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NO_NEXT,
45 FuzzyRowFilter.satisfies(new byte[]{2, 3, 1, 1, 1},
46 new byte[]{1, 0, 1},
47 new byte[]{0, 1, 0}));
48
49 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.YES,
50 FuzzyRowFilter.satisfies(new byte[]{1, 2, 1, 3, 3},
51 new byte[]{1, 2, 0, 3},
52 new byte[]{0, 0, 1, 0}));
53
54 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS,
55 FuzzyRowFilter.satisfies(new byte[]{1, 1, 1, 3, 0},
56 new byte[]{1, 2, 0, 3},
57 new byte[]{0, 0, 1, 0}));
58
59 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS,
60 FuzzyRowFilter.satisfies(new byte[]{1, 1, 1, 3, 0},
61 new byte[]{1, (byte) 245, 0, 3},
62 new byte[]{0, 0, 1, 0}));
63
64 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NO_NEXT,
65 FuzzyRowFilter.satisfies(new byte[]{1, (byte) 245, 1, 3, 0},
66 new byte[]{1, 1, 0, 3},
67 new byte[]{0, 0, 1, 0}));
68
69 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NO_NEXT,
70 FuzzyRowFilter.satisfies(new byte[]{1, 3, 1, 3, 0},
71 new byte[]{1, 2, 0, 3},
72 new byte[]{0, 0, 1, 0}));
73
74 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NO_NEXT,
75 FuzzyRowFilter.satisfies(new byte[]{2, 1, 1, 1, 0},
76 new byte[]{1, 2, 0, 3},
77 new byte[]{0, 0, 1, 0}));
78
79 Assert.assertEquals(FuzzyRowFilter.SatisfiesCode.NEXT_EXISTS,
80 FuzzyRowFilter.satisfies(new byte[]{1, 2, 1, 0, 1},
81 new byte[]{0, 1, 2},
82 new byte[]{1, 0, 0}));
83 }
84
85 @Test
86 public void testGetNextForFuzzyRule() {
87 assertNext(
88 new byte[]{0, 1, 2},
89 new byte[]{1, 0, 0},
90 new byte[]{1, 2, 1, 0, 1},
91 new byte[]{2, 1, 2, 0, 0});
92
93 assertNext(
94 new byte[]{0, 1, 2},
95 new byte[]{1, 0, 0},
96 new byte[]{1, 1, 2, 0, 1},
97 new byte[]{1, 1, 2, 0, 2});
98
99 assertNext(
100 new byte[]{0, 1, 0, 2, 0},
101 new byte[]{1, 0, 1, 0, 1},
102 new byte[]{1, 0, 2, 0, 1},
103 new byte[]{1, 1, 0, 2, 0});
104
105 assertNext(
106 new byte[]{1, 0, 1},
107 new byte[]{0, 1, 0},
108 new byte[]{1, (byte) 128, 2, 0, 1},
109 new byte[]{1, (byte) 129, 1, 0, 0});
110
111 assertNext(
112 new byte[]{0, 1, 0, 1},
113 new byte[]{1, 0, 1, 0},
114 new byte[]{5, 1, 0, 1},
115 new byte[]{5, 1, 1, 1});
116
117 assertNext(
118 new byte[]{0, 1, 0, 1},
119 new byte[]{1, 0, 1, 0},
120 new byte[]{5, 1, 0, 1, 1},
121 new byte[]{5, 1, 0, 1, 2});
122
123 assertNext(
124 new byte[]{0, 1, 0, 0},
125 new byte[]{1, 0, 1, 1},
126 new byte[]{5, 1, (byte) 255, 1},
127 new byte[]{5, 1, (byte) 255, 2});
128
129 assertNext(
130 new byte[]{0, 1, 0, 1},
131 new byte[]{1, 0, 1, 0},
132 new byte[]{5, 1, (byte) 255, 1},
133 new byte[]{6, 1, 0, 1});
134
135 assertNext(
136 new byte[]{0, 1, 0, 1},
137 new byte[]{1, 0, 1, 0},
138 new byte[]{5, 1, (byte) 255, 0},
139 new byte[]{5, 1, (byte) 255, 1});
140
141 assertNext(
142 new byte[]{5, 1, 1, 0},
143 new byte[]{0, 0, 1, 1},
144 new byte[]{5, 1, (byte) 255, 1},
145 new byte[]{5, 1, (byte) 255, 2});
146
147 assertNext(
148 new byte[]{1, 1, 1, 1},
149 new byte[]{0, 0, 1, 1},
150 new byte[]{1, 1, 2, 2},
151 new byte[]{1, 1, 2, 3});
152
153 assertNext(
154 new byte[]{1, 1, 1, 1},
155 new byte[]{0, 0, 1, 1},
156 new byte[]{1, 1, 3, 2},
157 new byte[]{1, 1, 3, 3});
158
159 assertNext(
160 new byte[]{1, 1, 1, 1},
161 new byte[]{1, 1, 1, 1},
162 new byte[]{1, 1, 2, 3},
163 new byte[]{1, 1, 2, 4});
164
165 assertNext(
166 new byte[]{1, 1, 1, 1},
167 new byte[]{1, 1, 1, 1},
168 new byte[]{1, 1, 3, 2},
169 new byte[]{1, 1, 3, 3});
170
171 assertNext(
172 new byte[]{1, 1, 0, 0},
173 new byte[]{0, 0, 1, 1},
174 new byte[]{0, 1, 3, 2},
175 new byte[]{1, 1, 0, 0});
176
177
178 Assert.assertNull(FuzzyRowFilter.getNextForFuzzyRule(
179 new byte[]{2, 3, 1, 1, 1},
180 new byte[]{1, 0, 1},
181 new byte[]{0, 1, 0}));
182 Assert.assertNull(FuzzyRowFilter.getNextForFuzzyRule(
183 new byte[]{1, (byte) 245, 1, 3, 0},
184 new byte[]{1, 1, 0, 3},
185 new byte[]{0, 0, 1, 0}));
186 Assert.assertNull(FuzzyRowFilter.getNextForFuzzyRule(
187 new byte[]{1, 3, 1, 3, 0},
188 new byte[]{1, 2, 0, 3},
189 new byte[]{0, 0, 1, 0}));
190 Assert.assertNull(FuzzyRowFilter.getNextForFuzzyRule(
191 new byte[]{2, 1, 1, 1, 0},
192 new byte[]{1, 2, 0, 3},
193 new byte[]{0, 0, 1, 0}));
194 }
195
196 private void assertNext(byte[] fuzzyRow, byte[] mask, byte[] current, byte[] expected) {
197 byte[] nextForFuzzyRule = FuzzyRowFilter.getNextForFuzzyRule(current, fuzzyRow, mask);
198 Assert.assertArrayEquals(expected, nextForFuzzyRule);
199 }
200
201 }