@Before
  public void openConnection() throws Exception {
    super.openConnection();

    try {
      sentinel.master(MASTER_ID);
    } catch (Exception e) {
      sentinelRule.monitor(MASTER_ID, hostAddr(), TestSettings.port(3), 1, true);
    }
  }
  @Test
  public void sentinelConnect() throws Exception {

    RedisClient client =
        new RedisClient(RedisURI.Builder.redis(TestSettings.host(), TestSettings.port()).build());

    RedisSentinelAsyncCommands<String, String> connection = client.connectSentinelAsync();
    assertThat(connection.ping().get()).isEqualTo("PONG");

    connection.close();
    FastShutdown.shutdown(client);
  }
  @Test
  public void testMaster() throws Exception {

    String info =
        "# Replication\r\n"
            + "role:master\r\n"
            + "connected_slaves:1\r\n"
            + "master_repl_offset:56276\r\n"
            + "repl_backlog_active:1\r\n";

    List<RedisNodeDescription> result = sut.getNodesFromInfo(info);
    assertThat(result).hasSize(1);

    RedisNodeDescription redisNodeDescription = result.get(0);

    assertThat(redisNodeDescription.getRole()).isEqualTo(RedisInstance.Role.MASTER);
    assertThat(redisNodeDescription.getUri().getHost()).isEqualTo(TestSettings.host());
    assertThat(redisNodeDescription.getUri().getPort()).isEqualTo(TestSettings.port());
  }
/** @author <a href="mailto:[email protected]">Mark Paluch</a> */
public class MasterSlaveTopologyProviderTest {

  private MasterSlaveTopologyProvider sut =
      new MasterSlaveTopologyProvider(
          null, RedisURI.Builder.redis(TestSettings.host(), TestSettings.port()).build());

  @Test
  public void testMaster() throws Exception {

    String info =
        "# Replication\r\n"
            + "role:master\r\n"
            + "connected_slaves:1\r\n"
            + "master_repl_offset:56276\r\n"
            + "repl_backlog_active:1\r\n";

    List<RedisNodeDescription> result = sut.getNodesFromInfo(info);
    assertThat(result).hasSize(1);

    RedisNodeDescription redisNodeDescription = result.get(0);

    assertThat(redisNodeDescription.getRole()).isEqualTo(RedisInstance.Role.MASTER);
    assertThat(redisNodeDescription.getUri().getHost()).isEqualTo(TestSettings.host());
    assertThat(redisNodeDescription.getUri().getPort()).isEqualTo(TestSettings.port());
  }

  @Test
  public void testMasterIsASlave() throws Exception {

    String info =
        "# Replication\r\n"
            + "role:slave\r\n"
            + "connected_slaves:1\r\n"
            + "master_repl_offset:56276\r\n"
            + "repl_backlog_active:1\r\n";

    List<RedisNodeDescription> result = sut.getNodesFromInfo(info);
    assertThat(result).hasSize(1);

    RedisNodeDescription redisNodeDescription = result.get(0);

    assertThat(redisNodeDescription.getRole()).isEqualTo(RedisInstance.Role.SLAVE);
  }

  @Test(expected = IllegalStateException.class)
  public void noRole() throws Exception {

    String info =
        "# Replication\r\n"
            + "connected_slaves:1\r\n"
            + "master_repl_offset:56276\r\n"
            + "repl_backlog_active:1\r\n";

    sut.getNodesFromInfo(info);
  }

  @Test(expected = IllegalStateException.class)
  public void noInvalidRole() throws Exception {

    String info =
        "# Replication\r\n"
            + "role:abc\r\n"
            + "master_repl_offset:56276\r\n"
            + "repl_backlog_active:1\r\n";

    sut.getNodesFromInfo(info);
  }

  @Test
  public void testSlaves() throws Exception {

    String info =
        "# Replication\r\n"
            + "role:master\r\n"
            + "slave0:ip=127.0.0.1,port=6483,state=online,offset=56276,lag=0\r\n"
            + "slave1:ip=127.0.0.1,port=6484,state=online,offset=56276,lag=0\r\n"
            + "master_repl_offset:56276\r\n"
            + "repl_backlog_active:1\r\n";

    List<RedisNodeDescription> result = sut.getNodesFromInfo(info);
    assertThat(result).hasSize(3);

    RedisNodeDescription slave1 = result.get(1);

    assertThat(slave1.getRole()).isEqualTo(RedisInstance.Role.SLAVE);
    assertThat(slave1.getUri().getHost()).isEqualTo("127.0.0.1");
    assertThat(slave1.getUri().getPort()).isEqualTo(6483);

    RedisNodeDescription slave2 = result.get(2);

    assertThat(slave2.getRole()).isEqualTo(RedisInstance.Role.SLAVE);
    assertThat(slave2.getUri().getHost()).isEqualTo("127.0.0.1");
    assertThat(slave2.getUri().getPort()).isEqualTo(6484);
  }
}