View Javadoc

1   /*
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  
20  package org.apache.hadoop.hbase.rest.model;
21  
22  import java.io.IOException;
23  import java.io.StringReader;
24  import java.io.StringWriter;
25  import java.util.Iterator;
26  
27  import javax.xml.bind.JAXBContext;
28  import javax.xml.bind.JAXBException;
29  
30  import org.apache.hadoop.hbase.SmallTests;
31  import org.apache.hadoop.hbase.TableName;
32  import org.apache.hadoop.hbase.util.Base64;
33  import org.apache.hadoop.hbase.util.Bytes;
34  
35  import junit.framework.TestCase;
36  import org.junit.experimental.categories.Category;
37  
38  @Category(SmallTests.class)
39  public class TestStorageClusterStatusModel extends TestCase {
40  
41    private static final String AS_XML =
42      "<ClusterStatus requests=\"0\" regions=\"2\" averageLoad=\"1.0\">" +
43      "<DeadNodes/>" + 
44      "<LiveNodes><Node startCode=\"1245219839331\" requests=\"0\"" + 
45        " name=\"test1\" maxHeapSizeMB=\"1024\" heapSizeMB=\"128\">" + 
46          "<Region stores=\"1\" storefiles=\"1\" storefileSizeMB=\"0\"" +
47          " storefileIndexSizeMB=\"0\" name=\"aGJhc2U6cm9vdCwsMA==\"" +
48          " memstoreSizeMB=\"0\" readRequestsCount=\"1\"" +
49          " writeRequestsCount=\"2\" rootIndexSizeKB=\"1\"" +
50          " totalStaticIndexSizeKB=\"1\" totalStaticBloomSizeKB=\"1\"" +
51          " totalCompactingKVs=\"1\" currentCompactedKVs=\"1\"/></Node>" + 
52        "<Node startCode=\"1245239331198\" requests=\"0\" name=\"test2\"" + 
53          " maxHeapSizeMB=\"1024\" heapSizeMB=\"512\">" + 
54          "<Region stores=\"1\" storefiles=\"1\" storefileSizeMB=\"0\"" +
55          " storefileIndexSizeMB=\"0\" name=\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\"" +
56          " memstoreSizeMB=\"0\" readRequestsCount=\"1\"" +
57          " writeRequestsCount=\"2\" rootIndexSizeKB=\"1\"" +
58          " totalStaticIndexSizeKB=\"1\" totalStaticBloomSizeKB=\"1\"" +
59          " totalCompactingKVs=\"1\" currentCompactedKVs=\"1\"/></Node>"+
60      "</LiveNodes></ClusterStatus>";
61  
62    private static final String AS_PB =
63        "Cj8KBXRlc3QxEOO6i+eeJBgAIIABKIAIMicKDWhiYXNlOnJvb3QsLDAQARgBIAAoADAAOAFAAkgB"+
64        "UAFYAWABaAEKSwoFdGVzdDIQ/pKx8J4kGAAggAQogAgyMwoZaGJhc2U6bWV0YSwsMTI0NjAwMDA0"+
65        "MzcyNBABGAEgACgAMAA4AUACSAFQAVgBYAFoARgCIAApAAAAAAAA8D8=";
66  
67    
68    private JAXBContext context;
69  
70    public TestStorageClusterStatusModel() throws JAXBException {
71      super();
72      context = JAXBContext.newInstance(StorageClusterStatusModel.class);
73    }
74  
75    private StorageClusterStatusModel buildTestModel() {
76      StorageClusterStatusModel model = new StorageClusterStatusModel();
77      model.setRegions(2);
78      model.setRequests(0);
79      model.setAverageLoad(1.0);
80      model.addLiveNode("test1", 1245219839331L, 128, 1024)
81        .addRegion(Bytes.toBytes(TableName.ROOT_TABLE_NAME+",,0"), 1, 1, 0, 0, 0, 1, 2, 1, 1, 1, 1, 1);
82      model.addLiveNode("test2", 1245239331198L, 512, 1024)
83        .addRegion(Bytes.toBytes(TableName.META_TABLE_NAME+",,1246000043724"),1, 1, 0, 0, 0,
84            1, 2, 1, 1, 1, 1, 1);
85      return model;
86    }
87  
88    @SuppressWarnings("unused")
89    private String toXML(StorageClusterStatusModel model) throws JAXBException {
90      StringWriter writer = new StringWriter();
91      context.createMarshaller().marshal(model, writer);
92      return writer.toString();
93    }
94  
95    private StorageClusterStatusModel fromXML(String xml) throws JAXBException {
96      return (StorageClusterStatusModel)
97        context.createUnmarshaller().unmarshal(new StringReader(xml));
98    }
99  
100   @SuppressWarnings("unused")
101   private byte[] toPB(StorageClusterStatusModel model) {
102     return model.createProtobufOutput();
103   }
104 
105   private StorageClusterStatusModel fromPB(String pb) throws IOException {
106     return (StorageClusterStatusModel) 
107       new StorageClusterStatusModel().getObjectFromMessage(Base64.decode(AS_PB));
108   }
109 
110   private void checkModel(StorageClusterStatusModel model) {
111     assertEquals(model.getRegions(), 2);
112     assertEquals(model.getRequests(), 0);
113     assertEquals(model.getAverageLoad(), 1.0);
114     Iterator<StorageClusterStatusModel.Node> nodes =
115       model.getLiveNodes().iterator();
116     StorageClusterStatusModel.Node node = nodes.next();
117     assertEquals(node.getName(), "test1");
118     assertEquals(node.getStartCode(), 1245219839331L);
119     assertEquals(node.getHeapSizeMB(), 128);
120     assertEquals(node.getMaxHeapSizeMB(), 1024);
121     Iterator<StorageClusterStatusModel.Node.Region> regions = 
122       node.getRegions().iterator();
123     StorageClusterStatusModel.Node.Region region = regions.next();
124     assertTrue(Bytes.toString(region.getName()).equals(
125         TableName.ROOT_TABLE_NAME+",,0"));
126     assertEquals(region.getStores(), 1);
127     assertEquals(region.getStorefiles(), 1);
128     assertEquals(region.getStorefileSizeMB(), 0);
129     assertEquals(region.getMemstoreSizeMB(), 0);
130     assertEquals(region.getStorefileIndexSizeMB(), 0);
131     assertEquals(region.getReadRequestsCount(), 1);
132     assertEquals(region.getWriteRequestsCount(), 2);
133     assertEquals(region.getRootIndexSizeKB(), 1);
134     assertEquals(region.getTotalStaticIndexSizeKB(), 1);
135     assertEquals(region.getTotalStaticBloomSizeKB(), 1);
136     assertEquals(region.getTotalCompactingKVs(), 1);
137     assertEquals(region.getCurrentCompactedKVs(), 1);
138     assertFalse(regions.hasNext());
139     node = nodes.next();
140     assertEquals(node.getName(), "test2");
141     assertEquals(node.getStartCode(), 1245239331198L);
142     assertEquals(node.getHeapSizeMB(), 512);
143     assertEquals(node.getMaxHeapSizeMB(), 1024);
144     regions = node.getRegions().iterator();
145     region = regions.next();
146     assertEquals(Bytes.toString(region.getName()),
147         TableName.META_TABLE_NAME+",,1246000043724");
148     assertEquals(region.getStores(), 1);
149     assertEquals(region.getStorefiles(), 1);
150     assertEquals(region.getStorefileSizeMB(), 0);
151     assertEquals(region.getMemstoreSizeMB(), 0);
152     assertEquals(region.getStorefileIndexSizeMB(), 0);
153     assertEquals(region.getReadRequestsCount(), 1);
154     assertEquals(region.getWriteRequestsCount(), 2);
155     assertEquals(region.getRootIndexSizeKB(), 1);
156     assertEquals(region.getTotalStaticIndexSizeKB(), 1);
157     assertEquals(region.getTotalStaticBloomSizeKB(), 1);
158     assertEquals(region.getTotalCompactingKVs(), 1);
159     assertEquals(region.getCurrentCompactedKVs(), 1);
160     
161     assertFalse(regions.hasNext());
162     assertFalse(nodes.hasNext());
163   }
164 
165   public void testBuildModel() throws Exception {
166     checkModel(buildTestModel());
167   }
168 
169   public void testFromXML() throws Exception {
170     checkModel(fromXML(AS_XML));
171   }
172 
173   public void testFromPB() throws Exception {
174     checkModel(fromPB(AS_PB));
175   }
176 
177 }
178