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;
21
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.hadoop.hbase.*;
27 import org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.MatchCode;
28 import org.apache.hadoop.hbase.testclassification.SmallTests;
29 import org.apache.hadoop.hbase.util.Bytes;
30 import org.junit.experimental.categories.Category;
31
32 @Category(SmallTests.class)
33 public class TestScanWildcardColumnTracker extends HBaseTestCase {
34
35 final static int VERSIONS = 2;
36
37 public void testCheckColumn_Ok() throws IOException {
38 ScanWildcardColumnTracker tracker =
39 new ScanWildcardColumnTracker(0, VERSIONS, Long.MIN_VALUE);
40
41
42 List<byte[]> qualifiers = new ArrayList<byte[]>();
43 qualifiers.add(Bytes.toBytes("qualifer1"));
44 qualifiers.add(Bytes.toBytes("qualifer2"));
45 qualifiers.add(Bytes.toBytes("qualifer3"));
46 qualifiers.add(Bytes.toBytes("qualifer4"));
47
48
49 List<MatchCode> expected = new ArrayList<MatchCode>();
50 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
51 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
52 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
53 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
54
55 List<ScanQueryMatcher.MatchCode> actual = new ArrayList<MatchCode>();
56
57 for(byte [] qualifier : qualifiers) {
58 ScanQueryMatcher.MatchCode mc =
59 ScanQueryMatcher.checkColumn(tracker, qualifier, 0, qualifier.length, 1,
60 KeyValue.Type.Put.getCode(), false);
61 actual.add(mc);
62 }
63
64
65 for(int i=0; i<expected.size(); i++) {
66 assertEquals(expected.get(i), actual.get(i));
67 }
68 }
69
70 public void testCheckColumn_EnforceVersions() throws IOException {
71 ScanWildcardColumnTracker tracker =
72 new ScanWildcardColumnTracker(0, VERSIONS, Long.MIN_VALUE);
73
74
75 List<byte[]> qualifiers = new ArrayList<byte[]>();
76 qualifiers.add(Bytes.toBytes("qualifer1"));
77 qualifiers.add(Bytes.toBytes("qualifer1"));
78 qualifiers.add(Bytes.toBytes("qualifer1"));
79 qualifiers.add(Bytes.toBytes("qualifer2"));
80
81
82 List<ScanQueryMatcher.MatchCode> expected = new ArrayList<MatchCode>();
83 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
84 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
85 expected.add(ScanQueryMatcher.MatchCode.SEEK_NEXT_COL);
86 expected.add(ScanQueryMatcher.MatchCode.INCLUDE);
87
88 List<MatchCode> actual = new ArrayList<ScanQueryMatcher.MatchCode>();
89
90 long timestamp = 0;
91 for(byte [] qualifier : qualifiers) {
92 MatchCode mc =
93 ScanQueryMatcher.checkColumn(tracker, qualifier, 0, qualifier.length, ++timestamp,
94 KeyValue.Type.Put.getCode(), false);
95 actual.add(mc);
96 }
97
98
99 for(int i=0; i<expected.size(); i++) {
100 assertEquals(expected.get(i), actual.get(i));
101 }
102 }
103
104 public void DisabledTestCheckColumn_WrongOrder() {
105 ScanWildcardColumnTracker tracker =
106 new ScanWildcardColumnTracker(0, VERSIONS, Long.MIN_VALUE);
107
108
109 List<byte[]> qualifiers = new ArrayList<byte[]>();
110 qualifiers.add(Bytes.toBytes("qualifer2"));
111 qualifiers.add(Bytes.toBytes("qualifer1"));
112
113 boolean ok = false;
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 } catch (Exception e) {
121 ok = true;
122 }
123
124 assertEquals(true, ok);
125 }
126
127
128 }
129