@Override public Boolean apply(BulkRequest bulk) { introspector.items(bulk).forEach(failedItem -> failover.deliver(failedItem)); return true; }
@Override public Boolean apply(BulkRequest bulk) { introspector.items(bulk).forEach(failedItem -> failover.deliver(failedItem)); return true; }
@Override public Boolean apply(BulkRequest bulk) { introspector.items(bulk).forEach(failedItem -> failover.deliver(failedItem)); return true; }
@Override public Boolean apply(Bulk bulk) { List<Object> items = introspector.items(bulk); LOG.warn(String.format("Batch of %s items failed. Redirecting to %s", items.size(), failover.getClass().getName())); items.forEach(failedItem -> failover.deliver(failedItem)); return true; }
@Override public Function<Bulk, Boolean> createFailureHandler(FailoverPolicy failover) { return bulk -> { BufferedBulk bufferedBulk = (BufferedBulk)bulk; LOG.warn(String.format("Batch of %s items failed. Redirecting to %s", bufferedBulk.getActions().size(), failover.getClass().getName())); bufferedBulk.getActions().forEach(failedItem -> { ByteBuf byteBuf = ((BufferedIndex) failedItem).source.getSource(); failover.deliver(byteBuf.toString(0, byteBuf.writerIndex(), Charset.defaultCharset())); }); return true; }; }
@Override public Function<BulkEmitterTest.TestBatch, Boolean> createFailureHandler(FailoverPolicy failover) { return bulk -> { bulk.items.forEach(failedItem -> failover.deliver(failedItem)); return true; }; }
@Test public void deliversToAppenderRef() { // given Appender appender = mock(Appender.class); when(appender.isStarted()).thenReturn(true); Configuration configuration = mock(Configuration.class); String testAppenderRef = "testAppenderRef"; when(configuration.getAppender(testAppenderRef)).thenReturn(appender); FailoverPolicy<String> failoverPolicy = createTestFailoverPolicy(testAppenderRef, configuration); String failedMessage = "test failed message"; // when failoverPolicy.deliver(failedMessage); // then verify(appender, times(1)).append(any(LogEvent.class)); }
@Test public void resolvesAppenderRefOnlyOnce() { // given Appender appender = mock(Appender.class); when(appender.isStarted()).thenReturn(true); Configuration configuration = mock(Configuration.class); String testAppenderRef = "testAppenderRef"; when(configuration.getAppender(testAppenderRef)).thenReturn(appender); FailoverPolicy<String> failoverPolicy = createTestFailoverPolicy(testAppenderRef, configuration); String failedMessage = "test failed message"; // when failoverPolicy.deliver(failedMessage); failoverPolicy.deliver(failedMessage); // then verify(configuration, times(1)).getAppender(anyString()); verify(appender, times(2)).append(any(LogEvent.class)); }
@Test(expected = ConfigurationException.class) public void throwsExceptionOnUnresolvedAppender() { // given Appender appender = mock(Appender.class); when(appender.isStarted()).thenReturn(true); Configuration configuration = mock(Configuration.class); String testAppenderRef = "testAppenderRef"; when(configuration.getAppender(testAppenderRef)).thenReturn(null); FailoverPolicy<String> failoverPolicy = createTestFailoverPolicy(testAppenderRef, configuration); String failedMessage = "test failed message"; // when failoverPolicy.deliver(failedMessage); } public static FailoverPolicy<String> createTestFailoverPolicy(String testAppenderRef, Configuration configuration) {
@Test public void deliverReturnsImmediately() { // given NoopFailoverPolicy.Builder builder = NoopFailoverPolicy.newBuilder(); FailoverPolicy failoverPolicy = builder.build(); // when failoverPolicy.deliver(null); } }