MaintenanceNotificationsConfigTest.java
package redis.clients.jedis;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.time.Duration;
import redis.clients.jedis.MaintenanceNotificationsConfig.EndpointType;
import redis.clients.jedis.MaintenanceNotificationsConfig.EndpointTypeResolver;
@Tag("unit")
public class MaintenanceNotificationsConfigTest {
private static final SocketAddress PRIVATE_ADDR = new InetSocketAddress("10.0.0.1", 6379);
private static final SocketAddress PUBLIC_ADDR = new InetSocketAddress("8.8.8.8", 6379);
@Test
public void builderDefaultsToAuto() {
MaintenanceNotificationsConfig built = MaintenanceNotificationsConfig.builder().build();
assertEquals(MaintenanceNotificationsConfig.Mode.AUTO, built.getMode());
assertTrue(built.isEnabledOrAuto());
assertEquals(Duration.ofSeconds(60), built.getRelaxedWindowMaxDuration());
}
@Test
public void defaultResolverAutoResolvesFromConnectionCharacteristics() {
EndpointTypeResolver resolver = MaintenanceNotificationsConfig.builder().build()
.getEndpointTypeResolver();
assertEquals(EndpointType.INTERNAL_IP, resolver.getEndpointType(PRIVATE_ADDR, false));
assertEquals(EndpointType.INTERNAL_FQDN, resolver.getEndpointType(PRIVATE_ADDR, true));
assertEquals(EndpointType.EXTERNAL_IP, resolver.getEndpointType(PUBLIC_ADDR, false));
assertEquals(EndpointType.EXTERNAL_FQDN, resolver.getEndpointType(PUBLIC_ADDR, true));
}
@Test
public void autoResolveEndpointTypeRestoresDefaultResolver() {
EndpointTypeResolver resolver = MaintenanceNotificationsConfig.builder()
.endpointType(EndpointType.EXTERNAL_FQDN).autoResolveEndpointType().build()
.getEndpointTypeResolver();
assertEquals(EndpointType.INTERNAL_IP, resolver.getEndpointType(PRIVATE_ADDR, false));
assertEquals(EndpointType.EXTERNAL_FQDN, resolver.getEndpointType(PUBLIC_ADDR, true));
}
@Test
public void fixedEndpointTypeIgnoresConnectionCharacteristics() {
EndpointTypeResolver resolver = MaintenanceNotificationsConfig.builder()
.endpointType(EndpointType.EXTERNAL_FQDN).build().getEndpointTypeResolver();
assertEquals(EndpointType.EXTERNAL_FQDN, resolver.getEndpointType(PRIVATE_ADDR, false));
assertEquals(EndpointType.EXTERNAL_FQDN, resolver.getEndpointType(PUBLIC_ADDR, true));
assertEquals(EndpointType.EXTERNAL_FQDN, resolver.getEndpointType(null, false));
}
@Test
public void nullEndpointTypeRejected() {
assertThrows(IllegalArgumentException.class,
() -> MaintenanceNotificationsConfig.builder().endpointType(null));
}
@Test
public void disabledModeReportsDisabled() {
MaintenanceNotificationsConfig disabled = MaintenanceNotificationsConfig.builder()
.mode(MaintenanceNotificationsConfig.Mode.DISABLED).build();
assertFalse(disabled.isEnabledOrAuto());
}
@Test
public void defaultRelaxedTimeouts() {
MaintenanceNotificationsConfig built = MaintenanceNotificationsConfig.builder().build();
assertEquals(MaintenanceNotificationsConfig.DEFAULT_RELAXED_SOCKET_TIMEOUT_MS,
built.getRelaxedTimeout());
assertEquals(MaintenanceNotificationsConfig.DEFAULT_RELAXED_BLOCKING_SOCKET_TIMEOUT_MS,
built.getRelaxedBlockingTimeout());
assertEquals(0, built.getRelaxedBlockingTimeout());
}
@Test
public void builderSetsRelaxedTimeouts() {
MaintenanceNotificationsConfig config = MaintenanceNotificationsConfig.builder()
.relaxedTimeout(20_000).relaxedBlockingTimeout(30_000).build();
assertEquals(20_000, config.getRelaxedTimeout());
assertEquals(30_000, config.getRelaxedBlockingTimeout());
}
@Test
public void disabledConstantIsDisabled() {
assertEquals(MaintenanceNotificationsConfig.Mode.DISABLED,
MaintenanceNotificationsConfig.DISABLED.getMode());
assertFalse(MaintenanceNotificationsConfig.DISABLED.isEnabledOrAuto());
}
}