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.client;
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertTrue;
24 import static org.junit.Assert.fail;
25
26 import java.io.IOException;
27 import java.util.Arrays;
28 import java.util.Set;
29
30 import org.apache.hadoop.hbase.testclassification.SmallTests;
31 import org.apache.hadoop.hbase.filter.FilterList;
32 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
33 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
34 import org.apache.hadoop.hbase.security.visibility.Authorizations;
35 import org.apache.hadoop.hbase.util.Bytes;
36 import org.junit.Assert;
37 import org.junit.Test;
38 import org.junit.experimental.categories.Category;
39
40
41 @Category(SmallTests.class)
42 public class TestScan {
43 @Test
44 public void testAttributesSerialization() throws IOException {
45 Scan scan = new Scan();
46 scan.setAttribute("attribute1", Bytes.toBytes("value1"));
47 scan.setAttribute("attribute2", Bytes.toBytes("value2"));
48 scan.setAttribute("attribute3", Bytes.toBytes("value3"));
49
50 ClientProtos.Scan scanProto = ProtobufUtil.toScan(scan);
51
52 Scan scan2 = ProtobufUtil.toScan(scanProto);
53
54 Assert.assertNull(scan2.getAttribute("absent"));
55 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), scan2.getAttribute("attribute1")));
56 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), scan2.getAttribute("attribute2")));
57 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value3"), scan2.getAttribute("attribute3")));
58 Assert.assertEquals(3, scan2.getAttributesMap().size());
59 }
60
61 @Test
62 public void testGetToScan() throws IOException {
63 Get get = new Get(Bytes.toBytes(1));
64 get.setCacheBlocks(true).setConsistency(Consistency.TIMELINE).setFilter(new FilterList())
65 .setId("get").setIsolationLevel(IsolationLevel.READ_COMMITTED)
66 .setLoadColumnFamiliesOnDemand(false).setMaxResultsPerColumnFamily(1000)
67 .setMaxVersions(9999).setRowOffsetPerColumnFamily(5).setTimeRange(0, 13)
68 .setAttribute("att_v0", Bytes.toBytes("att_v0"))
69 .setColumnFamilyTimeRange(Bytes.toBytes("cf"), 0, 123);
70 Scan scan = new Scan(get);
71 assertEquals(get.getCacheBlocks(), scan.getCacheBlocks());
72 assertEquals(get.getConsistency(), scan.getConsistency());
73 assertEquals(get.getFilter(), scan.getFilter());
74 assertEquals(get.getId(), scan.getId());
75 assertEquals(get.getIsolationLevel(), scan.getIsolationLevel());
76 assertEquals(get.getLoadColumnFamiliesOnDemandValue(),
77 scan.getLoadColumnFamiliesOnDemandValue());
78 assertEquals(get.getMaxResultsPerColumnFamily(), scan.getMaxResultsPerColumnFamily());
79 assertEquals(get.getMaxVersions(), scan.getMaxVersions());
80 assertEquals(get.getRowOffsetPerColumnFamily(), scan.getRowOffsetPerColumnFamily());
81 assertEquals(get.getTimeRange().getMin(), scan.getTimeRange().getMin());
82 assertEquals(get.getTimeRange().getMax(), scan.getTimeRange().getMax());
83 assertTrue(Bytes.equals(get.getAttribute("att_v0"), scan.getAttribute("att_v0")));
84 assertEquals(get.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMin(),
85 scan.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMin());
86 assertEquals(get.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMax(),
87 scan.getColumnFamilyTimeRange().get(Bytes.toBytes("cf")).getMax());
88 }
89
90 @Test
91 public void testScanAttributes() {
92 Scan scan = new Scan();
93 Assert.assertTrue(scan.getAttributesMap().isEmpty());
94 Assert.assertNull(scan.getAttribute("absent"));
95
96 scan.setAttribute("absent", null);
97 Assert.assertTrue(scan.getAttributesMap().isEmpty());
98 Assert.assertNull(scan.getAttribute("absent"));
99
100
101 scan.setAttribute("attribute1", Bytes.toBytes("value1"));
102 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), scan.getAttribute("attribute1")));
103 Assert.assertEquals(1, scan.getAttributesMap().size());
104 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), scan.getAttributesMap().get("attribute1")));
105
106
107 scan.setAttribute("attribute1", Bytes.toBytes("value12"));
108 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), scan.getAttribute("attribute1")));
109 Assert.assertEquals(1, scan.getAttributesMap().size());
110 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), scan.getAttributesMap().get("attribute1")));
111
112
113 scan.setAttribute("attribute2", Bytes.toBytes("value2"));
114 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), scan.getAttribute("attribute2")));
115 Assert.assertEquals(2, scan.getAttributesMap().size());
116 Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), scan.getAttributesMap().get("attribute2")));
117
118
119 scan.setAttribute("attribute2", null);
120 Assert.assertNull(scan.getAttribute("attribute2"));
121 Assert.assertEquals(1, scan.getAttributesMap().size());
122 Assert.assertNull(scan.getAttributesMap().get("attribute2"));
123
124
125 scan.setAttribute("attribute2", null);
126 Assert.assertNull(scan.getAttribute("attribute2"));
127 Assert.assertEquals(1, scan.getAttributesMap().size());
128 Assert.assertNull(scan.getAttributesMap().get("attribute2"));
129
130
131 scan.setAttribute("attribute1", null);
132 Assert.assertNull(scan.getAttribute("attribute1"));
133 Assert.assertTrue(scan.getAttributesMap().isEmpty());
134 Assert.assertNull(scan.getAttributesMap().get("attribute1"));
135 }
136
137 @Test
138 public void testNullQualifier() {
139 Scan scan = new Scan();
140 byte[] family = Bytes.toBytes("family");
141 scan.addColumn(family, null);
142 Set<byte[]> qualifiers = scan.getFamilyMap().get(family);
143 Assert.assertEquals(1, qualifiers.size());
144 }
145
146 @Test
147 public void testSetAuthorizations() {
148 Scan scan = new Scan();
149 try {
150 scan.setAuthorizations(new Authorizations("\u002b|\u0029"));
151 scan.setAuthorizations(new Authorizations("A", "B", "0123", "A0", "1A1", "_a"));
152 scan.setAuthorizations(new Authorizations("A|B"));
153 scan.setAuthorizations(new Authorizations("A&B"));
154 scan.setAuthorizations(new Authorizations("!B"));
155 scan.setAuthorizations(new Authorizations("A", "(A)"));
156 scan.setAuthorizations(new Authorizations("A", "{A"));
157 scan.setAuthorizations(new Authorizations(" "));
158 scan.setAuthorizations(new Authorizations(":B"));
159 scan.setAuthorizations(new Authorizations("-B"));
160 scan.setAuthorizations(new Authorizations(".B"));
161 scan.setAuthorizations(new Authorizations("/B"));
162 } catch (IllegalArgumentException e) {
163 fail("should not throw exception");
164 }
165 }
166 }
167