private void flushUnderlyingBufferAndReset() { synchronized (inputBuffer) { if (inputBuffer.available() == 0) { // Somebody beat you to it return; } final String pathname = getFileName(); createdFiles.add(pathname); log.debug("Flushing in-memory buffer to disk: {}", pathname); try { final File out = new File(pathname); flushToFile(out); } catch (IOException e) { log.warn("Error flushing data", e); } finally { reset(); } } }
@Test(groups = "slow") public void testOrdering() throws Exception { Assert.assertTrue(basePath.mkdir()); final List<String> filePathsCreated = new ArrayList<String>(); final List<File> filesCreated = new ArrayList<File>(); final int expected = 50; for (int i = 0; i < expected; i++) { filePathsCreated.add(outputStream.getFileName()); Thread.sleep(17); } // Create the files in the opposite ordering to make sure we can re-read them in order for (int i = expected - 1; i >= 0; i--) { final File file = new File(filePathsCreated.get(i)); Assert.assertTrue(file.createNewFile()); filesCreated.add(file); } final MockReplayer replayer = new MockReplayer(basePath.toString(), Lists.reverse(filesCreated)); replayer.readAll(); Assert.assertEquals(replayer.getSeen(), expected); } }