1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.protobuf;
20
21 import static org.junit.Assert.assertEquals;
22
23 import java.io.IOException;
24
25 import org.apache.hadoop.hbase.SmallTests;
26 import org.apache.hadoop.hbase.client.Append;
27 import org.apache.hadoop.hbase.client.Delete;
28 import org.apache.hadoop.hbase.client.Get;
29 import org.apache.hadoop.hbase.client.Increment;
30 import org.apache.hadoop.hbase.client.Put;
31 import org.apache.hadoop.hbase.client.Scan;
32 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
33 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Column;
34 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;
35 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.ColumnValue;
36 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.ColumnValue.QualifierValue;
37 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.DeleteType;
38 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
39 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameBytesPair;
40 import org.apache.hadoop.hbase.util.Bytes;
41 import org.junit.Test;
42 import org.junit.experimental.categories.Category;
43
44 import com.google.protobuf.ByteString;
45
46
47
48
49 @Category(SmallTests.class)
50 public class TestProtobufUtil {
51 @Test
52 public void testException() throws IOException {
53 NameBytesPair.Builder builder = NameBytesPair.newBuilder();
54 final String omg = "OMG!!!";
55 builder.setName("java.io.IOException");
56 builder.setValue(ByteString.copyFrom(Bytes.toBytes(omg)));
57 Throwable t = ProtobufUtil.toException(builder.build());
58 assertEquals(omg, t.getMessage());
59 builder.clear();
60 builder.setName("org.apache.hadoop.ipc.RemoteException");
61 builder.setValue(ByteString.copyFrom(Bytes.toBytes(omg)));
62 t = ProtobufUtil.toException(builder.build());
63 assertEquals(omg, t.getMessage());
64 }
65
66
67
68
69
70
71 @Test
72 public void testGet() throws IOException {
73 ClientProtos.Get.Builder getBuilder = ClientProtos.Get.newBuilder();
74 getBuilder.setRow(ByteString.copyFromUtf8("row"));
75 Column.Builder columnBuilder = Column.newBuilder();
76 columnBuilder.setFamily(ByteString.copyFromUtf8("f1"));
77 columnBuilder.addQualifier(ByteString.copyFromUtf8("c1"));
78 columnBuilder.addQualifier(ByteString.copyFromUtf8("c2"));
79 getBuilder.addColumn(columnBuilder.build());
80
81 columnBuilder.clear();
82 columnBuilder.setFamily(ByteString.copyFromUtf8("f2"));
83 getBuilder.addColumn(columnBuilder.build());
84
85 ClientProtos.Get proto = getBuilder.build();
86
87 assertEquals(1, proto.getMaxVersions());
88 assertEquals(true, proto.getCacheBlocks());
89
90
91 getBuilder = ClientProtos.Get.newBuilder(proto);
92 getBuilder.setMaxVersions(1);
93 getBuilder.setCacheBlocks(true);
94
95 Get get = ProtobufUtil.toGet(proto);
96 assertEquals(getBuilder.build(), ProtobufUtil.toGet(get));
97 }
98
99
100
101
102
103
104 @Test
105 public void testAppend() throws IOException {
106 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
107 mutateBuilder.setRow(ByteString.copyFromUtf8("row"));
108 mutateBuilder.setMutateType(MutationType.APPEND);
109 mutateBuilder.setTimestamp(111111);
110 ColumnValue.Builder valueBuilder = ColumnValue.newBuilder();
111 valueBuilder.setFamily(ByteString.copyFromUtf8("f1"));
112 QualifierValue.Builder qualifierBuilder = QualifierValue.newBuilder();
113 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c1"));
114 qualifierBuilder.setValue(ByteString.copyFromUtf8("v1"));
115 valueBuilder.addQualifierValue(qualifierBuilder.build());
116 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c2"));
117 qualifierBuilder.setValue(ByteString.copyFromUtf8("v2"));
118 valueBuilder.addQualifierValue(qualifierBuilder.build());
119 mutateBuilder.addColumnValue(valueBuilder.build());
120
121 MutationProto proto = mutateBuilder.build();
122
123 assertEquals(MutationProto.Durability.USE_DEFAULT, proto.getDurability());
124
125
126 mutateBuilder = MutationProto.newBuilder(proto);
127 mutateBuilder.setDurability(MutationProto.Durability.USE_DEFAULT);
128
129 Append append = ProtobufUtil.toAppend(proto, null);
130
131
132
133 long timestamp = append.getTimeStamp();
134 mutateBuilder.setTimestamp(timestamp);
135 for (ColumnValue.Builder column: mutateBuilder.getColumnValueBuilderList()) {
136 for (QualifierValue.Builder qualifier:
137 column.getQualifierValueBuilderList()) {
138 qualifier.setTimestamp(timestamp);
139 }
140 }
141 assertEquals(mutateBuilder.build(), ProtobufUtil.toMutation(MutationType.APPEND, append));
142 }
143
144
145
146
147
148
149 @Test
150 public void testDelete() throws IOException {
151 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
152 mutateBuilder.setRow(ByteString.copyFromUtf8("row"));
153 mutateBuilder.setMutateType(MutationType.DELETE);
154 mutateBuilder.setTimestamp(111111);
155 ColumnValue.Builder valueBuilder = ColumnValue.newBuilder();
156 valueBuilder.setFamily(ByteString.copyFromUtf8("f1"));
157 QualifierValue.Builder qualifierBuilder = QualifierValue.newBuilder();
158 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c1"));
159 qualifierBuilder.setDeleteType(DeleteType.DELETE_ONE_VERSION);
160 qualifierBuilder.setTimestamp(111222);
161 valueBuilder.addQualifierValue(qualifierBuilder.build());
162 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c2"));
163 qualifierBuilder.setDeleteType(DeleteType.DELETE_MULTIPLE_VERSIONS);
164 qualifierBuilder.setTimestamp(111333);
165 valueBuilder.addQualifierValue(qualifierBuilder.build());
166 mutateBuilder.addColumnValue(valueBuilder.build());
167
168 MutationProto proto = mutateBuilder.build();
169
170 assertEquals(MutationProto.Durability.USE_DEFAULT, proto.getDurability());
171
172
173 mutateBuilder = MutationProto.newBuilder(proto);
174 mutateBuilder.setDurability(MutationProto.Durability.USE_DEFAULT);
175
176 Delete delete = ProtobufUtil.toDelete(proto);
177
178
179
180 for (ColumnValue.Builder column:
181 mutateBuilder.getColumnValueBuilderList()) {
182 for (QualifierValue.Builder qualifier:
183 column.getQualifierValueBuilderList()) {
184 qualifier.setValue(ByteString.EMPTY);
185 }
186 }
187 assertEquals(mutateBuilder.build(),
188 ProtobufUtil.toMutation(MutationType.DELETE, delete));
189 }
190
191
192
193
194
195
196 @Test
197 public void testIncrement() throws IOException {
198 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
199 mutateBuilder.setRow(ByteString.copyFromUtf8("row"));
200 mutateBuilder.setMutateType(MutationType.INCREMENT);
201 ColumnValue.Builder valueBuilder = ColumnValue.newBuilder();
202 valueBuilder.setFamily(ByteString.copyFromUtf8("f1"));
203 QualifierValue.Builder qualifierBuilder = QualifierValue.newBuilder();
204 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c1"));
205 qualifierBuilder.setValue(ByteString.copyFrom(Bytes.toBytes(11L)));
206 valueBuilder.addQualifierValue(qualifierBuilder.build());
207 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c2"));
208 qualifierBuilder.setValue(ByteString.copyFrom(Bytes.toBytes(22L)));
209 valueBuilder.addQualifierValue(qualifierBuilder.build());
210 mutateBuilder.addColumnValue(valueBuilder.build());
211
212 MutationProto proto = mutateBuilder.build();
213
214 assertEquals(MutationProto.Durability.USE_DEFAULT, proto.getDurability());
215
216
217 mutateBuilder = MutationProto.newBuilder(proto);
218 mutateBuilder.setDurability(MutationProto.Durability.USE_DEFAULT);
219
220 Increment increment = ProtobufUtil.toIncrement(proto, null);
221 assertEquals(mutateBuilder.build(), ProtobufUtil.toMutation(increment));
222 }
223
224
225
226
227
228
229 @Test
230 public void testPut() throws IOException {
231 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
232 mutateBuilder.setRow(ByteString.copyFromUtf8("row"));
233 mutateBuilder.setMutateType(MutationType.PUT);
234 mutateBuilder.setTimestamp(111111);
235 ColumnValue.Builder valueBuilder = ColumnValue.newBuilder();
236 valueBuilder.setFamily(ByteString.copyFromUtf8("f1"));
237 QualifierValue.Builder qualifierBuilder = QualifierValue.newBuilder();
238 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c1"));
239 qualifierBuilder.setValue(ByteString.copyFromUtf8("v1"));
240 valueBuilder.addQualifierValue(qualifierBuilder.build());
241 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c2"));
242 qualifierBuilder.setValue(ByteString.copyFromUtf8("v2"));
243 qualifierBuilder.setTimestamp(222222);
244 valueBuilder.addQualifierValue(qualifierBuilder.build());
245 mutateBuilder.addColumnValue(valueBuilder.build());
246
247 MutationProto proto = mutateBuilder.build();
248
249 assertEquals(MutationProto.Durability.USE_DEFAULT, proto.getDurability());
250
251
252 mutateBuilder = MutationProto.newBuilder(proto);
253 mutateBuilder.setDurability(MutationProto.Durability.USE_DEFAULT);
254
255 Put put = ProtobufUtil.toPut(proto);
256
257
258
259
260 long timestamp = put.getTimeStamp();
261 for (ColumnValue.Builder column:
262 mutateBuilder.getColumnValueBuilderList()) {
263 for (QualifierValue.Builder qualifier:
264 column.getQualifierValueBuilderList()) {
265 if (!qualifier.hasTimestamp()) {
266 qualifier.setTimestamp(timestamp);
267 }
268 }
269 }
270 assertEquals(mutateBuilder.build(),
271 ProtobufUtil.toMutation(MutationType.PUT, put));
272 }
273
274
275
276
277
278
279 @Test
280 public void testScan() throws IOException {
281 ClientProtos.Scan.Builder scanBuilder = ClientProtos.Scan.newBuilder();
282 scanBuilder.setStartRow(ByteString.copyFromUtf8("row1"));
283 scanBuilder.setStopRow(ByteString.copyFromUtf8("row2"));
284 Column.Builder columnBuilder = Column.newBuilder();
285 columnBuilder.setFamily(ByteString.copyFromUtf8("f1"));
286 columnBuilder.addQualifier(ByteString.copyFromUtf8("c1"));
287 columnBuilder.addQualifier(ByteString.copyFromUtf8("c2"));
288 scanBuilder.addColumn(columnBuilder.build());
289
290 columnBuilder.clear();
291 columnBuilder.setFamily(ByteString.copyFromUtf8("f2"));
292 scanBuilder.addColumn(columnBuilder.build());
293
294 ClientProtos.Scan proto = scanBuilder.build();
295
296 assertEquals(1, proto.getMaxVersions());
297 assertEquals(true, proto.getCacheBlocks());
298
299 scanBuilder = ClientProtos.Scan.newBuilder(proto);
300 scanBuilder.setMaxVersions(1);
301 scanBuilder.setCacheBlocks(true);
302
303 Scan scan = ProtobufUtil.toScan(proto);
304 assertEquals(scanBuilder.build(), ProtobufUtil.toScan(scan));
305 }
306 }