--- /dev/null
+/* 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