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 com.google.protobuf.HBaseZeroCopyByteString;
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(HBaseZeroCopyByteString.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(HBaseZeroCopyByteString.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 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
109 mutateBuilder.setRow(ByteString.copyFromUtf8("row"));
110 mutateBuilder.setMutateType(MutationType.APPEND);
111 mutateBuilder.setTimestamp(111111);
112 ColumnValue.Builder valueBuilder = ColumnValue.newBuilder();
113 valueBuilder.setFamily(ByteString.copyFromUtf8("f1"));
114 QualifierValue.Builder qualifierBuilder = QualifierValue.newBuilder();
115 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c1"));
116 qualifierBuilder.setValue(ByteString.copyFromUtf8("v1"));
117 valueBuilder.addQualifierValue(qualifierBuilder.build());
118 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c2"));
119 qualifierBuilder.setValue(ByteString.copyFromUtf8("v2"));
120 valueBuilder.addQualifierValue(qualifierBuilder.build());
121 mutateBuilder.addColumnValue(valueBuilder.build());
122
123 MutationProto proto = mutateBuilder.build();
124
125 assertEquals(MutationProto.Durability.USE_DEFAULT, proto.getDurability());
126
127
128 mutateBuilder = MutationProto.newBuilder(proto);
129 mutateBuilder.setDurability(MutationProto.Durability.USE_DEFAULT);
130
131 Append append = ProtobufUtil.toAppend(proto, null);
132
133
134
135 long timestamp = append.getTimeStamp();
136 mutateBuilder.setTimestamp(timestamp);
137 for (ColumnValue.Builder column: mutateBuilder.getColumnValueBuilderList()) {
138 for (QualifierValue.Builder qualifier:
139 column.getQualifierValueBuilderList()) {
140 qualifier.setTimestamp(timestamp);
141 }
142 }
143 assertEquals(mutateBuilder.build(), ProtobufUtil.toMutation(MutationType.APPEND, append));
144 }
145
146
147
148
149
150
151 @Test
152 public void testDelete() throws IOException {
153 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
154 mutateBuilder.setRow(ByteString.copyFromUtf8("row"));
155 mutateBuilder.setMutateType(MutationType.DELETE);
156 mutateBuilder.setTimestamp(111111);
157 ColumnValue.Builder valueBuilder = ColumnValue.newBuilder();
158 valueBuilder.setFamily(ByteString.copyFromUtf8("f1"));
159 QualifierValue.Builder qualifierBuilder = QualifierValue.newBuilder();
160 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c1"));
161 qualifierBuilder.setDeleteType(DeleteType.DELETE_ONE_VERSION);
162 qualifierBuilder.setTimestamp(111222);
163 valueBuilder.addQualifierValue(qualifierBuilder.build());
164 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c2"));
165 qualifierBuilder.setDeleteType(DeleteType.DELETE_MULTIPLE_VERSIONS);
166 qualifierBuilder.setTimestamp(111333);
167 valueBuilder.addQualifierValue(qualifierBuilder.build());
168 mutateBuilder.addColumnValue(valueBuilder.build());
169
170 MutationProto proto = mutateBuilder.build();
171
172 assertEquals(MutationProto.Durability.USE_DEFAULT, proto.getDurability());
173
174
175 mutateBuilder = MutationProto.newBuilder(proto);
176 mutateBuilder.setDurability(MutationProto.Durability.USE_DEFAULT);
177
178 Delete delete = ProtobufUtil.toDelete(proto);
179
180
181
182 for (ColumnValue.Builder column:
183 mutateBuilder.getColumnValueBuilderList()) {
184 for (QualifierValue.Builder qualifier:
185 column.getQualifierValueBuilderList()) {
186 qualifier.setValue(ByteString.EMPTY);
187 }
188 }
189 assertEquals(mutateBuilder.build(),
190 ProtobufUtil.toMutation(MutationType.DELETE, delete));
191 }
192
193
194
195
196
197
198 @Test
199 public void testIncrement() throws IOException {
200 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
201 mutateBuilder.setRow(ByteString.copyFromUtf8("row"));
202 mutateBuilder.setMutateType(MutationType.INCREMENT);
203 ColumnValue.Builder valueBuilder = ColumnValue.newBuilder();
204 valueBuilder.setFamily(ByteString.copyFromUtf8("f1"));
205 QualifierValue.Builder qualifierBuilder = QualifierValue.newBuilder();
206 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c1"));
207 qualifierBuilder.setValue(HBaseZeroCopyByteString.wrap(Bytes.toBytes(11L)));
208 valueBuilder.addQualifierValue(qualifierBuilder.build());
209 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c2"));
210 qualifierBuilder.setValue(HBaseZeroCopyByteString.wrap(Bytes.toBytes(22L)));
211 valueBuilder.addQualifierValue(qualifierBuilder.build());
212 mutateBuilder.addColumnValue(valueBuilder.build());
213
214 MutationProto proto = mutateBuilder.build();
215
216 assertEquals(MutationProto.Durability.USE_DEFAULT, proto.getDurability());
217
218
219 mutateBuilder = MutationProto.newBuilder(proto);
220 mutateBuilder.setDurability(MutationProto.Durability.USE_DEFAULT);
221
222 Increment increment = ProtobufUtil.toIncrement(proto, null);
223 assertEquals(mutateBuilder.build(),
224 ProtobufUtil.toMutation(increment, MutationProto.newBuilder(), HConstants.NO_NONCE));
225 }
226
227
228
229
230
231
232 @Test
233 public void testPut() throws IOException {
234 MutationProto.Builder mutateBuilder = MutationProto.newBuilder();
235 mutateBuilder.setRow(ByteString.copyFromUtf8("row"));
236 mutateBuilder.setMutateType(MutationType.PUT);
237 mutateBuilder.setTimestamp(111111);
238 ColumnValue.Builder valueBuilder = ColumnValue.newBuilder();
239 valueBuilder.setFamily(ByteString.copyFromUtf8("f1"));
240 QualifierValue.Builder qualifierBuilder = QualifierValue.newBuilder();
241 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c1"));
242 qualifierBuilder.setValue(ByteString.copyFromUtf8("v1"));
243 valueBuilder.addQualifierValue(qualifierBuilder.build());
244 qualifierBuilder.setQualifier(ByteString.copyFromUtf8("c2"));
245 qualifierBuilder.setValue(ByteString.copyFromUtf8("v2"));
246 qualifierBuilder.setTimestamp(222222);
247 valueBuilder.addQualifierValue(qualifierBuilder.build());
248 mutateBuilder.addColumnValue(valueBuilder.build());
249
250 MutationProto proto = mutateBuilder.build();
251
252 assertEquals(MutationProto.Durability.USE_DEFAULT, proto.getDurability());
253
254
255 mutateBuilder = MutationProto.newBuilder(proto);
256 mutateBuilder.setDurability(MutationProto.Durability.USE_DEFAULT);
257
258 Put put = ProtobufUtil.toPut(proto);
259
260
261
262
263 long timestamp = put.getTimeStamp();
264 for (ColumnValue.Builder column:
265 mutateBuilder.getColumnValueBuilderList()) {
266 for (QualifierValue.Builder qualifier:
267 column.getQualifierValueBuilderList()) {
268 if (!qualifier.hasTimestamp()) {
269 qualifier.setTimestamp(timestamp);
270 }
271 }
272 }
273 assertEquals(mutateBuilder.build(),
274 ProtobufUtil.toMutation(MutationType.PUT, put));
275 }
276
277
278
279
280
281
282 @Test
283 public void testScan() throws IOException {
284 ClientProtos.Scan.Builder scanBuilder = ClientProtos.Scan.newBuilder();
285 scanBuilder.setStartRow(ByteString.copyFromUtf8("row1"));
286 scanBuilder.setStopRow(ByteString.copyFromUtf8("row2"));
287 Column.Builder columnBuilder = Column.newBuilder();
288 columnBuilder.setFamily(ByteString.copyFromUtf8("f1"));
289 columnBuilder.addQualifier(ByteString.copyFromUtf8("c1"));
290 columnBuilder.addQualifier(ByteString.copyFromUtf8("c2"));
291 scanBuilder.addColumn(columnBuilder.build());
292
293 columnBuilder.clear();
294 columnBuilder.setFamily(ByteString.copyFromUtf8("f2"));
295 scanBuilder.addColumn(columnBuilder.build());
296
297 ClientProtos.Scan proto = scanBuilder.build();
298
299 assertEquals(1, proto.getMaxVersions());
300 assertEquals(true, proto.getCacheBlocks());
301
302 scanBuilder = ClientProtos.Scan.newBuilder(proto);
303 scanBuilder.setMaxVersions(1);
304 scanBuilder.setCacheBlocks(true);
305
306 Scan scan = ProtobufUtil.toScan(proto);
307 assertEquals(scanBuilder.build(), ProtobufUtil.toScan(scan));
308 }
309 }