@Override public void close() { asyncAppender.stop(); }
public void stop() { asyncAppender.stop(); }
@Override public void close() { try { asyncAppender.stop(); } catch (Exception e) { // catch any exception to assure logging always works reportError(null, e, CLOSE_FAILURE); } }
@Test public void verifyInterruptionDoesNotPreventLogging() { asyncAppenderBase.addAppender(listAppender); asyncAppenderBase.start(); asyncAppenderBase.doAppend(0); Thread.currentThread().interrupt(); asyncAppenderBase.doAppend(1); asyncAppenderBase.doAppend(1); assertTrue(Thread.currentThread().isInterrupted()); asyncAppenderBase.stop(); verify(listAppender, 3); // clear interrupt flag for subsequent tests Thread.interrupted(); }
@Test(timeout = 2000) public void emptyQueueShouldBeStoppable() { asyncAppenderBase.addAppender(listAppender); asyncAppenderBase.start(); asyncAppenderBase.stop(); verify(listAppender, 0); }
@Test(timeout = 2000) public void workerShouldStopEvenIfInterruptExceptionConsumedWithinSubappender() { delayingListAppender.delay = 100; asyncAppenderBase.addAppender(delayingListAppender); asyncAppenderBase.start(); asyncAppenderBase.doAppend(0); asyncAppenderBase.stop(); verify(delayingListAppender, 1); assertTrue(delayingListAppender.interrupted); Thread.interrupted(); }
@Test(timeout = 2000) public void smoke() { asyncAppenderBase.addAppender(listAppender); asyncAppenderBase.start(); asyncAppenderBase.doAppend(0); asyncAppenderBase.stop(); verify(listAppender, 1); }
@Test(timeout = 2000) public void noEventLoss() { int bufferSize = 10; int loopLen = bufferSize * 2; asyncAppenderBase.addAppender(delayingListAppender); asyncAppenderBase.setQueueSize(bufferSize); asyncAppenderBase.start(); for (int i = 0; i < loopLen; i++) { asyncAppenderBase.doAppend(i); } asyncAppenderBase.stop(); verify(delayingListAppender, loopLen); }
@Test public void verifyInterruptionOfWorkerIsSwallowed() { asyncAppenderBase.addAppender(delayingListAppender); asyncAppenderBase.start(); asyncAppenderBase.stop(); assertFalse(asyncAppenderBase.worker.isAlive()); assertFalse(asyncAppenderBase.worker.isInterrupted()); }
@Test public void stopExitsWhenMaxRuntimeReached() throws InterruptedException { int maxFlushTime = 1; // runtime of 0 means wait forever, so use 1 ms instead int loopLen = 10; ListAppender<Integer> la = delayingListAppender; asyncAppenderBase.addAppender(la); asyncAppenderBase.setMaxFlushTime(maxFlushTime); asyncAppenderBase.start(); for (int i = 0; i < loopLen; i++) { asyncAppenderBase.doAppend(i); } asyncAppenderBase.stop(); // confirms that stop exited when runtime reached statusChecker.assertContainsMatch("Max queue flush timeout \\(" + maxFlushTime + " ms\\) exceeded."); asyncAppenderBase.worker.join(); // confirms that all entries do end up being flushed if we wait long enough verify(la, loopLen); }
@SuppressWarnings("deprecation") @Test public void workerThreadFlushesOnStop() { int loopLen = 5; int maxRuntime = (loopLen + 1) * Math.max(1000, delayingListAppender.delay); ListAppender<Integer> la = delayingListAppender; asyncAppenderBase.addAppender(la); asyncAppenderBase.setDiscardingThreshold(0); asyncAppenderBase.setMaxFlushTime(maxRuntime); asyncAppenderBase.start(); asyncAppenderBase.worker.suspend(); for (int i = 0; i < loopLen; i++) { asyncAppenderBase.doAppend(i); } assertEquals(loopLen, asyncAppenderBase.getNumberOfElementsInQueue()); assertEquals(0, la.list.size()); asyncAppenderBase.worker.resume(); asyncAppenderBase.stop(); assertEquals(0, asyncAppenderBase.getNumberOfElementsInQueue()); verify(la, loopLen); }
@Test(timeout = 2000) public void eventLossIfNeverBlock() { int bufferSize = 10; int loopLen = bufferSize * 2; delayingListAppender.setDelay(5000); // something greater than the test timeout asyncAppenderBase.addAppender(delayingListAppender); asyncAppenderBase.setQueueSize(bufferSize); asyncAppenderBase.setNeverBlock(true); asyncAppenderBase.start(); for (int i = 0; i < loopLen; i++) { asyncAppenderBase.doAppend(i); } asyncAppenderBase.stop(); // ListAppender size isn't a reliable test here, so just make sure we didn't // have any errors, and that we could complete the test in time. statusChecker.assertIsErrorFree(); }
@Test public void exceptionsShouldNotCauseHalting() throws InterruptedException { NPEAppender<Integer> npeAppender = new NPEAppender<Integer>(); npeAppender.setName("bad"); npeAppender.setContext(context); npeAppender.start(); asyncAppenderBase.addAppender(npeAppender); asyncAppenderBase.start(); assertTrue(asyncAppenderBase.isStarted()); for (int i = 0; i < 10; i++) asyncAppenderBase.append(i); asyncAppenderBase.stop(); assertFalse(asyncAppenderBase.isStarted()); assertEquals(AppenderBase.ALLOWED_REPEATS, statusChecker.matchCount("Appender \\[bad\\] failed to append.")); }