1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.regionserver.querymatcher;
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.fail;
24
25 import java.io.IOException;
26 import java.util.ArrayList;
27 import java.util.List;
28
29 import org.apache.hadoop.hbase.KeyValue;
30 import org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher.MatchCode;
31 import org.apache.hadoop.hbase.testclassification.SmallTests;
32 import org.apache.hadoop.hbase.util.Bytes;
33 import org.junit.Test;
34 import org.junit.experimental.categories.Category;
35
36 @Category(SmallTests.class)
37 public class TestScanWildcardColumnTracker {
38
39 final static int VERSIONS = 2;
40
41 @Test
42 public void testCheckColumnOk() throws IOException {
43 ScanWildcardColumnTracker tracker = new ScanWildcardColumnTracker(0, VERSIONS, Long.MIN_VALUE);
44
45
46 List<byte[]> qualifiers = new ArrayList<byte[]>();
47 qualifiers.add(Bytes.toBytes("qualifier1"));
48 qualifiers.add(Bytes.toBytes("qualifier2"));
49 qualifiers.add(Bytes.toBytes("qualifier3"));
50 qualifiers.add(Bytes.toBytes("qualifier4"));
51
52
53 List<MatchCode> expected = new ArrayList<MatchCode>();
54 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
55 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
56 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
57 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
58
59 List<ScanQueryMatcher.MatchCode> actual = new ArrayList<MatchCode>();
60
61 for (byte[] qualifier : qualifiers) {
62 ScanQueryMatcher.MatchCode mc = ScanQueryMatcher.checkColumn(tracker, qualifier, 0,
63 qualifier.length, 1, KeyValue.Type.Put.getCode(), false);
64 actual.add(mc);
65 }
66
67
68 for (int i = 0; i < expected.size(); i++) {
69 assertEquals(expected.get(i), actual.get(i));
70 }
71 }
72
73 @Test
74 public void testCheckColumnEnforceVersions() throws IOException {
75 ScanWildcardColumnTracker tracker = new ScanWildcardColumnTracker(0, VERSIONS, Long.MIN_VALUE);
76
77
78 List<byte[]> qualifiers = new ArrayList<byte[]>();
79 qualifiers.add(Bytes.toBytes("qualifier1"));
80 qualifiers.add(Bytes.toBytes("qualifier1"));
81 qualifiers.add(Bytes.toBytes("qualifier1"));
82 qualifiers.add(Bytes.toBytes("qualifier2"));
83
84
85 List<ScanQueryMatcher.MatchCode> expected = new ArrayList<MatchCode>();
86 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
87 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
88 expected.add(ScanQueryMatcher.MatchCode.SEEK_NEXT_COL);
89 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
90
91 List<MatchCode> actual = new ArrayList<ScanQueryMatcher.MatchCode>();
92
93 long timestamp = 0;
94 for (byte[] qualifier : qualifiers) {
95 MatchCode mc = ScanQueryMatcher.checkColumn(tracker, qualifier, 0, qualifier.length,
96 ++timestamp, KeyValue.Type.Put.getCode(), false);
97 actual.add(mc);
98 }
99
100
101 for (int i = 0; i < expected.size(); i++) {
102 assertEquals(expected.get(i), actual.get(i));
103 }
104 }
105
106 @Test
107 public void DisabledTestCheckColumnWrongOrder() {
108 ScanWildcardColumnTracker tracker = new ScanWildcardColumnTracker(0, VERSIONS, Long.MIN_VALUE);
109
110
111 List<byte[]> qualifiers = new ArrayList<byte[]>();
112 qualifiers.add(Bytes.toBytes("qualifier2"));
113 qualifiers.add(Bytes.toBytes("qualifier1"));
114
115 try {
116 for (byte[] qualifier : qualifiers) {
117 ScanQueryMatcher.checkColumn(tracker, qualifier, 0, qualifier.length, 1,
118 KeyValue.Type.Put.getCode(), false);
119 }
120 fail();
121 } catch (IOException e) {
122
123 }
124 }
125 }