/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.hadoop.ha;

import java.net.InetSocketAddress;

import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState;

/**
 * Repeats all tests of {@link TestHealthMonitor}, but using a separate
 * dedicated health check RPC address.
 */
public class TestHealthMonitorWithDedicatedHealthAddress
    extends TestHealthMonitor {

  @Override
  protected DummyHAService createDummyHAService() {
    return new DummyHAService(HAServiceState.ACTIVE,
        new InetSocketAddress("0.0.0.0", 0),
        new InetSocketAddress("0.0.0.0", 0), true);
  }
}
