View Javadoc

1   /*
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
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      // Create list of qualifiers
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      // Setting up expected result
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      // Compare actual with expected
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      // Create list of qualifiers
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      // Setting up expected result
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     // Compare actual with expected
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     // Create list of qualifiers
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       // expected
123     }
124   }
125 }