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.regionserver;
019
020import static org.junit.Assert.assertEquals;
021import static org.junit.Assert.assertNotEquals;
022
023import java.util.HashMap;
024import java.util.Map;
025
026import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
027import org.apache.hadoop.hbase.HBaseClassTestRule;
028import org.apache.hadoop.hbase.testclassification.MetricsTests;
029import org.apache.hadoop.hbase.testclassification.SmallTests;
030import org.junit.ClassRule;
031import org.junit.Test;
032import org.junit.experimental.categories.Category;
033
034@Category({MetricsTests.class, SmallTests.class})
035public class TestMetricsRegionSourceImpl {
036  @ClassRule
037  public static final HBaseClassTestRule CLASS_RULE =
038      HBaseClassTestRule.forClass(TestMetricsRegionSourceImpl.class);
039
040  @SuppressWarnings("SelfComparison")
041  @Test
042  public void testCompareToHashCodeEquals() {
043    MetricsRegionServerSourceFactory fact = CompatibilitySingletonFactory.getInstance(
044            MetricsRegionServerSourceFactory.class);
045
046    MetricsRegionSource one = fact.createRegion(new RegionWrapperStub("TEST"));
047    MetricsRegionSource oneClone = fact.createRegion(new RegionWrapperStub("TEST"));
048    MetricsRegionSource two = fact.createRegion(new RegionWrapperStub("TWO"));
049
050    assertEquals(0, one.compareTo(oneClone));
051    assertEquals(one.hashCode(), oneClone.hashCode());
052    assertNotEquals(one, two);
053
054    assertNotEquals(0, one.compareTo(two));
055    assertNotEquals(0, two.compareTo(one));
056    assertNotEquals(one.compareTo(two), two.compareTo(one));
057    assertEquals(0, two.compareTo(two));
058  }
059
060  @Test(expected = RuntimeException.class)
061  public void testNoGetRegionServerMetricsSourceImpl() {
062    // This should throw an exception because MetricsRegionSourceImpl should only
063    // be created by a factory.
064    CompatibilitySingletonFactory.getInstance(MetricsRegionSource.class);
065  }
066
067  static class RegionWrapperStub implements MetricsRegionWrapper {
068
069    private String regionName;
070
071    RegionWrapperStub(String regionName) {
072      this.regionName = regionName;
073    }
074
075    @Override
076    public String getTableName() {
077      return null;
078    }
079
080    @Override
081    public String getNamespace() {
082      return null;
083    }
084
085    @Override
086    public String getRegionName() {
087      return this.regionName;
088    }
089
090    @Override
091    public long getNumStores() {
092      return 0;
093    }
094
095    @Override
096    public long getNumStoreFiles() {
097      return 0;
098    }
099
100    @Override
101    public long getStoreRefCount() {
102      return 0;
103    }
104
105    @Override
106    public long getMaxCompactedStoreFileRefCount() {
107      return 0;
108    }
109
110    @Override
111    public long getMemStoreSize() {
112      return 0;
113    }
114
115    @Override
116    public long getStoreFileSize() {
117      return 0;
118    }
119
120    @Override
121    public long getReadRequestCount() {
122      return 0;
123    }
124
125    @Override
126    public long getFilteredReadRequestCount() {
127      return 0;
128    }
129
130    @Override
131    public long getMaxStoreFileAge() {
132      return 0;
133    }
134
135    @Override
136    public long getMinStoreFileAge() {
137      return 0;
138    }
139
140    @Override
141    public long getAvgStoreFileAge() {
142      return 0;
143    }
144
145    @Override
146    public long getNumReferenceFiles() {
147      return 0;
148    }
149
150    @Override
151    public long getWriteRequestCount() {
152      return 0;
153    }
154
155    @Override
156    public long getNumFilesCompacted() {
157      return 0;
158    }
159
160    @Override
161    public long getNumBytesCompacted() {
162      return 0;
163    }
164
165    @Override
166    public long getLastMajorCompactionAge() {
167      return 0;
168    }
169
170    @Override
171    public long getNumCompactionsCompleted() {
172      return 0;
173    }
174
175    @Override
176    public long getNumCompactionsFailed() {
177      return 0;
178    }
179
180    @Override
181    public int getRegionHashCode() {
182      return regionName.hashCode();
183    }
184
185    /**
186     * Always return 0 for testing
187     */
188    @Override
189    public int getReplicaId() {
190      return 0;
191    }
192
193    @Override
194    public long getNumCompactionsQueued() {
195      return 0;
196    }
197
198    @Override
199    public long getNumFlushesQueued() {
200      return 0;
201    }
202
203    @Override
204    public long getMaxCompactionQueueSize() {
205      return 0;
206    }
207
208    @Override
209    public long getMaxFlushQueueSize() {
210      return 0;
211    }
212
213    @Override
214    public long getTotalRequestCount() {
215      return 0;
216    }
217
218    @Override
219    public Map<String, Long> getMemstoreOnlyRowReadsCount() {
220      Map<String, Long> map = new HashMap<String, Long>();
221      map.put("info", 0L);
222      return map;
223    }
224
225    @Override
226    public Map<String, Long> getMixedRowReadsCount() {
227      Map<String, Long> map = new HashMap<String, Long>();
228      map.put("info", 0L);
229      return map;
230    }
231  }
232}