package edu.msu.nscl.olog; import com.sun.jersey.core.util.MultivaluedMapImpl; import org.apache.commons.lang.time.DateUtils; import org.apache.jackrabbit.JcrConstants; import org.junit.*; import javax.jcr.*; import javax.ws.rs.core.MultivaluedMap; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.*; public class OlogPerformanceTest { private static BufferedWriter out; private static long logId; @BeforeClass public static void prepareTest() throws IOException { System.setProperty("persistenceUnit", "olog_test"); String filePath = OlogPerformanceTest.class.getResource("OlogPerformanceTest.class").getPath(); File outputFile = new File(filePath.substring(0,filePath.indexOf("target")) + "src/test/java/edu/msu/nscl/olog/OlogPerformanceTestResult.txt"); out = new BufferedWriter(new FileWriter(outputFile)); } @AfterClass public static void close() throws IOException { out.close(); } private void runTests(final String dbTypeText) throws IOException, OlogException, RepositoryException { findLogByAttribute(dbTypeText); insertLog(dbTypeText); insertLog2(dbTypeText); insertLog2(dbTypeText); findLogByDate(dbTypeText); findLogByAttribute(dbTypeText); findLogById(dbTypeText); removeLog(dbTypeText); findAllProperties(dbTypeText); findPropertyByName(dbTypeText); createProperty(dbTypeText); removeProperty(dbTypeText); findAllLogbooks(dbTypeText); findLogbookByName(dbTypeText); createLogbook(dbTypeText); removeLogbook(dbTypeText); findAllTags(dbTypeText); findTagByName(dbTypeText); createTag(dbTypeText); removeTag(dbTypeText); } @Ignore @Test public void runTest() throws RepositoryException, OlogException, IOException { runTests("psql db - "); } public void findLogByAttribute(String dbTypeText) throws RepositoryException, OlogException, IOException { MultivaluedMap<String, String> map = new MultivaluedMapImpl(); map.add("sweep.crystal_name", "ECF_229"); long startTime = System.nanoTime(); Logs logs = LogManagerTest.findLog(map); long endTime = System.nanoTime(); logId = logs.getLogList().size() > 0 ? logs.get(0).getEntryId(): 1l; double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find a log by attribute is: " + totalTime + "(s)"); out.newLine(); } public void insertLog(final String dbTypeText) throws RepositoryException, OlogException, IOException { Log logOld = LogManagerTest.findLog(logId); logOld.setOwner("testLog"); logOld.setEntryId(null); logOld.setId(null); logOld.setState(null); logOld.setState(null); logOld.setEntry(null); logOld.getLogbooks().iterator().next().setLogs(new Logs()); logOld.getLogbooks().iterator().next().setOwner("testOwner"); logOld.getLogbooks().iterator().next().setName("testLog"); logOld.getLogbooks().iterator().next().setId(null); logOld.setAttributes(new HashSet<LogAttribute>()); long startTime = System.nanoTime(); Log log = LogManagerTest.create(logOld); logId = log.getEntryId(); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to insert a log is: " + totalTime + "(s)"); out.newLine(); } public void insertLog2(String dbTypeText) throws RepositoryException, OlogException, IOException { Log logOld = LogManagerTest.findLog(logId); logOld.setOwner("testLog2"); logOld.setEntryId(null); logOld.getLogbooks().iterator().next().setLogs(null); long startTime = System.nanoTime(); Log log = LogManagerTest.create(logOld); logId = log.getEntryId(); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to insert a log2 is: " + totalTime + "(s)" ); out.newLine(); } public void findLogByDate(String dbTypeText) throws RepositoryException, OlogException, IOException { MultivaluedMap<String, String> map = new MultivaluedMapImpl(); map.add("start", String.valueOf(DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH).getTime() / 1000)); long startTime = System.nanoTime(); Logs logs = LogManagerTest.findLog(map); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find a log by date is: " + totalTime + "(s)"); out.newLine(); } public void findLogById(String dbTypeText) throws OlogException, IOException { long startTime = System.nanoTime(); Log log = LogManagerTest.findLog(logId); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find a log by id is: " + totalTime + "(s)"); out.newLine(); } public void removeLog(String dbTypeText) throws RepositoryException, OlogException, IOException { long startTime = System.nanoTime(); LogManagerTest.remove(logId); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to delete a log is: " + totalTime + "(s)"); out.newLine(); } public void findAllProperties(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Set<Property> properties = PropertyManagerTest.findAll(); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find all properties is: " + totalTime + "(s)"); out.newLine(); } public void findPropertyByName(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Property property = PropertyManagerTest.findProperty("johnprop"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find a property by name is: " + totalTime + "(s)"); out.newLine(); } public void createProperty(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Property property = PropertyManagerTest.create("testProp"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to create a property is: " + totalTime + "(s)"); out.newLine(); } public void removeProperty(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); PropertyManagerTest.remove("testProp"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to remove a property is: " + totalTime + "(s)"); out.newLine(); } public void findAllLogbooks(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Logbooks logbooks = LogbookManagerTest.findAll(); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find all logbooks is: " + totalTime + "(s)"); out.newLine(); } public void findLogbookByName(final String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Logbook logbook = LogbookManagerTest.findLogbook("johnLog"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find a logbook by name is: " + totalTime + "(s)"); out.newLine(); } public void createLogbook(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Logbook logbook = LogbookManagerTest.create("testLog", "testUser"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to create a logbook is: " + totalTime + "(s)"); out.newLine(); } public void removeLogbook(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); LogbookManagerTest.remove("testLog"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to remove a logbook is: " + totalTime + "(s)"); out.newLine(); } public void findAllTags(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Tags tags = TagManagerTest.findAll(); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find all tags is: " + totalTime + "(s)"); out.newLine(); } public void findTagByName(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Tag tag = TagManagerTest.findTag("testTag"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to find a tag by name is: " + totalTime + "(s)"); out.newLine(); } public void createTag(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); Tag Tag = TagManagerTest.create("testTag2"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to create a tag is: " + totalTime + "(s)"); out.newLine(); } public void removeTag(String dbTypeText) throws IOException, OlogException { long startTime = System.nanoTime(); TagManagerTest.remove("testTag2"); long endTime = System.nanoTime(); double totalTime =(endTime - startTime) / 1000000000.0; out.write(dbTypeText + " Time consume to remove a tag is: " + totalTime + "(s)"); out.newLine(); } }