package com.google.code.joto.eventrecorder.impl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * JUnit test for RollingFileRecordEventStore */ public class RollingFileRecordEventStoreTest extends AbstractRecordEventStoreTestHelper { private static final Logger log = LoggerFactory.getLogger(RollingFileRecordEventStoreTest.class); public RollingFileRecordEventStoreTest(String name) { super(name); } protected RollingFileRecordEventStore setupRollingFileTest( String testFileName, int maxRollingFiles, int maxFileSize) { RollingFileRecordEventStore eventStore = new RollingFileRecordEventStore(getTargetTestDir(), testFileName, ".tmp"); eventStore.setMaxRollingFiles(maxRollingFiles); eventStore.setMaxFileSize(maxFileSize); return eventStore; } protected void tearDownRollingFileTest(RollingFileRecordEventStore rollingFile) { rollingFile.deleteFiles(); } public void testWrite1() { RollingFileRecordEventStore eventStore = setupRollingFileTest("RollingFileTest1", 3, 1000); try { eventStore.open("rw"); doTestWrite1CloseRead(eventStore); } catch(Exception ex) { eventStore.close(); throw new RuntimeException(ex); } finally { tearDownRollingFileTest(eventStore); } } public void testReadWriteMultiple() { RollingFileRecordEventStore eventStore = setupRollingFileTest("RollingFileTestReadWriteMult", 3, 1000); try { eventStore.open("rw"); doTestReadWriteMany(eventStore, true); // finish eventStore.close(); } finally { tearDownRollingFileTest(eventStore); } } public void testBenchmarkWriteSimple() { boolean deleteFile = true; // use false for debugging(?): showing file content log.info("benchmark RollingFileRecordEventStore ... First result is not significative because hotspot is lazy..."); String baseName = "RollingFileRecord"; int maxRollingFiles = 4; int maxFileSize = 1024*1024; // 1Mo doTestBenchmarkWriteSimple(baseName, maxRollingFiles, maxFileSize, 50, 50, deleteFile); log.info("now benchmark with different repeatCount x size"); doTestBenchmarkWriteSimple(baseName, maxRollingFiles, maxFileSize, 1000, 10, deleteFile); doTestBenchmarkWriteSimple(baseName, maxRollingFiles, maxFileSize, 100, 100, deleteFile); // doTestBenchmarkWriteSimple(baseName, maxRollingFiles, maxFileSize, 10, 1000, deleteFile); // doTestBenchmarkWriteSimple(baseName, maxRollingFiles, maxFileSize, 10, 10000); // doTestBenchmarkWriteSimple(baseName, maxRollingFiles, maxFileSize,5, 500000); log.info("benchmark RollingFileRecordEventStore finished"); } protected void doTestBenchmarkWriteSimple( String benchBaseName, int maxRollingFiles, int maxFileSize, final int repeatCount, final int writeCount, boolean deleteFile) { System.gc(); System.gc(); int sizeInMo = maxFileSize / (1024*1024); String fileName = benchBaseName + "_max" + maxRollingFiles + "-" + sizeInMo + "M" + "-bench-x" + repeatCount + "-" + writeCount + ".tmp"; RollingFileRecordEventStore eventStore = setupRollingFileTest(fileName, maxRollingFiles, maxFileSize); try { eventStore.open("rw"); doRunBenchmarkWriteSimple(eventStore, repeatCount, writeCount); // finish eventStore.close(); } catch(Exception ex) { eventStore.close(); throw new RuntimeException(ex); } finally { if (deleteFile) { eventStore.deleteFiles(); } } } }