Refactoring: rename duplicated Util classes
[jabaws.git] / testsrc / compbio / engine / cluster / drmaa / DrmaaClusterEngineTester.java
1 /* Copyright (c) 2009 Peter Troshin\r
2  *  \r
3  *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0     \r
4  * \r
5  *  This library is free software; you can redistribute it and/or modify it under the terms of the\r
6  *  Apache License version 2 as published by the Apache Software Foundation\r
7  * \r
8  *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without\r
9  *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache \r
10  *  License for more details.\r
11  * \r
12  *  A copy of the license is in apache_license.txt. It is also available here:\r
13  * @see: http://www.apache.org/licenses/LICENSE-2.0.txt\r
14  * \r
15  * Any republication or derived work distributed in source code form\r
16  * must include this copyright and license notice.\r
17  */\r
18 \r
19 package compbio.engine.cluster.drmaa;\r
20 \r
21 import static org.testng.AssertJUnit.assertEquals;\r
22 import static org.testng.AssertJUnit.assertFalse;\r
23 import static org.testng.AssertJUnit.assertNotNull;\r
24 import static org.testng.AssertJUnit.assertTrue;\r
25 import static org.testng.AssertJUnit.fail;\r
26 \r
27 import java.text.ParseException;\r
28 \r
29 import org.ggf.drmaa.DrmaaException;\r
30 import org.ggf.drmaa.JobInfo;\r
31 import org.testng.annotations.Test;\r
32 \r
33 import compbio.data.sequence.Alignment;\r
34 import compbio.engine.Configurator;\r
35 import compbio.engine.client.ConfiguredExecutable;\r
36 import compbio.engine.client.Executable;\r
37 import compbio.engine.client.EngineUtil;\r
38 import compbio.metadata.AllTestSuit;\r
39 import compbio.metadata.JobExecutionException;\r
40 import compbio.metadata.JobStatus;\r
41 import compbio.metadata.JobSubmissionException;\r
42 import compbio.metadata.ResultNotAvailableException;\r
43 import compbio.runner.msa.ClustalW;\r
44 import compbio.util.SysPrefs;\r
45 \r
46 public class DrmaaClusterEngineTester {\r
47 \r
48         public static String test_input = AllTestSuit.TEST_DATA_PATH_ABSOLUTE\r
49                         + "TO1381.fasta";\r
50         public static String cluster_test_outfile = "TO1381.clustal.cluster.out";\r
51 \r
52         /**\r
53          * This test uses ClustalW executable as runnable to testing, thus depends\r
54          * on its correct functioning\r
55          */\r
56         @Test(groups = { AllTestSuit.test_group_cluster,\r
57                         AllTestSuit.test_group_engine })\r
58         public void testSubmit() {\r
59                 ClustalW clustal = new ClustalW();\r
60                 assertFalse("Cluster execution can only be in unix environment",\r
61                                 SysPrefs.isWindows);\r
62                 clustal.setInput(test_input).setOutput(cluster_test_outfile);\r
63 \r
64                 try {\r
65                         ConfiguredExecutable<ClustalW> confClust = Configurator\r
66                                         .configureExecutable(clustal,\r
67                                                         Executable.ExecProvider.Cluster);\r
68                         assertNotNull(confClust.getWorkDirectory());\r
69 \r
70                         JobRunner runner = JobRunner.getInstance(confClust);\r
71                         assertEquals("Input was not set!", test_input, clustal.getInput());\r
72                         assertNotNull("Runner is NULL", runner);\r
73                         runner.executeJob();\r
74                         // assertNotNull("JobId is null", jobId1);\r
75                         JobStatus status = runner.getJobStatus();\r
76                         assertTrue("Status of the process is wrong!",\r
77                                         status == JobStatus.PENDING || status == JobStatus.RUNNING);\r
78                         JobInfo info = runner.getJobInfo();\r
79 \r
80                         assertFalse(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
81                                         JobStatus.CANCELLED));\r
82                         assertFalse(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
83                                         JobStatus.STARTED));\r
84                         assertFalse(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
85                                         JobStatus.COLLECTED));\r
86                         assertTrue(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
87                                         JobStatus.FINISHED));\r
88                         assertTrue(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
89                                         JobStatus.SUBMITTED));\r
90 \r
91                         ConfiguredExecutable<?> confExec = runner.waitForResult();\r
92                         // At this point results are marked as collected\r
93                         assertTrue(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
94                                         JobStatus.COLLECTED));\r
95 \r
96                         assertNotNull("JobInfo is null", info);\r
97                         StatisticManager sm = new StatisticManager(info);\r
98                         assertNotNull("Statistics manager is null", sm);\r
99 \r
100                         try {\r
101 \r
102                                 String exits = sm.getExitStatus();\r
103                                 assertNotNull("Exit status is null", exits);\r
104                                 // cut 4 trailing zeros from the number\r
105                                 int exitsInt = ClusterEngineUtil.CLUSTER_STAT_IN_SEC.parse(exits)\r
106                                                 .intValue();\r
107                                 assertEquals("Exit status is not 0", 0, exitsInt);\r
108                                 System.out.println(sm.getAllStats());\r
109 \r
110                         } catch (ParseException e) {\r
111                                 e.printStackTrace();\r
112                                 fail("Parse Exception: " + e.getMessage());\r
113                         }\r
114                         assertTrue("Process exited:", sm.hasExited());\r
115                         assertFalse("Process aborted:", sm.wasAborted());\r
116                         assertFalse("Process hasdump:", sm.hasDump());\r
117                         assertFalse("Process signaled:", sm.hasSignaled());\r
118 \r
119                         Alignment al = confExec.getResults();\r
120                         assertNotNull(al);\r
121                         assertFalse("Could not remove some files whilst cleaning up ",\r
122                                         runner.cleanup());\r
123 \r
124                 } catch (JobSubmissionException e) {\r
125                         e.printStackTrace();\r
126                         fail("DrmaaException caught:" + e.getMessage());\r
127                 } catch (JobExecutionException e) {\r
128                         e.printStackTrace();\r
129                         fail("DrmaaException caught:" + e.getMessage());\r
130                 } catch (DrmaaException e) {\r
131                         e.printStackTrace();\r
132                         fail("DrmaaException caught:" + e.getMessage());\r
133                 } catch (ResultNotAvailableException e) {\r
134                         fail("DrmaaException caught:" + e.getMessage());\r
135                 }\r
136         }\r
137 \r
138         @Test(groups = { AllTestSuit.test_group_cluster,\r
139                         AllTestSuit.test_group_engine })\r
140         public void testCancel() {\r
141                 ClustalW clustal = new ClustalW();\r
142                 assertFalse("Cluster execution can only be in unix environment",\r
143                                 SysPrefs.isWindows);\r
144                 clustal.setInput(test_input).setOutput(cluster_test_outfile);\r
145 \r
146                 try {\r
147 \r
148                         ConfiguredExecutable<ClustalW> confClust = Configurator\r
149                                         .configureExecutable(clustal,\r
150                                                         Executable.ExecProvider.Cluster);\r
151                         assertNotNull(confClust.getWorkDirectory());\r
152 \r
153                         JobRunner runner = JobRunner.getInstance(confClust);\r
154                         assertNotNull("Runner is NULL", runner);\r
155 \r
156                         runner.executeJob();\r
157                         // assertNotNull("JobId is null", jobId1);\r
158                         Thread.sleep(500);\r
159                         JobStatus status = runner.getJobStatus();\r
160                         assertTrue("Status of the process is wrong!",\r
161                                         status == JobStatus.PENDING || status == JobStatus.RUNNING);\r
162                         runner.cancelJob();\r
163                         Thread.sleep(200); // give fs time to write a file\r
164                         JobInfo info = runner.getJobInfo();\r
165                         assertTrue(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
166                                         JobStatus.CANCELLED));\r
167                         assertFalse(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
168                                         JobStatus.STARTED));\r
169                         assertFalse(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
170                                         JobStatus.COLLECTED));\r
171                         assertTrue(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
172                                         JobStatus.FINISHED));\r
173                         assertTrue(EngineUtil.isMarked(confClust.getWorkDirectory(),\r
174                                         JobStatus.SUBMITTED));\r
175 \r
176                 } catch (JobSubmissionException e) {\r
177                         e.printStackTrace();\r
178                         fail("DrmaaException caught:" + e.getMessage());\r
179                 } catch (JobExecutionException e) {\r
180                         e.printStackTrace();\r
181                         fail("DrmaaException caught:" + e.getMessage());\r
182                 } catch (InterruptedException e) {\r
183                         e.printStackTrace();\r
184                         fail("Interupted exception caught:" + e.getMessage());\r
185                 }\r
186         }\r
187 \r
188 }\r