1   /**
2    * Copyright 2009 The Apache Software Foundation
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *     http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing, software
15   * distributed under the License is distributed on an "AS IS" BASIS,
16   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17   * See the License for the specific language governing permissions and
18   * limitations under the License.
19   */
20  
21  package org.apache.hadoop.hbase.client;
22  
23  import java.io.ByteArrayInputStream;
24  import java.io.ByteArrayOutputStream;
25  import java.io.DataInputStream;
26  import java.io.DataOutput;
27  import java.io.DataOutputStream;
28  import java.io.IOException;
29  import java.util.Arrays;
30  
31  import org.apache.hadoop.hbase.util.Bytes;
32  import org.junit.Assert;
33  import org.junit.Test;
34  
35  public class TestAttributes {
36    @Test
37    public void testAttributesSerialization() throws IOException {
38      Put put = new Put();
39      put.setAttribute("attribute1", Bytes.toBytes("value1"));
40      put.setAttribute("attribute2", Bytes.toBytes("value2"));
41      put.setAttribute("attribute3", Bytes.toBytes("value3"));
42  
43      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
44      DataOutput out = new DataOutputStream(byteArrayOutputStream);
45      put.write(out);
46  
47      Put put2 = new Put();
48      Assert.assertTrue(put2.getAttributesMap().isEmpty());
49  
50      put2.readFields(new DataInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())));
51  
52      Assert.assertNull(put2.getAttribute("absent"));
53      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), put2.getAttribute("attribute1")));
54      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), put2.getAttribute("attribute2")));
55      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value3"), put2.getAttribute("attribute3")));
56      Assert.assertEquals(3, put2.getAttributesMap().size());
57    }
58  
59    @Test
60    public void testPutAttributes() {
61      Put put = new Put();
62      Assert.assertTrue(put.getAttributesMap().isEmpty());
63      Assert.assertNull(put.getAttribute("absent"));
64  
65      put.setAttribute("absent", null);
66      Assert.assertTrue(put.getAttributesMap().isEmpty());
67      Assert.assertNull(put.getAttribute("absent"));
68  
69      // adding attribute
70      put.setAttribute("attribute1", Bytes.toBytes("value1"));
71      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), put.getAttribute("attribute1")));
72      Assert.assertEquals(1, put.getAttributesMap().size());
73      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), put.getAttributesMap().get("attribute1")));
74  
75      // overriding attribute value
76      put.setAttribute("attribute1", Bytes.toBytes("value12"));
77      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), put.getAttribute("attribute1")));
78      Assert.assertEquals(1, put.getAttributesMap().size());
79      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), put.getAttributesMap().get("attribute1")));
80  
81      // adding another attribute
82      put.setAttribute("attribute2", Bytes.toBytes("value2"));
83      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), put.getAttribute("attribute2")));
84      Assert.assertEquals(2, put.getAttributesMap().size());
85      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), put.getAttributesMap().get("attribute2")));
86  
87      // removing attribute
88      put.setAttribute("attribute2", null);
89      Assert.assertNull(put.getAttribute("attribute2"));
90      Assert.assertEquals(1, put.getAttributesMap().size());
91      Assert.assertNull(put.getAttributesMap().get("attribute2"));
92  
93      // removing non-existed attribute
94      put.setAttribute("attribute2", null);
95      Assert.assertNull(put.getAttribute("attribute2"));
96      Assert.assertEquals(1, put.getAttributesMap().size());
97      Assert.assertNull(put.getAttributesMap().get("attribute2"));
98  
99      // removing another attribute
100     put.setAttribute("attribute1", null);
101     Assert.assertNull(put.getAttribute("attribute1"));
102     Assert.assertTrue(put.getAttributesMap().isEmpty());
103     Assert.assertNull(put.getAttributesMap().get("attribute1"));
104   }
105 
106 
107   @Test
108   public void testDeleteAttributes() {
109     Delete del = new Delete();
110     Assert.assertTrue(del.getAttributesMap().isEmpty());
111     Assert.assertNull(del.getAttribute("absent"));
112 
113     del.setAttribute("absent", null);
114     Assert.assertTrue(del.getAttributesMap().isEmpty());
115     Assert.assertNull(del.getAttribute("absent"));
116 
117     // adding attribute
118     del.setAttribute("attribute1", Bytes.toBytes("value1"));
119     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), del.getAttribute("attribute1")));
120     Assert.assertEquals(1, del.getAttributesMap().size());
121     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), del.getAttributesMap().get("attribute1")));
122 
123     // overriding attribute value
124     del.setAttribute("attribute1", Bytes.toBytes("value12"));
125     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), del.getAttribute("attribute1")));
126     Assert.assertEquals(1, del.getAttributesMap().size());
127     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), del.getAttributesMap().get("attribute1")));
128 
129     // adding another attribute
130     del.setAttribute("attribute2", Bytes.toBytes("value2"));
131     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), del.getAttribute("attribute2")));
132     Assert.assertEquals(2, del.getAttributesMap().size());
133     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), del.getAttributesMap().get("attribute2")));
134 
135     // removing attribute
136     del.setAttribute("attribute2", null);
137     Assert.assertNull(del.getAttribute("attribute2"));
138     Assert.assertEquals(1, del.getAttributesMap().size());
139     Assert.assertNull(del.getAttributesMap().get("attribute2"));
140 
141     // removing non-existed attribute
142     del.setAttribute("attribute2", null);
143     Assert.assertNull(del.getAttribute("attribute2"));
144     Assert.assertEquals(1, del.getAttributesMap().size());
145     Assert.assertNull(del.getAttributesMap().get("attribute2"));
146 
147     // removing another attribute
148     del.setAttribute("attribute1", null);
149     Assert.assertNull(del.getAttribute("attribute1"));
150     Assert.assertTrue(del.getAttributesMap().isEmpty());
151     Assert.assertNull(del.getAttributesMap().get("attribute1"));
152   }
153 }