import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.websocket.api.RemoteEndpoint;
import org.eclipse.jetty.websocket.api.Session;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
-import org.opendaylight.restconf.nb.rfc8040.streams.RestconfStream.EncodingName;
+import org.opendaylight.restconf.server.spi.RestconfStream;
+import org.opendaylight.restconf.server.spi.RestconfStream.EncodingName;
import org.opendaylight.yangtools.concepts.Registration;
@ExtendWith(MockitoExtension.class)
class WebSocketSessionHandlerTest {
private final class WebSocketTestSessionState {
- private final WebSocketSessionHandler webSocketSessionHandler;
- private final int heartbeatInterval;
+ private final WebSocketSender webSocketSessionHandler;
+ private final long heartbeatInterval;
private final int maxFragmentSize;
- WebSocketTestSessionState(final int maxFragmentSize, final int heartbeatInterval) {
+ WebSocketTestSessionState(final int maxFragmentSize, final long heartbeatInterval) {
this.heartbeatInterval = heartbeatInterval;
this.maxFragmentSize = maxFragmentSize;
- webSocketSessionHandler = new WebSocketSessionHandler(executorService, stream,
- ENCODING, null, maxFragmentSize, heartbeatInterval);
+ webSocketSessionHandler = new WebSocketSender(pingExecutor, stream, ENCODING, null, maxFragmentSize,
+ heartbeatInterval);
if (heartbeatInterval != 0) {
- doReturn(pingFuture).when(executorService).scheduleWithFixedDelay(any(Runnable.class),
- eq((long) heartbeatInterval), eq((long) heartbeatInterval), eq(TimeUnit.MILLISECONDS));
+ doReturn(pingRegistration).when(pingExecutor).startPingProcess(any(Runnable.class),
+ eq(heartbeatInterval), eq(TimeUnit.MILLISECONDS));
}
}
}
@Mock
private RestconfStream<?> stream;
@Mock
- private ScheduledExecutorService executorService;
+ private PingExecutor pingExecutor;
@Mock
- private ScheduledFuture pingFuture;
+ private Registration pingRegistration;
@Mock
private Session session;
webSocketTestSessionState.webSocketSessionHandler.onWebSocketConnected(session);
verify(stream).addSubscriber(webSocketTestSessionState.webSocketSessionHandler, ENCODING, null);
- verify(executorService).scheduleWithFixedDelay(any(Runnable.class),
- eq((long) webSocketTestSessionState.heartbeatInterval),
- eq((long) webSocketTestSessionState.heartbeatInterval), eq(TimeUnit.MILLISECONDS));
+ verify(pingExecutor).startPingProcess(any(Runnable.class), eq(webSocketTestSessionState.heartbeatInterval),
+ eq(TimeUnit.MILLISECONDS));
}
@Test
webSocketTestSessionState.webSocketSessionHandler.onWebSocketConnected(session);
verify(stream).addSubscriber(webSocketTestSessionState.webSocketSessionHandler, ENCODING, null);
- verifyNoMoreInteractions(executorService);
+ verifyNoMoreInteractions(pingExecutor);
}
@Test
when(stream.addSubscriber(webSocketTestSessionState.webSocketSessionHandler, ENCODING, null))
.thenReturn(reg);
webSocketTestSessionState.webSocketSessionHandler.onWebSocketConnected(session);
- when(pingFuture.isCancelled()).thenReturn(false);
- when(pingFuture.isDone()).thenReturn(false);
final var sampleError = new IllegalStateException("Simulated error");
doNothing().when(reg).close();
+ doNothing().when(pingRegistration).close();
webSocketTestSessionState.webSocketSessionHandler.onWebSocketError(sampleError);
- verify(reg).close();
verify(session).close();
- verify(pingFuture).cancel(anyBoolean());
}
@Test
webSocketTestSessionState.webSocketSessionHandler.onWebSocketConnected(session);
final var sampleError = new IllegalStateException("Simulated error");
+ doNothing().when(reg).close();
+ doNothing().when(pingRegistration).close();
webSocketTestSessionState.webSocketSessionHandler.onWebSocketError(sampleError);
- verify(reg).close();
verify(session, never()).close();
- verify(pingFuture).cancel(anyBoolean());
}
@Test
when(stream.addSubscriber(webSocketTestSessionState.webSocketSessionHandler, ENCODING, null))
.thenReturn(reg);
webSocketTestSessionState.webSocketSessionHandler.onWebSocketConnected(session);
- when(pingFuture.isDone()).thenReturn(true);
final var sampleError = new IllegalStateException("Simulated error");
webSocketTestSessionState.webSocketSessionHandler.onWebSocketError(sampleError);
verify(reg).close();
verify(session, never()).close();
- verify(pingFuture, never()).cancel(anyBoolean());
}
@Test