HBASE-24033 Add ut for loading the corrupt recovered hfiles (#1322)
[hbase.git] / hbase-server / src / test / java / org / apache / hadoop / hbase / master / TestAlwaysStandByHMaster.java
bloba49ae502f6545da3b6fdca51e9e96490cf836b02
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 package org.apache.hadoop.hbase.master;
20 import static junit.framework.TestCase.assertTrue;
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertFalse;
23 import static org.junit.Assert.assertNotNull;
24 import org.apache.hadoop.hbase.HBaseClassTestRule;
25 import org.apache.hadoop.hbase.HBaseTestingUtility;
26 import org.apache.hadoop.hbase.MiniClusterRule;
27 import org.apache.hadoop.hbase.StartMiniClusterOption;
28 import org.apache.hadoop.hbase.testclassification.MasterTests;
29 import org.apache.hadoop.hbase.testclassification.MediumTests;
30 import org.junit.ClassRule;
31 import org.junit.Test;
32 import org.junit.experimental.categories.Category;
34 @Category({MediumTests.class, MasterTests.class})
35 public class TestAlwaysStandByHMaster {
37 @ClassRule
38 public static final HBaseClassTestRule CLASS_RULE =
39 HBaseClassTestRule.forClass(TestAlwaysStandByHMaster.class);
41 private static final StartMiniClusterOption OPTION = StartMiniClusterOption.builder().
42 numAlwaysStandByMasters(1).numMasters(1).numRegionServers(1).build();
44 @ClassRule
45 public static final MiniClusterRule miniClusterRule = new MiniClusterRule(OPTION);
47 /**
48 * Tests that the AlwaysStandByHMaster does not transition to active state even if no active
49 * master exists.
51 @Test public void testAlwaysStandBy() throws Exception {
52 HBaseTestingUtility testUtil = miniClusterRule.getTestingUtility();
53 // Make sure there is an active master.
54 assertNotNull(testUtil.getMiniHBaseCluster().getMaster());
55 assertEquals(2, testUtil.getMiniHBaseCluster().getMasterThreads().size());
56 // Kill the only active master.
57 testUtil.getMiniHBaseCluster().stopMaster(0).join();
58 // Wait for 5s to make sure the always standby doesn't transition to active state.
59 assertFalse(testUtil.getMiniHBaseCluster().waitForActiveAndReadyMaster(5000));
60 // Add a new master.
61 HMaster newActive = testUtil.getMiniHBaseCluster().startMaster().getMaster();
62 assertTrue(testUtil.getMiniHBaseCluster().waitForActiveAndReadyMaster(5000));
63 // Newly added master should be the active.
64 assertEquals(newActive.getServerName(),
65 testUtil.getMiniHBaseCluster().getMaster().getServerName());