--- /dev/null
+package compbio.stat.collector;\r
+\r
+import static org.testng.Assert.assertEquals;\r
+import static org.testng.Assert.assertFalse;\r
+import static org.testng.Assert.assertTrue;\r
+\r
+import java.io.File;\r
+import java.util.Date;\r
+import java.util.concurrent.Executors;\r
+import java.util.concurrent.ScheduledExecutorService;\r
+import java.util.concurrent.ScheduledFuture;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import org.testng.Assert;\r
+import org.testng.annotations.Test;\r
+\r
+import compbio.metadata.AllTestSuit;\r
+import compbio.stat.collector.JobDirectory;\r
+\r
+public class ExecutionStatCollectorTester {\r
+\r
+ final static String LOCAL_JOBS = AllTestSuit.TEST_DATA_PATH_ABSOLUTE\r
+ + "ljobs";\r
+ final static String CLUSTER_JOBS = AllTestSuit.TEST_DATA_PATH_ABSOLUTE\r
+ + "jobs";\r
+ @Test\r
+ public void testCollectStat() {\r
+ ExecutionStatCollector local_jobs = new ExecutionStatCollector(\r
+ LOCAL_JOBS, 1);\r
+ ExecutionStatCollector cl_jobs = new ExecutionStatCollector(\r
+ CLUSTER_JOBS, 24);\r
+ \r
+ // Collect statistics prior to call getStats()!\r
+ local_jobs.collectStatistics();\r
+ cl_jobs.collectStatistics();\r
+ \r
+ StatProcessor local_stats = local_jobs.getStats();\r
+ StatProcessor cl_stats = cl_jobs.getStats();\r
+ \r
+ assertEquals(local_stats.getJobNumber(), 12);\r
+ // ClustalW#1015343425414965 - empty\r
+ assertEquals(local_stats.getIncompleteJobs().size(), 1);\r
+ assertEquals(local_stats.getFailedJobs().size(), 0);\r
+ assertEquals(local_stats.getAbandonedJobs().size(), 1);\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testUpdateStatTester() {\r
+\r
+ ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);\r
+ ScheduledFuture<?> sf = executor.scheduleAtFixedRate(\r
+ new ExecutionStatCollector(LOCAL_JOBS, 1), 1, 10,\r
+ TimeUnit.SECONDS);\r
+\r
+ try {\r
+ Thread.sleep(1000 * 35);\r
+ executor.shutdown();\r
+ executor.awaitTermination(300, TimeUnit.SECONDS);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ Assert.fail(e.getMessage());\r
+ }\r
+ }\r
+\r
+ /**\r
+ * This test will fail in time as it relies on last access time for file in\r
+ * the filesystem! This OK as it has been tested by then.\r
+ * \r
+ */\r
+ @Test (enabled = false)\r
+ public void testHasTimedOut() {\r
+ ExecutionStatCollector ecol = new ExecutionStatCollector(LOCAL_JOBS, 1);\r
+ File f = new File(LOCAL_JOBS + File.separator\r
+ + "ClustalW#1015373448154965");\r
+ File timedOut = new File(LOCAL_JOBS + File.separator\r
+ + "Mafft#7868649707286965");\r
+\r
+ JobDirectory jd = new JobDirectory(f);\r
+ JobDirectory timedOutDir = new JobDirectory(timedOut);\r
+ System.out.println("! " + new Date(f.lastModified()));\r
+\r
+ assertTrue((System.currentTimeMillis() - f.lastModified())\r
+ / (1000 * 60 * 60) < 1);\r
+ assertFalse((System.currentTimeMillis() - timedOut.lastModified())\r
+ / (1000 * 60 * 60) < 1);\r
+ assertFalse(ecol.hasTimedOut(jd));\r
+ assertTrue(ecol.hasTimedOut(timedOutDir));\r
+ }\r
+\r
+ @Test\r
+ public void testHasCompleted() {\r
+ ExecutionStatCollector ecol_no_timeout = new ExecutionStatCollector(\r
+ LOCAL_JOBS, 10000000);\r
+ ExecutionStatCollector ecol = new ExecutionStatCollector(LOCAL_JOBS, 1);\r
+\r
+ File normal = new File(LOCAL_JOBS + File.separator\r
+ + "ClustalW#100368900075204");\r
+ File finished = new File(LOCAL_JOBS + File.separator\r
+ + "ClustalW#1015373448154965");\r
+ File cancelled = new File(LOCAL_JOBS + File.separator\r
+ + "Mafft#7918237850044965");\r
+ File noresult = new File(LOCAL_JOBS + File.separator\r
+ + "ClustalW#1015343425414965");\r
+\r
+ JobDirectory dnormal = new JobDirectory(normal);\r
+ JobDirectory dfinished = new JobDirectory(finished);\r
+ JobDirectory dcancelled = new JobDirectory(cancelled);\r
+\r
+ JobDirectory dnoresult = new JobDirectory(noresult);\r
+\r
+ assertTrue(ecol.hasCompleted(dnormal));\r
+ assertTrue(ecol.hasCompleted(dfinished));\r
+ assertTrue(ecol.hasCompleted(dcancelled));\r
+\r
+ assertTrue(ecol.hasCompleted(dnoresult));\r
+ assertFalse(ecol_no_timeout.hasCompleted(dnoresult));\r
+\r
+ }\r
+}\r