Add testing dirs
[proteocache.git] / testsrc / compbio / stat / collector / ExecutionStatCollectorTester.java
diff --git a/testsrc/compbio/stat/collector/ExecutionStatCollectorTester.java b/testsrc/compbio/stat/collector/ExecutionStatCollectorTester.java
new file mode 100644 (file)
index 0000000..b99b36c
--- /dev/null
@@ -0,0 +1,120 @@
+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