1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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