001/** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.rest.model; 019 020import static org.junit.Assert.assertEquals; 021import static org.junit.Assert.assertFalse; 022import static org.junit.Assert.assertTrue; 023 024import java.util.Iterator; 025import org.apache.hadoop.hbase.HBaseClassTestRule; 026import org.apache.hadoop.hbase.TableName; 027import org.apache.hadoop.hbase.testclassification.RestTests; 028import org.apache.hadoop.hbase.testclassification.SmallTests; 029import org.apache.hadoop.hbase.util.Bytes; 030import org.junit.ClassRule; 031import org.junit.experimental.categories.Category; 032 033@Category({RestTests.class, SmallTests.class}) 034public class TestStorageClusterStatusModel extends TestModelBase<StorageClusterStatusModel> { 035 @ClassRule 036 public static final HBaseClassTestRule CLASS_RULE = 037 HBaseClassTestRule.forClass(TestStorageClusterStatusModel.class); 038 039 public TestStorageClusterStatusModel() throws Exception { 040 super(StorageClusterStatusModel.class); 041 042 AS_XML = 043 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + 044 "<ClusterStatus averageLoad=\"1.0\" regions=\"2\" requests=\"0\">" + 045 "<DeadNodes/><LiveNodes>" + 046 "<Node heapSizeMB=\"128\" maxHeapSizeMB=\"1024\" name=\"test1\" requests=\"0\" " + 047 "startCode=\"1245219839331\"><Region currentCompactedKVs=\"1\" memstoreSizeMB=\"0\" " + 048 "name=\"aGJhc2U6cm9vdCwsMA==\" readRequestsCount=\"1\" rootIndexSizeKB=\"1\" " + 049 "storefileIndexSizeKB=\"0\" storefileSizeMB=\"0\" storefiles=\"1\" stores=\"1\" " + 050 "totalCompactingKVs=\"1\" totalStaticBloomSizeKB=\"1\" totalStaticIndexSizeKB=\"1\" " + 051 "writeRequestsCount=\"2\"/></Node>" + 052 "<Node heapSizeMB=\"512\" maxHeapSizeMB=\"1024\" name=\"test2\" requests=\"0\" " + 053 "startCode=\"1245239331198\">" + 054 "<Region currentCompactedKVs=\"1\" memstoreSizeMB=\"0\" " + 055 "name=\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\" readRequestsCount=\"1\" " + 056 "rootIndexSizeKB=\"1\" storefileIndexSizeKB=\"0\" storefileSizeMB=\"0\" " + 057 "storefiles=\"1\" stores=\"1\" totalCompactingKVs=\"1\" totalStaticBloomSizeKB=\"1\" " + 058 "totalStaticIndexSizeKB=\"1\" writeRequestsCount=\"2\"/></Node></LiveNodes>" + 059 "</ClusterStatus>"; 060 061 AS_PB = 062 "Cj8KBXRlc3QxEOO6i+eeJBgAIIABKIAIMicKDWhiYXNlOnJvb3QsLDAQARgBIAAoADAAOAFAAkgB" + 063 "UAFYAWABaAEKSwoFdGVzdDIQ/pKx8J4kGAAggAQogAgyMwoZaGJhc2U6bWV0YSwsMTI0NjAwMDA0" + 064 "MzcyNBABGAEgACgAMAA4AUACSAFQAVgBYAFoARgCIAApAAAAAAAA8D8="; 065 066 067 //Using jackson will break json backward compatibilty for this representation 068 //but the original one was broken as it would only print one Node element 069 //so the format itself was broken 070 AS_JSON = 071 "{\"regions\":2,\"requests\":0,\"averageLoad\":1.0,\"LiveNodes\":[{\"name\":\"test1\"," + 072 "\"Region\":[{\"name\":\"aGJhc2U6cm9vdCwsMA==\",\"stores\":1,\"storefiles\":1," + 073 "\"storefileSizeMB\":0,\"memStoreSizeMB\":0,\"storefileIndexSizeKB\":0," + 074 "\"readRequestsCount\":1,\"writeRequestsCount\":2,\"rootIndexSizeKB\":1," + 075 "\"totalStaticIndexSizeKB\":1,\"totalStaticBloomSizeKB\":1,\"totalCompactingKVs\":1," + 076 "\"currentCompactedKVs\":1}],\"requests\":0,\"startCode\":1245219839331," + 077 "\"heapSizeMB\":128,\"maxHeapSizeMB\":1024},{\"name\":\"test2\"," + 078 "\"Region\":[{\"name\":\"aGJhc2U6bWV0YSwsMTI0NjAwMDA0MzcyNA==\",\"stores\":1," + 079 "\"storefiles\":1,\"storefileSizeMB\":0,\"memStoreSizeMB\":0,\"storefileIndexSizeKB\":0," + 080 "\"readRequestsCount\":1,\"writeRequestsCount\":2,\"rootIndexSizeKB\":1," + 081 "\"totalStaticIndexSizeKB\":1,\"totalStaticBloomSizeKB\":1,\"totalCompactingKVs\":1," + 082 "\"currentCompactedKVs\":1}],\"requests\":0,\"startCode\":1245239331198," + 083 "\"heapSizeMB\":512,\"maxHeapSizeMB\":1024}],\"DeadNodes\":[]}"; 084 } 085 086 @Override 087 protected StorageClusterStatusModel buildTestModel() { 088 StorageClusterStatusModel model = new StorageClusterStatusModel(); 089 model.setRegions(2); 090 model.setRequests(0); 091 model.setAverageLoad(1.0); 092 model.addLiveNode("test1", 1245219839331L, 128, 1024) 093 .addRegion(Bytes.toBytes("hbase:root,,0"), 1, 1, 0, 0, 0, 1, 2, 1, 1, 1, 1, 1); 094 model.addLiveNode("test2", 1245239331198L, 512, 1024) 095 .addRegion(Bytes.toBytes(TableName.META_TABLE_NAME+",,1246000043724"),1, 1, 0, 0, 0, 096 1, 2, 1, 1, 1, 1, 1); 097 return model; 098 } 099 100 @Override 101 protected void checkModel(StorageClusterStatusModel model) { 102 assertEquals(2, model.getRegions()); 103 assertEquals(0, model.getRequests()); 104 assertEquals(1.0, model.getAverageLoad(), 0.0); 105 Iterator<StorageClusterStatusModel.Node> nodes = 106 model.getLiveNodes().iterator(); 107 StorageClusterStatusModel.Node node = nodes.next(); 108 assertEquals("test1", node.getName()); 109 assertEquals(1245219839331L, node.getStartCode()); 110 assertEquals(128, node.getHeapSizeMB()); 111 assertEquals(1024, node.getMaxHeapSizeMB()); 112 Iterator<StorageClusterStatusModel.Node.Region> regions = 113 node.getRegions().iterator(); 114 StorageClusterStatusModel.Node.Region region = regions.next(); 115 assertTrue(Bytes.toString(region.getName()).equals( 116 "hbase:root,,0")); 117 assertEquals(1, region.getStores()); 118 assertEquals(1, region.getStorefiles()); 119 assertEquals(0, region.getStorefileSizeMB()); 120 assertEquals(0, region.getMemStoreSizeMB()); 121 assertEquals(0, region.getStorefileIndexSizeKB()); 122 assertEquals(1, region.getReadRequestsCount()); 123 assertEquals(2, region.getWriteRequestsCount()); 124 assertEquals(1, region.getRootIndexSizeKB()); 125 assertEquals(1, region.getTotalStaticIndexSizeKB()); 126 assertEquals(1, region.getTotalStaticBloomSizeKB()); 127 assertEquals(1, region.getTotalCompactingKVs()); 128 assertEquals(1, region.getCurrentCompactedKVs()); 129 assertFalse(regions.hasNext()); 130 node = nodes.next(); 131 assertEquals("test2", node.getName()); 132 assertEquals(1245239331198L, node.getStartCode()); 133 assertEquals(512, node.getHeapSizeMB()); 134 assertEquals(1024, node.getMaxHeapSizeMB()); 135 regions = node.getRegions().iterator(); 136 region = regions.next(); 137 assertEquals(Bytes.toString(region.getName()), 138 TableName.META_TABLE_NAME+",,1246000043724"); 139 assertEquals(1, region.getStores()); 140 assertEquals(1, region.getStorefiles()); 141 assertEquals(0, region.getStorefileSizeMB()); 142 assertEquals(0, region.getMemStoreSizeMB()); 143 assertEquals(0, region.getStorefileIndexSizeKB()); 144 assertEquals(1, region.getReadRequestsCount()); 145 assertEquals(2, region.getWriteRequestsCount()); 146 assertEquals(1, region.getRootIndexSizeKB()); 147 assertEquals(1, region.getTotalStaticIndexSizeKB()); 148 assertEquals(1, region.getTotalStaticBloomSizeKB()); 149 assertEquals(1, region.getTotalCompactingKVs()); 150 assertEquals(1, region.getCurrentCompactedKVs()); 151 152 assertFalse(regions.hasNext()); 153 assertFalse(nodes.hasNext()); 154 } 155} 156