Search in sources :

Example 1 with TimeoutHandler

use of org.tinyradius.io.client.timeout.TimeoutHandler in project tinyradius-netty by globalreachtech.

the class RadiusClientTest method communicateEndpointListFirstSuccess.

@Test
void communicateEndpointListFirstSuccess() throws RadiusPacketException {
    final byte id = (byte) random.nextInt(256);
    final RadiusResponse response = RadiusResponse.create(DefaultDictionary.INSTANCE, (byte) 2, id, null, Collections.emptyList());
    final CapturingOutboundHandler capturingOutboundHandler = spy(new CapturingOutboundHandler(p -> p.trySuccess(response)));
    final RadiusClient radiusClient = new RadiusClient(bootstrap, address, timeoutHandler, capturingOutboundHandler);
    final InetSocketAddress address2 = new InetSocketAddress(1);
    // never used
    final RadiusEndpoint stubEndpoint2 = new RadiusEndpoint(address2, "secret2");
    final InetSocketAddress address3 = new InetSocketAddress(2);
    // never used
    final RadiusEndpoint stubEndpoint3 = new RadiusEndpoint(address3, "secret3");
    final List<RadiusEndpoint> endpoints = Arrays.asList(stubEndpoint, stubEndpoint2, stubEndpoint3);
    final RadiusRequest request = RadiusRequest.create(dictionary, (byte) 1, (byte) 1, null, Collections.emptyList());
    final Future<RadiusResponse> future = radiusClient.communicate(request, endpoints);
    await().until(future::isDone);
    assertTrue(future.isSuccess());
    assertEquals(response, future.getNow());
    assertEquals(1, capturingOutboundHandler.requests.size());
    assertEquals("secret", capturingOutboundHandler.requests.get(0).getEndpoint().getSecret());
}
Also used : FixedTimeoutHandler(org.tinyradius.io.client.timeout.FixedTimeoutHandler) Arrays(java.util.Arrays) TimeoutException(java.util.concurrent.TimeoutException) ArrayList(java.util.ArrayList) SecureRandom(java.security.SecureRandom) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) ChannelPromise(io.netty.channel.ChannelPromise) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Spy(org.mockito.Spy) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) MockitoExtension(org.mockito.junit.jupiter.MockitoExtension) Awaitility.await(org.awaitility.Awaitility.await) ChannelOutboundHandlerAdapter(io.netty.channel.ChannelOutboundHandlerAdapter) Promise(io.netty.util.concurrent.Promise) Dictionary(org.tinyradius.core.dictionary.Dictionary) InetSocketAddress(java.net.InetSocketAddress) NioEventLoopGroup(io.netty.channel.nio.NioEventLoopGroup) TimeoutHandler(org.tinyradius.io.client.timeout.TimeoutHandler) RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) Test(org.junit.jupiter.api.Test) Consumer(java.util.function.Consumer) Bootstrap(io.netty.bootstrap.Bootstrap) Mockito(org.mockito.Mockito) List(java.util.List) RadiusEndpoint(org.tinyradius.io.RadiusEndpoint) NioDatagramChannel(io.netty.channel.socket.nio.NioDatagramChannel) DefaultDictionary(org.tinyradius.core.dictionary.DefaultDictionary) HashedWheelTimer(io.netty.util.HashedWheelTimer) Assertions(org.junit.jupiter.api.Assertions) Timer(io.netty.util.Timer) Future(io.netty.util.concurrent.Future) Collections(java.util.Collections) RadiusPacketException(org.tinyradius.core.RadiusPacketException) RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) RadiusEndpoint(org.tinyradius.io.RadiusEndpoint) InetSocketAddress(java.net.InetSocketAddress) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) Test(org.junit.jupiter.api.Test)

Example 2 with TimeoutHandler

use of org.tinyradius.io.client.timeout.TimeoutHandler in project tinyradius-netty by globalreachtech.

the class RadiusClientTest method communicateEndpointListEmpty.

