예제 #1
0
  @Test
  public void shouldNotUnmapBuffersBeforeLastRelease() throws Exception {
    publication.incRef();
    publication.close();

    verify(logBuffers, never()).close();
  }
예제 #2
0
  @Test
  public void shouldUnmapBuffersWithMultipleReferences() throws Exception {
    publication.incRef();
    publication.close();

    publication.close();
    logBuffersClosedOnce();
  }
예제 #3
0
  @Test
  public void shouldEnsureThePublicationIsOpenBeforeReadingPosition() {
    publication.close();
    assertThat(publication.position(), is(Publication.CLOSED));

    final InOrder inOrder = Mockito.inOrder(conductorLock, conductor);
    inOrder.verify(conductorLock).lock();
    inOrder.verify(conductor).releasePublication(publication);
    inOrder.verify(conductorLock).unlock();
  }
예제 #4
0
  @Test
  public void shouldNotUnmapBuffersBeforeLastRelease() throws Exception {
    publication.incRef();
    publication.close();

    verify(logBuffers, never()).close();

    final InOrder inOrder = Mockito.inOrder(conductorLock, conductor);
    inOrder.verify(conductorLock).lock();
    inOrder.verify(conductorLock).unlock();
    inOrder.verifyNoMoreInteractions();
  }
예제 #5
0
  @Test
  public void shouldUnmapBuffersWithMultipleReferences() throws Exception {
    publication.incRef();
    publication.close();

    publication.close();

    final InOrder inOrder = Mockito.inOrder(conductorLock, conductor);
    inOrder.verify(conductorLock).lock();
    inOrder.verify(conductor).releasePublication(publication);
    inOrder.verify(conductorLock).unlock();
    inOrder.verifyNoMoreInteractions();
  }
예제 #6
0
  @Before
  public void setUp() {
    when(publicationLimit.getVolatile()).thenReturn(2L * SEND_BUFFER_CAPACITY);
    when(logBuffers.termBuffers()).thenReturn(termBuffers);
    when(logBuffers.termLength()).thenReturn(TERM_MIN_LENGTH);
    when(logBuffers.metaDataBuffer()).thenReturn(logMetaDataBuffer);
    when(conductor.mainLock()).thenReturn(conductorLock);

    initialTermId(logMetaDataBuffer, TERM_ID_1);
    timeOfLastStatusMessage(logMetaDataBuffer, 0);

    for (int i = 0; i < PARTITION_COUNT; i++) {
      termBuffers[i] = new UnsafeBuffer(allocateDirect(TERM_MIN_LENGTH));
    }

    publication =
        new Publication(
            conductor,
            CHANNEL,
            STREAM_ID_1,
            SESSION_ID_1,
            publicationLimit,
            logBuffers,
            CORRELATION_ID);

    publication.incRef();

    initialiseTailWithTermId(logMetaDataBuffer, PARTITION_INDEX, TERM_ID_1);
  }
예제 #7
0
  @Before
  public void setUp() {
    when(publicationLimit.getVolatile()).thenReturn(2L * SEND_BUFFER_CAPACITY);
    when(logBuffers.atomicBuffers()).thenReturn(buffers);
    when(logBuffers.termLength()).thenReturn(TERM_MIN_LENGTH);

    initialTermId(logMetaDataBuffer, TERM_ID_1);
    activeTermId(logMetaDataBuffer, TERM_ID_1);

    for (int i = 0; i < PARTITION_COUNT; i++) {
      termBuffers[i] = new UnsafeBuffer(ByteBuffer.allocateDirect(TERM_MIN_LENGTH));
      termMetaDataBuffers[i] = new UnsafeBuffer(ByteBuffer.allocateDirect(TERM_META_DATA_LENGTH));

      buffers[i] = termBuffers[i];
      buffers[i + PARTITION_COUNT] = termMetaDataBuffers[i];
    }
    buffers[LOG_META_DATA_SECTION_INDEX] = logMetaDataBuffer;

    publication =
        new Publication(
            conductor,
            CHANNEL,
            STREAM_ID_1,
            SESSION_ID_1,
            publicationLimit,
            logBuffers,
            CORRELATION_ID);

    publication.incRef();
  }
예제 #8
0
  @Test
  public void shouldUnmapBuffersWhenReleased() throws Exception {
    publication.close();

    logBuffersClosedOnce();
    releaseSelfOnce();
  }
예제 #9
0
  @Test
  public void shouldReleaseResourcesIdempotently() throws Exception {
    publication.close();
    publication.close();

    logBuffersClosedOnce();
    releaseSelfOnce();
  }
예제 #10
0
  @Test
  public void shouldReleaseResourcesIdempotently() throws Exception {
    publication.close();
    publication.close();

    final InOrder inOrder = Mockito.inOrder(conductorLock, conductor);
    inOrder.verify(conductorLock).lock();
    inOrder.verify(conductor).releasePublication(publication);
    inOrder.verify(conductorLock).unlock();
    inOrder.verify(conductorLock).lock();
    inOrder.verify(conductorLock).unlock();
    inOrder.verifyNoMoreInteractions();
  }
예제 #11
0
 @Test
 public void shouldEnsureThePublicationIsOpenBeforeReadingPosition() {
   publication.close();
   assertThat(publication.position(), is(Publication.CLOSED));
 }
예제 #12
0
 @Test
 public void shouldEnsureThePublicationIsOpenBeforeOffer() {
   publication.close();
   assertTrue(publication.isClosed());
   assertThat(publication.offer(atomicSendBuffer), is(Publication.CLOSED));
 }
예제 #13
0
 @Test
 public void shouldReportThatPublicationHasBeenConnectedYet() {
   assertTrue(publication.hasBeenConnected());
 }
예제 #14
0
 @Test
 public void shouldReportMaxMessageLength() {
   assertThat(
       publication.maxMessageLength(),
       is(FrameDescriptor.computeMaxMessageLength(TERM_MIN_LENGTH)));
 }
예제 #15
0
 @Test
 public void shouldReportInitialPosition() {
   assertThat(publication.position(), is(0L));
 }
예제 #16
0
 @Test
 public void shouldReportThatPublicationHasBeenConnectedYet() {
   when(conductor.isPublicationConnected(anyLong())).thenReturn(true);
   assertTrue(publication.isConnected());
 }
예제 #17
0
 @Test
 public void shouldReportThatPublicationHasNotBeenConnectedYet() {
   when(publicationLimit.getVolatile()).thenReturn(0L);
   when(conductor.isPublicationConnected(anyLong())).thenReturn(false);
   assertFalse(publication.isConnected());
 }
예제 #18
0
 @Test
 public void shouldEnsureThePublicationIsOpenBeforeClaim() {
   publication.close();
   final BufferClaim bufferClaim = new BufferClaim();
   assertThat(publication.tryClaim(SEND_BUFFER_CAPACITY, bufferClaim), is(Publication.CLOSED));
 }
예제 #19
0
 @Test
 public void shouldReportThatPublicationHasNotBeenConnectedYet() {
   when(publicationLimit.getVolatile()).thenReturn(0L);
   assertFalse(publication.hasBeenConnected());
 }