content: package redis.clients.jedis.tests.utils;
  
  import java.util.concurrent.atomic.AtomicReference;
  
  import redis.clients.jedis.HostAndPort;
  import redis.clients.jedis.Jedis;
  import redis.clients.jedis.JedisPubSub;
  
  public class JedisSentinelTestUtil {
    public static HostAndPort waitForNewPromotedMaster(final String masterName,
        final Jedis sentinelJedis, final Jedis commandJedis) throws InterruptedException {
  
      final AtomicReference<String> newmaster = new AtomicReference<String>("");
  
      sentinelJedis.psubscribe(new JedisPubSub() {
  
        @Override
        public void onPMessage(String pattern, String channel, String message) {
          if (channel.equals("+switch-master")) {
            newmaster.set(message);
            punsubscribe();
          } else if (channel.startsWith("-failover-abort")) {
            punsubscribe();
            throw new FailoverAbortedException(
                "Unfortunately sentinel cannot failover... reason(channel) : " + channel
                    + " / message : " + message);
          }
        }
  
        @Override
        public void onPSubscribe(String pattern, int subscribedChannels) {
          commandJedis.sentinelFailover(masterName);
        }
      }, "*");
  
      String[] chunks = newmaster.get().split(" ");
      HostAndPort newMaster = new HostAndPort(chunks[3], Integer.parseInt(chunks[4]));
  
      return newMaster;
    }
  
  }
  