@Test
void communicateEndpointListEmpty() throws RadiusPacketException {
    final Exception expectedException = new Exception("test 123");
    final CapturingOutboundHandler capturingOutboundHandler = spy(new CapturingOutboundHandler(p -> p.tryFailure(expectedException)));
    final RadiusClient radiusClient = new RadiusClient(bootstrap, address, timeoutHandler, capturingOutboundHandler);
    final RadiusRequest request = RadiusRequest.create(dictionary, (byte) 1, (byte) 1, null, Collections.emptyList());
    final Future<RadiusResponse> future = radiusClient.communicate(request, Collections.emptyList());
    await().until(future::isDone);
    assertFalse(future.isSuccess());
    assertTrue(future.cause().getMessage().contains("no valid endpoints"));
}
Also used : FixedTimeoutHandler(org.tinyradius.io.client.timeout.FixedTimeoutHandler) Arrays(java.util.Arrays) TimeoutException(java.util.concurrent.TimeoutException) ArrayList(java.util.ArrayList) SecureRandom(java.security.SecureRandom) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) ChannelPromise(io.netty.channel.ChannelPromise) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Spy(org.mockito.Spy) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) MockitoExtension(org.mockito.junit.jupiter.MockitoExtension) Awaitility.await(org.awaitility.Awaitility.await) ChannelOutboundHandlerAdapter(io.netty.channel.ChannelOutboundHandlerAdapter) Promise(io.netty.util.concurrent.Promise) Dictionary(org.tinyradius.core.dictionary.Dictionary) InetSocketAddress(java.net.InetSocketAddress) NioEventLoopGroup(io.netty.channel.nio.NioEventLoopGroup) TimeoutHandler(org.tinyradius.io.client.timeout.TimeoutHandler) RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) Test(org.junit.jupiter.api.Test) Consumer(java.util.function.Consumer) Bootstrap(io.netty.bootstrap.Bootstrap) Mockito(org.mockito.Mockito) List(java.util.List) RadiusEndpoint(org.tinyradius.io.RadiusEndpoint) NioDatagramChannel(io.netty.channel.socket.nio.NioDatagramChannel) DefaultDictionary(org.tinyradius.core.dictionary.DefaultDictionary) HashedWheelTimer(io.netty.util.HashedWheelTimer) Assertions(org.junit.jupiter.api.Assertions) Timer(io.netty.util.Timer) Future(io.netty.util.concurrent.Future) Collections(java.util.Collections) RadiusPacketException(org.tinyradius.core.RadiusPacketException) RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) TimeoutException(java.util.concurrent.TimeoutException) RadiusPacketException(org.tinyradius.core.RadiusPacketException) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) Test(org.junit.jupiter.api.Test)

Example 3 with TimeoutHandler

use of org.tinyradius.io.client.timeout.TimeoutHandler in project tinyradius-netty by globalreachtech.

the class RadiusClientTest method communicateWithTimeout.

@Test
void communicateWithTimeout() throws RadiusPacketException {
    RadiusClient radiusClient = new RadiusClient(bootstrap, address, timeoutHandler, new CapturingOutboundHandler(a -> {
    }));
    final RadiusRequest request = RadiusRequest.create(dictionary, (byte) 1, (byte) 1, null, Collections.emptyList());
    final TimeoutException e = assertThrows(TimeoutException.class, () -> radiusClient.communicate(request, stubEndpoint).syncUninterruptibly());
    assertTrue(e.getMessage().toLowerCase().contains("max attempts reached"));
    verify(timeoutHandler).onTimeout(any(), anyInt(), any());
}
Also used : FixedTimeoutHandler(org.tinyradius.io.client.timeout.FixedTimeoutHandler) Arrays(java.util.Arrays) TimeoutException(java.util.concurrent.TimeoutException) ArrayList(java.util.ArrayList) SecureRandom(java.security.SecureRandom) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) ChannelPromise(io.netty.channel.ChannelPromise) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Spy(org.mockito.Spy) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) MockitoExtension(org.mockito.junit.jupiter.MockitoExtension) Awaitility.await(org.awaitility.Awaitility.await) ChannelOutboundHandlerAdapter(io.netty.channel.ChannelOutboundHandlerAdapter) Promise(io.netty.util.concurrent.Promise) Dictionary(org.tinyradius.core.dictionary.Dictionary) InetSocketAddress(java.net.InetSocketAddress) NioEventLoopGroup(io.netty.channel.nio.NioEventLoopGroup) TimeoutHandler(org.tinyradius.io.client.timeout.TimeoutHandler) RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) Test(org.junit.jupiter.api.Test) Consumer(java.util.function.Consumer) Bootstrap(io.netty.bootstrap.Bootstrap) Mockito(org.mockito.Mockito) List(java.util.List) RadiusEndpoint(org.tinyradius.io.RadiusEndpoint) NioDatagramChannel(io.netty.channel.socket.nio.NioDatagramChannel) DefaultDictionary(org.tinyradius.core.dictionary.DefaultDictionary) HashedWheelTimer(io.netty.util.HashedWheelTimer) Assertions(org.junit.jupiter.api.Assertions) Timer(io.netty.util.Timer) Future(io.netty.util.concurrent.Future) Collections(java.util.Collections) RadiusPacketException(org.tinyradius.core.RadiusPacketException) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) TimeoutException(java.util.concurrent.TimeoutException) Test(org.junit.jupiter.api.Test)

Aggregations

Bootstrap (io.netty.bootstrap.Bootstrap)3 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)3 ChannelOutboundHandlerAdapter (io.netty.channel.ChannelOutboundHandlerAdapter)3 ChannelPromise (io.netty.channel.ChannelPromise)3 NioEventLoopGroup (io.netty.channel.nio.NioEventLoopGroup)3 NioDatagramChannel (io.netty.channel.socket.nio.NioDatagramChannel)3 HashedWheelTimer (io.netty.util.HashedWheelTimer)3 Timer (io.netty.util.Timer)3 Future (io.netty.util.concurrent.Future)3 Promise (io.netty.util.concurrent.Promise)3 InetSocketAddress (java.net.InetSocketAddress)3 SecureRandom (java.security.SecureRandom)3 ArrayList (java.util.ArrayList)3 Arrays (java.util.Arrays)3 Collections (java.util.Collections)3 List (java.util.List)3 TimeoutException (java.util.concurrent.TimeoutException)3 Consumer (java.util.function.Consumer)3 Awaitility.await (org.awaitility.Awaitility.await)3 Assertions (org.junit.jupiter.api.Assertions)3