use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldCloseAndPublishOnExitBeforeSync.
@Test
public void shouldCloseAndPublishOnExitBeforeSync() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("1 hour", "1 hour", "200");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
// Expect new file creation on file flusher construction
when(manager.createFile(anyString())).thenReturn(file);
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 1L);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
assertEquals(CONTINUE, flusher.process(item));
assertEquals(CONTINUE, flusher.process(item));
calls.verify(file, times(2)).append(item.payload);
assertEquals(CONTINUE, flusher.heartbeat());
flusher.cleanup();
calls.verify(file).closeAndPublish();
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldPauseAndAttemptDiscardOnAnyFailure.
@Test
public void shouldPauseAndAttemptDiscardOnAnyFailure() throws IOException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("1 hour", "1 hour", "200");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
// Expect new file creation on file flusher construction
when(manager.createFile(anyString())).thenReturn(file);
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 1L);
// throw exception on first record
doThrow(new IOException("append")).when(file).append(item.payload);
assertEquals(PAUSE, flusher.process(item));
calls.verify(file).append(item.payload);
calls.verify(file).discard();
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldAttemptReconnectAfterHeartbeatSyncFailure.
@Test
public void shouldAttemptReconnectAfterHeartbeatSyncFailure() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("1 hour", "50 milliseconds", "200");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
when(manager.createFile(anyString())).thenReturn(// Flusher construction succeeds
file).thenReturn(// Second file creation succeeds
file);
doThrow(new IOException("sync")).when(file).sync();
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 50L);
assertEquals(CONTINUE, flusher.process(item));
assertEquals(CONTINUE, flusher.process(item));
calls.verify(file, times(2)).append(item.payload);
Thread.sleep(100);
// Sync fails at this point
assertEquals(PAUSE, flusher.heartbeat());
calls.verify(file).sync();
calls.verify(file).discard();
// No attempt at rolling / creating a new file should be made at this point
Thread.sleep(100);
assertEquals(CONTINUE, flusher.heartbeat());
// Reconnect attempt
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldSyncAndRollFile.
@Test
public void shouldSyncAndRollFile() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("200 milliseconds", "1 hour", "2");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
// Expect new file creation on file flusher construction
when(manager.createFile(anyString())).thenReturn(file);
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 1L);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
assertEquals(CONTINUE, flusher.process(item));
assertEquals(CONTINUE, flusher.process(item));
calls.verify(file, times(2)).append(item.payload);
calls.verify(file).sync();
assertEquals(CONTINUE, flusher.process(item));
calls.verify(file).append(item.payload);
Thread.sleep(300);
assertEquals(CONTINUE, flusher.heartbeat());
calls.verify(file).closeAndPublish();
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
use of io.divolte.server.AvroRecordBuffer in project divolte-collector by divolte.
the class FileFlusherTest method shouldAttemptReconnectAfterHeartbeatRollCloseFailure.
@Test
public void shouldAttemptReconnectAfterHeartbeatRollCloseFailure() throws IOException, InterruptedException {
final FileStrategyConfiguration fileStrategyConfiguration = setupConfiguration("50 milliseconds", "1 hour", "2");
// Mocks
final FileManager manager = mock(FileManager.class);
final DivolteFile file = mock(DivolteFile.class);
final InOrder calls = inOrder(manager, file);
final Item<AvroRecordBuffer> item = itemFromAvroRecordBuffer(newAvroRecordBuffer());
when(manager.createFile(anyString())).thenReturn(// Flusher construction succeeds
file).thenReturn(// Second file creation succeeds
file);
doThrow(new IOException("close")).when(file).closeAndPublish();
final FileFlusher flusher = new FileFlusher(fileStrategyConfiguration, manager, 50L);
assertEquals(CONTINUE, flusher.process(item));
assertEquals(CONTINUE, flusher.process(item));
calls.verify(file, times(2)).append(item.payload);
calls.verify(file).sync();
Thread.sleep(100);
// Rolling the file fails at this point (due to closeAndPublish failure)
assertEquals(PAUSE, flusher.heartbeat());
calls.verify(file).closeAndPublish();
calls.verify(file).discard();
// No attempt at rolling / creating a new file should be made at this point
Thread.sleep(100);
assertEquals(CONTINUE, flusher.heartbeat());
// Reconnect attempt
calls.verify(manager).createFile(anyString());
calls.verifyNoMoreInteractions();
}
Aggregations