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.SmallTests;
32  import org.apache.hadoop.hbase.util.Bytes;
33  import org.junit.Assert;
34  import org.junit.Test;
35  import org.junit.experimental.categories.Category;
36  
37  @Category(SmallTests.class)
38  public class TestAttributes {
39    @Test
40    public void testAttributesSerialization() throws IOException {
41      Put put = new Put();
42      put.setAttribute("attribute1", Bytes.toBytes("value1"));
43      put.setAttribute("attribute2", Bytes.toBytes("value2"));
44      put.setAttribute("attribute3", Bytes.toBytes("value3"));
45  
46      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
47      DataOutput out = new DataOutputStream(byteArrayOutputStream);
48      put.write(out);
49  
50      Put put2 = new Put();
51      Assert.assertTrue(put2.getAttributesMap().isEmpty());
52  
53      put2.readFields(new DataInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())));
54  
55      Assert.assertNull(put2.getAttribute("absent"));
56      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), put2.getAttribute("attribute1")));
57      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), put2.getAttribute("attribute2")));
58      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value3"), put2.getAttribute("attribute3")));
59      Assert.assertEquals(3, put2.getAttributesMap().size());
60    }
61  
62    @Test
63    public void testPutAttributes() {
64      Put put = new Put();
65      Assert.assertTrue(put.getAttributesMap().isEmpty());
66      Assert.assertNull(put.getAttribute("absent"));
67  
68      put.setAttribute("absent", null);
69      Assert.assertTrue(put.getAttributesMap().isEmpty());
70      Assert.assertNull(put.getAttribute("absent"));
71  
72      // adding attribute
73      put.setAttribute("attribute1", Bytes.toBytes("value1"));
74      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), put.getAttribute("attribute1")));
75      Assert.assertEquals(1, put.getAttributesMap().size());
76      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), put.getAttributesMap().get("attribute1")));
77  
78      // overriding attribute value
79      put.setAttribute("attribute1", Bytes.toBytes("value12"));
80      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), put.getAttribute("attribute1")));
81      Assert.assertEquals(1, put.getAttributesMap().size());
82      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), put.getAttributesMap().get("attribute1")));
83  
84      // adding another attribute
85      put.setAttribute("attribute2", Bytes.toBytes("value2"));
86      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), put.getAttribute("attribute2")));
87      Assert.assertEquals(2, put.getAttributesMap().size());
88      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), put.getAttributesMap().get("attribute2")));
89  
90      // removing attribute
91      put.setAttribute("attribute2", null);
92      Assert.assertNull(put.getAttribute("attribute2"));
93      Assert.assertEquals(1, put.getAttributesMap().size());
94      Assert.assertNull(put.getAttributesMap().get("attribute2"));
95  
96      // removing non-existed attribute
97      put.setAttribute("attribute2", null);
98      Assert.assertNull(put.getAttribute("attribute2"));
99      Assert.assertEquals(1, put.getAttributesMap().size());
100     Assert.assertNull(put.getAttributesMap().get("attribute2"));
101 
102     // removing another attribute
103     put.setAttribute("attribute1", null);
104     Assert.assertNull(put.getAttribute("attribute1"));
105     Assert.assertTrue(put.getAttributesMap().isEmpty());
106     Assert.assertNull(put.getAttributesMap().get("attribute1"));
107   }
108 
109 
110   @Test
111   public void testDeleteAttributes() {
112     Delete del = new Delete();
113     Assert.assertTrue(del.getAttributesMap().isEmpty());
114     Assert.assertNull(del.getAttribute("absent"));
115 
116     del.setAttribute("absent", null);
117     Assert.assertTrue(del.getAttributesMap().isEmpty());
118     Assert.assertNull(del.getAttribute("absent"));
119 
120     // adding attribute
121     del.setAttribute("attribute1", Bytes.toBytes("value1"));
122     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), del.getAttribute("attribute1")));
123     Assert.assertEquals(1, del.getAttributesMap().size());
124     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), del.getAttributesMap().get("attribute1")));
125 
126     // overriding attribute value
127     del.setAttribute("attribute1", Bytes.toBytes("value12"));
128     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), del.getAttribute("attribute1")));
129     Assert.assertEquals(1, del.getAttributesMap().size());
130     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), del.getAttributesMap().get("attribute1")));
131 
132     // adding another attribute
133     del.setAttribute("attribute2", Bytes.toBytes("value2"));
134     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), del.getAttribute("attribute2")));
135     Assert.assertEquals(2, del.getAttributesMap().size());
136     Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), del.getAttributesMap().get("attribute2")));
137 
138     // removing attribute
139     del.setAttribute("attribute2", null);
140     Assert.assertNull(del.getAttribute("attribute2"));
141     Assert.assertEquals(1, del.getAttributesMap().size());
142     Assert.assertNull(del.getAttributesMap().get("attribute2"));
143 
144     // removing non-existed attribute
145     del.setAttribute("attribute2", null);
146     Assert.assertNull(del.getAttribute("attribute2"));
147     Assert.assertEquals(1, del.getAttributesMap().size());
148     Assert.assertNull(del.getAttributesMap().get("attribute2"));
149 
150     // removing another attribute
151     del.setAttribute("attribute1", null);
152     Assert.assertNull(del.getAttribute("attribute1"));
153     Assert.assertTrue(del.getAttributesMap().isEmpty());
154     Assert.assertNull(del.getAttributesMap().get("attribute1"));
155   }
156 
157   @Test
158   public void testGetId() {
159     Get get = new Get();
160     Assert.assertNull("Make sure id is null if unset", get.toMap().get("id"));
161     get.setId("myId");
162     Assert.assertEquals("myId", get.toMap().get("id"));
163   }
164 
165   @Test
166   public void testAppendId() {
167     Append append = new Append();
168     Assert.assertNull("Make sure id is null if unset", append.toMap().get("id"));
169     append.setId("myId");
170     Assert.assertEquals("myId", append.toMap().get("id"));
171   }
172 
173   @Test
174   public void testDeleteId() {
175     Delete delete = new Delete();
176     Assert.assertNull("Make sure id is null if unset", delete.toMap().get("id"));
177     delete.setId("myId");
178     Assert.assertEquals("myId", delete.toMap().get("id"));
179   }
180 
181   @Test
182   public void testPutId() {
183     Put put = new Put();
184     Assert.assertNull("Make sure id is null if unset", put.toMap().get("id"));
185     put.setId("myId");
186     Assert.assertEquals("myId", put.toMap().get("id"));
187   }
188 
189   @Test
190   public void testScanId() {
191     Scan scan = new Scan();
192     Assert.assertNull("Make sure id is null if unset", scan.toMap().get("id"));
193     scan.setId("myId");
194     Assert.assertEquals("myId", scan.toMap().get("id"));
195   }
196 
197   @org.junit.Rule
198   public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu =
199     new org.apache.hadoop.hbase.ResourceCheckerJUnitRule();
200 }
201