@Test public void shouldNotAddSingleSpyThenNetworkPublicationWithDifferentSessionId() { final int sessionIdPub = -4097; final int sessionIdSub = -4098; final String sessionIdPubParam = "|" + CommonContext.SESSION_ID_PARAM_NAME + "=" + sessionIdPub; final String sessionIdSubParam = "|" + CommonContext.SESSION_ID_PARAM_NAME + "=" + sessionIdSub; driverProxy.addSubscription(spyForChannel(CHANNEL_4000 + sessionIdSubParam), STREAM_ID_1); driverProxy.addPublication(CHANNEL_4000 + sessionIdPubParam, STREAM_ID_1); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertFalse(publication.hasSpies()); verify(mockClientProxy, never()).onAvailableImage( anyLong(), eq(STREAM_ID_1), anyInt(), anyLong(), anyInt(), anyString(), anyString()); }
@Test public void shouldNotAddNetworkPublicationThenSingleSpyWithDifferentSessionId() { final int sessionIdPub = -4097; final int sessionIdSub = -4098; final String sessionIdPubParam = "|" + CommonContext.SESSION_ID_PARAM_NAME + "=" + sessionIdPub; final String sessionIdSubParam = "|" + CommonContext.SESSION_ID_PARAM_NAME + "=" + sessionIdSub; driverProxy.addPublication(CHANNEL_4000 + sessionIdPubParam, STREAM_ID_1); driverProxy.addSubscription(spyForChannel(CHANNEL_4000 + sessionIdSubParam), STREAM_ID_1); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertFalse(publication.hasSpies()); verify(mockClientProxy, never()).onAvailableImage( anyLong(), eq(STREAM_ID_1), anyInt(), anyLong(), anyInt(), anyString(), anyString()); }
@Test public void shouldBeAbleToAddSingleSpyThenNetworkPublication() { final long idSpy = driverProxy.addSubscription(spyForChannel(CHANNEL_4000), STREAM_ID_1); driverProxy.addPublication(CHANNEL_4000, STREAM_ID_1); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertTrue(publication.hasSpies()); final InOrder inOrder = inOrder(mockClientProxy); inOrder.verify(mockClientProxy).onSubscriptionReady(eq(idSpy), anyInt()); inOrder.verify(mockClientProxy).onAvailableImage( eq(networkPublicationCorrelationId(publication)), eq(STREAM_ID_1), eq(publication.sessionId()), anyLong(), anyInt(), eq(publication.rawLog().fileName()), anyString()); }
@Test public void shouldTimeoutSpy() { driverProxy.addPublication(CHANNEL_4000, STREAM_ID_1); driverProxy.addSubscription(spyForChannel(CHANNEL_4000), STREAM_ID_1); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertTrue(publication.hasSpies()); doWorkUntil(() -> (CLIENT_LIVENESS_TIMEOUT_NS * 2) - nanoClock.nanoTime() <= 0); assertFalse(publication.hasSpies()); }
@Test public void shouldBeAbleToAddNetworkPublicationThenSingleSpyThenRemoveSpy() { driverProxy.addPublication(CHANNEL_4000, STREAM_ID_1); final long idSpy = driverProxy.addSubscription(spyForChannel(CHANNEL_4000), STREAM_ID_1); driverProxy.removeSubscription(idSpy); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertFalse(publication.hasSpies()); }
@Test public void shouldBeAbleToAddNetworkPublicationThenSingleSpy() { driverProxy.addPublication(CHANNEL_4000, STREAM_ID_1); final long idSpy = driverProxy.addSubscription(spyForChannel(CHANNEL_4000), STREAM_ID_1); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertTrue(publication.hasSpies()); final InOrder inOrder = inOrder(mockClientProxy); inOrder.verify(mockClientProxy).onSubscriptionReady(eq(idSpy), anyInt()); inOrder.verify(mockClientProxy).onAvailableImage( eq(networkPublicationCorrelationId(publication)), eq(STREAM_ID_1), eq(publication.sessionId()), anyLong(), anyInt(), eq(publication.rawLog().fileName()), anyString()); }
@Test public void shouldAddNetworkPublicationThenSingleSpyWithSameSessionId() { final int sessionId = -4097; final String sessionIdParam = "|" + CommonContext.SESSION_ID_PARAM_NAME + "=" + sessionId; driverProxy.addPublication(CHANNEL_4000 + sessionIdParam, STREAM_ID_1); driverProxy.addSubscription(spyForChannel(CHANNEL_4000 + sessionIdParam), STREAM_ID_1); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertTrue(publication.hasSpies()); verify(mockClientProxy).onAvailableImage( eq(networkPublicationCorrelationId(publication)), eq(STREAM_ID_1), eq(publication.sessionId()), anyLong(), anyInt(), eq(publication.rawLog().fileName()), anyString()); }
@Test public void shouldAddSingleSpyThenNetworkPublicationWithSameSessionId() { final int sessionId = -4097; final String sessionIdParam = "|" + CommonContext.SESSION_ID_PARAM_NAME + "=" + sessionId; driverProxy.addSubscription(spyForChannel(CHANNEL_4000 + sessionIdParam), STREAM_ID_1); driverProxy.addPublication(CHANNEL_4000 + sessionIdParam, STREAM_ID_1); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertTrue(publication.hasSpies()); verify(mockClientProxy).onAvailableImage( eq(networkPublicationCorrelationId(publication)), eq(STREAM_ID_1), eq(publication.sessionId()), anyLong(), anyInt(), eq(publication.rawLog().fileName()), anyString()); }
@Test public void shouldNotTimeoutSpyWithKeepalive() { driverProxy.addPublication(CHANNEL_4000, STREAM_ID_1); driverProxy.addSubscription(spyForChannel(CHANNEL_4000), STREAM_ID_1); driverConductor.doWork(); final ArgumentCaptor<NetworkPublication> captor = ArgumentCaptor.forClass(NetworkPublication.class); verify(senderProxy, times(1)).newNetworkPublication(captor.capture()); final NetworkPublication publication = captor.getValue(); assertTrue(publication.hasSpies()); doWorkUntil(() -> CLIENT_LIVENESS_TIMEOUT_NS - nanoClock.nanoTime() <= 0); driverProxy.sendClientKeepalive(); doWorkUntil(() -> CLIENT_LIVENESS_TIMEOUT_NS - nanoClock.nanoTime() <= 0); assertTrue(publication.hasSpies()); }