RedisSentinelClientIT.java

package redis.clients.jedis.tls;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

import redis.clients.jedis.DefaultJedisClientConfig;
import redis.clients.jedis.EndpointConfig;
import redis.clients.jedis.Endpoints;
import redis.clients.jedis.RedisSentinelClient;
import redis.clients.jedis.SslOptions;

/**
 * SSL/TLS tests for {@link RedisSentinelClient} with basic authentication (password-only, no ACL).
 * <p>
 * Tests various SSL/TLS connection configurations including:
 * <ul>
 * <li>Basic SSL connection with truststore</li>
 * <li>Insecure SSL mode (no certificate verification)</li>
 * <li>Custom SSL protocol</li>
 * </ul>
 * <p>
 * This test class uses the default user with password authentication instead of ACL user. The
 * sentinel connection does not use SSL, only the master connection uses SSL.
 */
public class RedisSentinelClientIT extends RedisSentinelTlsTestBase {

  // Endpoint for master with default user (password-only, no ACL)
  private static EndpointConfig masterEndpoint;

  @BeforeAll
  public static void setUp() {
    masterEndpoint = Endpoints.getRedisEndpoint("standalone0-tls");
  }

  @ParameterizedTest(name = "connectWithSsl_{0}")
  @MethodSource("sslOptionsProvider")
  void connectWithSsl(String testName, SslOptions ssl) {
    DefaultJedisClientConfig masterConfig = DefaultJedisClientConfig.builder()
        .clientName("master-client").sslOptions(ssl).password(masterEndpoint.getPassword())
        .hostAndPortMapper(PRIMARY_SSL_PORT_MAPPER).build();

    // Sentinel requires authentication but does not use SSL
    DefaultJedisClientConfig sentinelConfig = createSentinelConfigWithoutSsl();

    try (RedisSentinelClient client = RedisSentinelClient.builder().masterName(MASTER_NAME)
        .sentinels(sentinels).clientConfig(masterConfig).sentinelClientConfig(sentinelConfig)
        .build()) {
      assertEquals("PONG", client.ping());
    }
  }

}