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