@Test(expectedExceptions = IllegalArgumentException.class) public void zeroCount() { statsLogger.dataDropped(0); }
@Test(expectedExceptions = IllegalArgumentException.class) public void negativeCount() { statsLogger.dataDropped(-10); } }
@Test public void onFirstAndTenthAndHundredAndThousand() { statsLogger.dataDropped(1); statsLogger.dataDropped(9); statsLogger.dataDropped(90); statsLogger.dataDropped(900); verify(log, times(4)).warn(anyString()); }
@Test public void everyThousand() { statsLogger.dataDropped(2999); statsLogger.dataDropped(1); statsLogger.dataDropped(1); verify(log, times(2)).warn(anyString()); }
@Test public void onFirstAndTenthAndHundred() { statsLogger.dataDropped(1); statsLogger.dataDropped(9); statsLogger.dataDropped(90); verify(log, times(3)).warn(anyString()); }
@Test public void onSecondNot() { statsLogger.dataDropped(1); statsLogger.dataDropped(1); verify(log, times(1)).warn(anyString()); }
@Test public void onFirstAndTenth() { statsLogger.dataDropped(1); statsLogger.dataDropped(9); verify(log, times(2)).warn(anyString()); }
@Test public void onFirst() { statsLogger.dataDropped(1); verify(log, times(1)).warn(anyString()); }
/** * {@inheritDoc} */ @Override public void onEvent(DefaultDataWrapper defaultDataWrapper, long sequence, boolean endOfBatch) { defaultDatas.add(defaultDataWrapper.getDefaultData()); if (endOfBatch) { try { if (connection.isConnected()) { connection.sendDataObjects(defaultDatas); sendingExceptionNotice = false; } else { statsLogger.dataDropped(defaultDatas.size()); } } catch (ServerUnavailableException serverUnavailableException) { if (serverUnavailableException.isServerTimeout()) { log.warn("Timeout on server when sending actual data. Data might be lost!", serverUnavailableException); } else { if (!sendingExceptionNotice) { sendingExceptionNotice = true; log.error("Connection problem appeared, stopping sending actual data!", serverUnavailableException); } } } finally { defaultDatas.clear(); } } }
@Test public void notConnected() throws ServerUnavailableException { when(wrapper.getDefaultData()).thenReturn(defaultData); when(connection.isConnected()).thenReturn(false); handler.onEvent(wrapper, 0L, true); verify(statsLogger).dataDropped(1); verify(connection).isConnected(); verifyNoMoreInteractions(connection, statsLogger); }
/** * {@inheritDoc} */ @Override public void addDefaultData(DefaultData defaultData) { // ignore any data adding if we are in the shutdown phase if (shutdown) { return; } try { // grab the next sequence, never wait for it to be available so that that we don't block long sequence = ringBuffer.tryNext(); try { // get the entry in the disruptor for the sequence and simply change the reference DefaultDataWrapper defaultDataWrapper = ringBuffer.get(sequence); defaultDataWrapper.setDefaultData(defaultData); } finally { ringBuffer.publish(sequence); } } catch (InsufficientCapacityException e) { // pass the dropped count statsLogger.dataDropped(1); } }
@Test public void capacityReached() throws InterruptedException, StorageException { when(disruptorStrategy.getDataBufferSize()).thenReturn(2); // slow down the wrapper so we get capacity error doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { Thread.sleep(1); return null; } }).when(defaultDataHandler).onEvent(Mockito.<DefaultDataWrapper> any(), anyLong(), anyBoolean()); coreService.start(); coreService.addDefaultData(data); coreService.addDefaultData(data); coreService.addDefaultData(data); coreService.addDefaultData(data); // we should report 2 times verify(statsLogger, times(2)).dataDropped(1); }