HealthStatusManagerTest.java

package redis.clients.jedis.providers;

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

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import org.junit.jupiter.api.Test;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.mcf.HealthCheckStrategy;
import redis.clients.jedis.mcf.HealthStatus;
import redis.clients.jedis.mcf.HealthStatusListener;
import redis.clients.jedis.mcf.HealthStatusManager;
import redis.clients.jedis.mcf.TestHealthCheckStrategy;

public class HealthStatusManagerTest {

  private final HostAndPort endpoint = new HostAndPort("localhost", 6379);

  @Test
  void manager_event_emission_order_basic() throws InterruptedException {
    HealthStatusManager manager = new HealthStatusManager();

    CountDownLatch eventLatch = new CountDownLatch(1);
    HealthStatusListener listener = event -> eventLatch.countDown();

    manager.registerListener(endpoint, listener);

    HealthCheckStrategy immediateHealthy = new TestHealthCheckStrategy(
        HealthCheckStrategy.Config.builder().interval(50).timeout(25).build(),
        e -> HealthStatus.HEALTHY);

    manager.add(endpoint, immediateHealthy);

    assertTrue(eventLatch.await(2, TimeUnit.SECONDS), "Should receive health status event");

    manager.remove(endpoint);
  }

  @Test
  void manager_hasHealthCheck_add_remove() {
    HealthStatusManager manager = new HealthStatusManager();
    assertFalse(manager.hasHealthCheck(endpoint));

    HealthCheckStrategy strategy = new TestHealthCheckStrategy(
        HealthCheckStrategy.Config.builder().interval(50).timeout(25).build(),
        e -> HealthStatus.HEALTHY);

    manager.add(endpoint, strategy);
    assertTrue(manager.hasHealthCheck(endpoint));
    manager.remove(endpoint);
    assertFalse(manager.hasHealthCheck(endpoint));
  }
}