1   /**
2    * Copyright 2011 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  // TODO: cover more test cases
38  @Category(SmallTests.class)
39  public class TestGet {
40    @Test
41    public void testAttributesSerialization() throws IOException {
42      Get get = new Get();
43      get.setAttribute("attribute1", Bytes.toBytes("value1"));
44      get.setAttribute("attribute2", Bytes.toBytes("value2"));
45      get.setAttribute("attribute3", Bytes.toBytes("value3"));
46  
47      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
48      DataOutput out = new DataOutputStream(byteArrayOutputStream);
49      get.write(out);
50  
51      Get get2 = new Get();
52      Assert.assertTrue(get2.getAttributesMap().isEmpty());
53  
54      get2.readFields(new DataInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())));
55  
56      Assert.assertNull(get2.getAttribute("absent"));
57      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), get2.getAttribute("attribute1")));
58      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), get2.getAttribute("attribute2")));
59      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value3"), get2.getAttribute("attribute3")));
60      Assert.assertEquals(3, get2.getAttributesMap().size());
61    }
62  
63    @Test
64    public void testGetAttributes() {
65      Get get = new Get();
66      Assert.assertTrue(get.getAttributesMap().isEmpty());
67      Assert.assertNull(get.getAttribute("absent"));
68  
69      get.setAttribute("absent", null);
70      Assert.assertTrue(get.getAttributesMap().isEmpty());
71      Assert.assertNull(get.getAttribute("absent"));
72  
73      // adding attribute
74      get.setAttribute("attribute1", Bytes.toBytes("value1"));
75      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), get.getAttribute("attribute1")));
76      Assert.assertEquals(1, get.getAttributesMap().size());
77      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value1"), get.getAttributesMap().get("attribute1")));
78  
79      // overriding attribute value
80      get.setAttribute("attribute1", Bytes.toBytes("value12"));
81      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), get.getAttribute("attribute1")));
82      Assert.assertEquals(1, get.getAttributesMap().size());
83      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value12"), get.getAttributesMap().get("attribute1")));
84  
85      // adding another attribute
86      get.setAttribute("attribute2", Bytes.toBytes("value2"));
87      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), get.getAttribute("attribute2")));
88      Assert.assertEquals(2, get.getAttributesMap().size());
89      Assert.assertTrue(Arrays.equals(Bytes.toBytes("value2"), get.getAttributesMap().get("attribute2")));
90  
91      // removing attribute
92      get.setAttribute("attribute2", null);
93      Assert.assertNull(get.getAttribute("attribute2"));
94      Assert.assertEquals(1, get.getAttributesMap().size());
95      Assert.assertNull(get.getAttributesMap().get("attribute2"));
96  
97      // removing non-existed attribute
98      get.setAttribute("attribute2", null);
99      Assert.assertNull(get.getAttribute("attribute2"));
100     Assert.assertEquals(1, get.getAttributesMap().size());
101     Assert.assertNull(get.getAttributesMap().get("attribute2"));
102 
103     // removing another attribute
104     get.setAttribute("attribute1", null);
105     Assert.assertNull(get.getAttribute("attribute1"));
106     Assert.assertTrue(get.getAttributesMap().isEmpty());
107     Assert.assertNull(get.getAttributesMap().get("attribute1"));
108   }
109 
110   @org.junit.Rule
111   public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu =
112     new org.apache.hadoop.hbase.ResourceCheckerJUnitRule();
113 }
114