Further work to enable stat collection and display
[jabaws.git] / testsrc / compbio / stat / collector / ExecutionStatCollectorTester.java
index d209e13..9773935 100644 (file)
@@ -1,21 +1,35 @@
 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.ExecutionStatCollector.JobDirectory;\r
 \r
 public class ExecutionStatCollectorTester {\r
 \r
+       final static String LOCAL_JOBS = AllTestSuit.TEST_DATA_PATH_ABSOLUTE\r
+                       + File.separator + "ljobs";\r
+       final static String CLUSTER_JOBS = AllTestSuit.TEST_DATA_PATH_ABSOLUTE\r
+                       + File.separator + "jobs";\r
        @Test\r
        public void testCollectStat() {\r
                ExecutionStatCollector local_jobs = new ExecutionStatCollector(\r
-                               AllTestSuit.TEST_DATA_PATH_ABSOLUTE + File.separator + "ljobs");\r
+                               LOCAL_JOBS, 1);\r
                ExecutionStatCollector cl_jobs = new ExecutionStatCollector(\r
-                               AllTestSuit.TEST_DATA_PATH_ABSOLUTE + File.separator + "jobs");\r
+                               CLUSTER_JOBS, 24);\r
+\r
                StatProcessor local_stats = local_jobs.getStats();\r
                StatProcessor cl_stats = cl_jobs.getStats();\r
                // System.out.println("L: " + local_stats.stats);\r
@@ -29,7 +43,77 @@ public class ExecutionStatCollectorTester {
                assertEquals(2, local_stats.getAbandonedJobs().size());\r
 \r
        }\r
-       public void testUpdateStat() {\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\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