Add testing dirs
[proteocache.git] / testsrc / compbio / engine / local / EngineResourcesLeakTester.java
diff --git a/testsrc/compbio/engine/local/EngineResourcesLeakTester.java b/testsrc/compbio/engine/local/EngineResourcesLeakTester.java
new file mode 100644 (file)
index 0000000..08e194c
--- /dev/null
@@ -0,0 +1,181 @@
+/* Copyright (c) 2009 Peter Troshin\r
+ *  \r
+ *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0     \r
+ * \r
+ *  This library is free software; you can redistribute it and/or modify it under the terms of the\r
+ *  Apache License version 2 as published by the Apache Software Foundation\r
+ * \r
+ *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without\r
+ *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache \r
+ *  License for more details.\r
+ * \r
+ *  A copy of the license is in apache_license.txt. It is also available here:\r
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt\r
+ * \r
+ * Any republication or derived work distributed in source code form\r
+ * must include this copyright and license notice.\r
+ */\r
+package compbio.engine.local;\r
+\r
+import static org.testng.Assert.assertEquals;\r
+import static org.testng.Assert.assertNotNull;\r
+import static org.testng.Assert.assertTrue;\r
+import static org.testng.Assert.fail;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.testng.annotations.Test;\r
+\r
+import compbio.engine.AsyncExecutor;\r
+import compbio.engine.Configurator;\r
+import compbio.engine.SubmissionManager;\r
+import compbio.engine.client.ConfiguredExecutable;\r
+import compbio.engine.client.Executable;\r
+import compbio.metadata.AllTestSuit;\r
+import compbio.metadata.JobStatus;\r
+import compbio.metadata.JobSubmissionException;\r
+import compbio.metadata.ResultNotAvailableException;\r
+import compbio.runner.msa.ClustalW;\r
+import compbio.runner.msa.Muscle;\r
+\r
+public class EngineResourcesLeakTester {\r
+\r
+       static int numberOfExecutions = 50;\r
+\r
+       @Test(groups = { AllTestSuit.test_group_long })\r
+       public void loadEngineRetrieveResultsManyTimes() {\r
+\r
+               List<String> idlist = new ArrayList<String>();\r
+               ClustalW clu = new ClustalW();\r
+               clu.setInput(AllTestSuit.test_input_real);\r
+               try {\r
+                       for (int i = 0; i < numberOfExecutions; i++) {\r
+                               ConfiguredExecutable<ClustalW> cclustal = Configurator\r
+                                               .configureExecutable(clu, Executable.ExecProvider.Local);\r
+                               AsyncExecutor engine = Configurator.getAsyncEngine(cclustal);\r
+                               String jobId = engine.submitJob(cclustal);\r
+                               assertNotNull(jobId);\r
+                               Thread.sleep(50);\r
+                               assertNotNull(SubmissionManager.getTask(jobId));\r
+                               assertTrue(idlist.add(jobId));\r
+                       }\r
+               } catch (JobSubmissionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+\r
+               assertEquals(idlist.size(), numberOfExecutions);\r
+               // assertEquals(SubmissionManager.submittedTasks.size(),\r
+               // numberOfExecutions * 2);\r
+\r
+               try {\r
+                       while (true) {\r
+                               int doneCounter = 0;\r
+                               for (String taskId : idlist) {\r
+                                       AsyncExecutor engine = Configurator.getAsyncEngine(taskId);\r
+                                       JobStatus status = engine.getJobStatus(taskId);\r
+                                       System.out.println("Status for job: " + taskId + " "\r
+                                                       + status);\r
+\r
+                                       if (status == JobStatus.FINISHED) {\r
+                                               assertNotNull(taskId);\r
+                                               System.out.println(taskId);\r
+                                               // System.out.println(SubmissionManager.submittedTasks);\r
+                                               // assertNotNull(SubmissionManager.getTask(taskId));\r
+                                               Thread.sleep(200); // let buffers to be written\r
+                                               ConfiguredExecutable<ClustalW> confclust = (ConfiguredExecutable<ClustalW>) engine\r
+                                                               .getResults(taskId);\r
+                                               assertNotNull(confclust);\r
+                                               assertNotNull(confclust.getResults());\r
+                                               doneCounter++;\r
+                                       }\r
+                               }\r
+                               if (doneCounter == numberOfExecutions) {\r
+                                       break;\r
+                               }\r
+                       }\r
+               } catch (ResultNotAvailableException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getMessage());\r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getMessage());\r
+               }\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_long  })\r
+       public void loadEngineRetrieveResultsOnce() {\r
+\r
+               Map<String, Boolean> idlist = new HashMap<String, Boolean>();\r
+               Muscle muscle = new Muscle();\r
+               muscle.setInput(AllTestSuit.test_input_real);\r
+               muscle.setOutput("muscle.out");\r
+               try {\r
+                       for (int i = 0; i < numberOfExecutions; i++) {\r
+                               ConfiguredExecutable<Muscle> cmuscle = Configurator\r
+                                               .configureExecutable(muscle,\r
+                                                               Executable.ExecProvider.Local);\r
+                               AsyncExecutor engine = Configurator.getAsyncEngine(cmuscle);\r
+                               String jobId = engine.submitJob(cmuscle);\r
+                               assertNotNull(jobId);\r
+                               Thread.sleep(50);\r
+                               assertNotNull(SubmissionManager.getTask(jobId));\r
+                               assertTrue(idlist.put(jobId, false) == null);\r
+                       }\r
+               } catch (JobSubmissionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               }\r
+\r
+               assertEquals(idlist.size(), numberOfExecutions);\r
+               // assertEquals(SubmissionManager.submittedTasks.size(), 20);\r
+\r
+               try {\r
+                       int doneCounter = 0;\r
+                       while (true) {\r
+                               if (doneCounter == numberOfExecutions) {\r
+                                       break;\r
+                               }\r
+                               for (String taskId : idlist.keySet()) {\r
+                                       Thread.sleep(50); // slow checking down\r
+                                       AsyncExecutor engine = Configurator.getAsyncEngine(taskId);\r
+                                       JobStatus status = engine.getJobStatus(taskId);\r
+                                       System.out.println("Status for job: " + taskId + " "\r
+                                                       + status);\r
+\r
+                                       if (status == JobStatus.FINISHED) {\r
+                                               assertNotNull(taskId);\r
+                                               if (idlist.get(taskId)) {\r
+                                                       continue;\r
+                                               }\r
+                                               System.out.println(taskId);\r
+                                               // System.out.println(SubmissionManager.submittedTasks);\r
+                                               // assertNotNull(SubmissionManager.getTask(taskId));\r
+                                               Thread.sleep(100);// let the buffers to write things\r
+                                               ConfiguredExecutable<ClustalW> confclust = (ConfiguredExecutable<ClustalW>) engine\r
+                                                               .getResults(taskId);\r
+                                               assertNotNull(confclust);\r
+                                               assertNotNull(confclust.getResults());\r
+                                               idlist.put(taskId, true);\r
+                                               doneCounter++;\r
+                                       }\r
+                               }\r
+                       }\r
+               } catch (ResultNotAvailableException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getMessage());\r
+               } catch (InterruptedException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getMessage());\r
+               }\r
+       }\r
+}\r