1 /* Copyright (c) 2009 Peter Troshin
\r
3 * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0
\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
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
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
15 * Any republication or derived work distributed in source code form
\r
16 * must include this copyright and license notice.
\r
19 package compbio.engine.cluster.drmaa;
\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
27 import java.text.ParseException;
\r
29 import org.ggf.drmaa.DrmaaException;
\r
30 import org.ggf.drmaa.JobInfo;
\r
31 import org.testng.annotations.Test;
\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.Util;
\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
46 public class DrmaaClusterEngineTester {
\r
48 public static String test_input = AllTestSuit.TEST_DATA_PATH_ABSOLUTE
\r
50 public static String cluster_test_outfile = "TO1381.clustal.cluster.out";
\r
53 * This test uses ClustalW executable as runnable to testing, thus depends
\r
54 * on its correct functioning
\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
65 ConfiguredExecutable<ClustalW> confClust = Configurator
\r
66 .configureExecutable(clustal,
\r
67 Executable.ExecProvider.Cluster);
\r
68 assertNotNull(confClust.getWorkDirectory());
\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
80 assertFalse(Util.isMarked(confClust.getWorkDirectory(),
\r
81 JobStatus.CANCELLED));
\r
82 assertFalse(Util.isMarked(confClust.getWorkDirectory(),
\r
83 JobStatus.STARTED));
\r
84 assertFalse(Util.isMarked(confClust.getWorkDirectory(),
\r
85 JobStatus.COLLECTED));
\r
86 assertTrue(Util.isMarked(confClust.getWorkDirectory(),
\r
87 JobStatus.FINISHED));
\r
88 assertTrue(Util.isMarked(confClust.getWorkDirectory(),
\r
89 JobStatus.SUBMITTED));
\r
91 ConfiguredExecutable<?> confExec = runner.waitForResult();
\r
92 // At this point results are marked as collected
\r
93 assertTrue(Util.isMarked(confClust.getWorkDirectory(),
\r
94 JobStatus.COLLECTED));
\r
96 assertNotNull("JobInfo is null", info);
\r
97 StatisticManager sm = new StatisticManager(info);
\r
98 assertNotNull("Statistics manager is null", sm);
\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 = ClusterUtil.CLUSTER_STAT_IN_SEC.parse(exits)
\r
107 assertEquals("Exit status is not 0", 0, exitsInt);
\r
108 System.out.println(sm.getAllStats());
\r
110 } catch (ParseException e) {
\r
111 e.printStackTrace();
\r
112 fail("Parse Exception: " + e.getMessage());
\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
119 Alignment al = confExec.getResults();
\r
121 assertFalse("Could not remove some files whilst cleaning up ",
\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
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
148 ConfiguredExecutable<ClustalW> confClust = Configurator
\r
149 .configureExecutable(clustal,
\r
150 Executable.ExecProvider.Cluster);
\r
151 assertNotNull(confClust.getWorkDirectory());
\r
153 JobRunner runner = JobRunner.getInstance(confClust);
\r
154 assertNotNull("Runner is NULL", runner);
\r
156 runner.executeJob();
\r
157 // assertNotNull("JobId is null", jobId1);
\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(Util.isMarked(confClust.getWorkDirectory(),
\r
166 JobStatus.CANCELLED));
\r
167 assertFalse(Util.isMarked(confClust.getWorkDirectory(),
\r
168 JobStatus.STARTED));
\r
169 assertFalse(Util.isMarked(confClust.getWorkDirectory(),
\r
170 JobStatus.COLLECTED));
\r
171 assertTrue(Util.isMarked(confClust.getWorkDirectory(),
\r
172 JobStatus.FINISHED));
\r
173 assertTrue(Util.isMarked(confClust.getWorkDirectory(),
\r
174 JobStatus.SUBMITTED));
\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