Fix core WST file
[jabaws.git] / testsrc / compbio / runner / msa / ClustalWParametersTester.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.runner.msa;\r
20 \r
21 import static org.testng.Assert.assertFalse;\r
22 import static org.testng.Assert.assertNotNull;\r
23 import static org.testng.Assert.assertTrue;\r
24 import static org.testng.Assert.fail;\r
25 \r
26 import java.io.File;\r
27 import java.io.FileInputStream;\r
28 import java.io.FileNotFoundException;\r
29 import java.io.IOException;\r
30 import java.util.ArrayList;\r
31 import java.util.Collections;\r
32 import java.util.List;\r
33 import java.util.Map;\r
34 \r
35 import javax.xml.bind.JAXBException;\r
36 import javax.xml.bind.ValidationException;\r
37 \r
38 import org.apache.log4j.Level;\r
39 import org.apache.log4j.Logger;\r
40 import org.testng.annotations.BeforeMethod;\r
41 import org.testng.annotations.Test;\r
42 \r
43 import compbio.engine.Configurator;\r
44 import compbio.engine.client.ConfiguredExecutable;\r
45 import compbio.engine.client.Executable.ExecProvider;\r
46 import compbio.engine.conf.RunnerConfigMarshaller;\r
47 import compbio.engine.local.ExecutableWrapper;\r
48 import compbio.engine.local.LocalRunner;\r
49 import compbio.metadata.AllTestSuit;\r
50 import compbio.metadata.JobExecutionException;\r
51 import compbio.metadata.JobSubmissionException;\r
52 import compbio.metadata.Option;\r
53 import compbio.metadata.Parameter;\r
54 import compbio.metadata.Preset;\r
55 import compbio.metadata.PresetManager;\r
56 import compbio.metadata.ResultNotAvailableException;\r
57 import compbio.metadata.RunnerConfig;\r
58 import compbio.runner.OptionCombinator;\r
59 import compbio.runner.msa.ClustalW;\r
60 import compbio.util.FileUtil;\r
61 \r
62 @Test(sequential = true)\r
63 public class ClustalWParametersTester {\r
64 \r
65         static final String clustalConfigFile = AllTestSuit.TEST_DATA_PATH\r
66                         + "ClustalParameters.xml";\r
67 \r
68         public static String test_outfile = "TO1381.clustal.out";\r
69         public static String test_error = "TO1381.clustal.error";\r
70         public static String cluster_test_outfile = "TO1381.clustal.cluster.out";\r
71         public static final String input = AllTestSuit.TEST_DATA_PATH\r
72                         + "ClustalPresets.xml";\r
73 \r
74         private static Logger log = Logger\r
75                         .getLogger(AllTestSuit.RUNNER_TEST_LOGGER);\r
76         static {\r
77                 log.setLevel(Level.INFO);\r
78         }\r
79 \r
80         RunnerConfig<ClustalW> clustalConfig = null;\r
81         OptionCombinator clustalOpc = null;\r
82         PresetManager<ClustalW> presets = null;\r
83 \r
84         @BeforeMethod(groups = { AllTestSuit.test_group_runner })\r
85         public void setup() {\r
86                 try {\r
87                         RunnerConfigMarshaller<ClustalW> clustalmarsh = new RunnerConfigMarshaller<ClustalW>(\r
88                                         RunnerConfig.class);\r
89                         clustalConfig = clustalmarsh.read(new FileInputStream(new File(\r
90                                         clustalConfigFile)), RunnerConfig.class);\r
91                         clustalOpc = new OptionCombinator(clustalConfig);\r
92 \r
93                         // Load presets\r
94                         RunnerConfigMarshaller<ClustalW> rconfigPresets = new RunnerConfigMarshaller<ClustalW>(\r
95                                         PresetManager.class);\r
96                         File infile = new File(input);\r
97                         assertTrue(infile.exists());\r
98                         presets = rconfigPresets.read(new FileInputStream(infile),\r
99                                         PresetManager.class);\r
100                         assertNotNull(presets);\r
101                         assertFalse(presets.getPresets().isEmpty());\r
102 \r
103                 } catch (JAXBException e) {\r
104                         e.printStackTrace();\r
105                         fail(e.getLocalizedMessage());\r
106                 } catch (FileNotFoundException e) {\r
107                         e.printStackTrace();\r
108                         fail(e.getLocalizedMessage());\r
109                 }\r
110 \r
111         }\r
112 \r
113         @Test\r
114         public void testConfiguration() {\r
115                 try {\r
116                         this.clustalConfig.validate();\r
117                 } catch (ValidationException e) {\r
118                         e.printStackTrace();\r
119                         fail(e.getLocalizedMessage());\r
120                 } catch (IllegalStateException e) {\r
121                         e.printStackTrace();\r
122                         fail(e.getLocalizedMessage());\r
123                 }\r
124         }\r
125 \r
126         @Test(groups = { AllTestSuit.test_group_runner })\r
127         public void testDefaultParameters() {\r
128                 ClustalW clustal = new ClustalW();\r
129                 clustal.setInput(AllTestSuit.test_input).setOutput(test_outfile);\r
130 \r
131                 try {\r
132                         // For local execution use relavive\r
133                         ConfiguredExecutable<ClustalW> confClustal = Configurator\r
134                                         .configureExecutable(clustal);\r
135                         LocalRunner lr = new LocalRunner(confClustal);\r
136                         lr.executeJob();\r
137                         confClustal = (ConfiguredExecutable<ClustalW>) lr.waitForResult();\r
138                         assertNotNull(confClustal.getResults());\r
139                 } catch (JobSubmissionException e) {\r
140                         e.printStackTrace();\r
141                         fail(e.getLocalizedMessage());\r
142                 } catch (JobExecutionException e) {\r
143                         e.printStackTrace();\r
144                         fail(e.getLocalizedMessage());\r
145                 } catch (ResultNotAvailableException e) {\r
146                         e.printStackTrace();\r
147                         fail(e.getLocalizedMessage());\r
148                 }\r
149         }\r
150 \r
151         @Test(groups = { AllTestSuit.test_group_runner })\r
152         public void testOptions() {\r
153                 test(clustalOpc.getAllOptions());\r
154         }\r
155 \r
156         @Test(groups = { AllTestSuit.test_group_runner })\r
157         public void testParameters() {\r
158                 List<Parameter<?>> params = clustalOpc.getAllParameters();\r
159                 Collections.shuffle(params);\r
160                 test(params);\r
161         }\r
162 \r
163         @Test(groups = { AllTestSuit.test_group_runner })\r
164         public void testArguments() {\r
165                 List<Option<?>> options = clustalOpc.getAllOptions();\r
166                 options.addAll(clustalOpc.getAllParameters());\r
167                 Collections.shuffle(options);\r
168                 test(options);\r
169         }\r
170 \r
171         @Test(groups = { AllTestSuit.test_group_runner })\r
172         public void testConstrainedParametersMinValues() {\r
173                 Map<Parameter<?>, String> params = clustalOpc\r
174                                 .getAllConstrainedParametersWithBorderValues(true);\r
175                 test(params);\r
176         }\r
177 \r
178         @Test(groups = { AllTestSuit.test_group_runner })\r
179         public void testConstrainedParametersMaxValues() {\r
180                 Map<Parameter<?>, String> params = clustalOpc\r
181                                 .getAllConstrainedParametersWithBorderValues(false);\r
182                 test(params);\r
183         }\r
184 \r
185         @Test(groups = { AllTestSuit.test_group_runner })\r
186         public void testConstrainedParametersRandomValues() {\r
187                 for (int i = 0; i < 5; i++) {\r
188                         Map<Parameter<?>, String> params = clustalOpc\r
189                                         .getAllConstrainedParametersWithRandomValues();\r
190                         List<Parameter<?>> paramList = new ArrayList<Parameter<?>>(params\r
191                                         .keySet());\r
192                         Collections.shuffle(paramList);\r
193                         List<String> args = clustalOpc.parametersToCommandString(paramList,\r
194                                         params);\r
195                         singleTest(args);\r
196                 }\r
197         }\r
198 \r
199         void test(Map<Parameter<?>, String> paramValue) {\r
200                 List<Parameter<?>> paramList = new ArrayList<Parameter<?>>(paramValue\r
201                                 .keySet());\r
202                 for (int i = 0; i < paramValue.size(); i++) {\r
203                         List<String> args = clustalOpc.parametersToCommandString(paramList,\r
204                                         paramValue);\r
205                         singleTest(args);\r
206                         Collections.shuffle(paramList);\r
207                 }\r
208                 log.info("NUMBER OF COBINATION TESTED: " + paramValue.size());\r
209         }\r
210 \r
211         void test(List<? extends Option<?>> params) {\r
212                 for (int i = 0; i < params.size(); i++) {\r
213                         List<String> args = clustalOpc.argumentsToCommandString(params);\r
214                         singleTest(args);\r
215                         Collections.shuffle(params);\r
216                 }\r
217                 log.info("NUMBER OF COBINATION TESTED: " + params.size());\r
218         }\r
219 \r
220         void singleTest(List<String> params) {\r
221                 try {\r
222                         log.info("Using arguments: " + params);\r
223                         ClustalW clustal = new ClustalW();\r
224                         clustal.setInput(AllTestSuit.test_input).setOutput(test_outfile);\r
225 \r
226                         // For local execution use relative\r
227                         ConfiguredExecutable<ClustalW> confClustal = Configurator\r
228                                         .configureExecutable(clustal, ExecProvider.Local);\r
229                         // Add options to the executable\r
230                         confClustal.addParameters(params);\r
231                         LocalRunner lr = new LocalRunner(confClustal);\r
232                         lr.executeJob();\r
233                         confClustal = (ConfiguredExecutable<ClustalW>) lr.waitForResult();\r
234                         assertNotNull(confClustal.getResults());\r
235                         File errors = new File(confClustal.getWorkDirectory(),\r
236                                         ExecutableWrapper.PROC_ERR_FILE);\r
237                         if (errors.length() != 0) {\r
238                                 log.error("PROBLEMS:\n " + FileUtil.readFileToString(errors));\r
239                         }\r
240                         assertTrue(errors.length() == 0, "Run with arguments : " + params\r
241                                         + " FAILED!");\r
242                         Collections.shuffle(params);\r
243                 } catch (JobSubmissionException e) {\r
244                         e.printStackTrace();\r
245                         fail(e.getLocalizedMessage());\r
246                 } catch (JobExecutionException e) {\r
247                         e.printStackTrace();\r
248                         fail(e.getLocalizedMessage());\r
249                 } catch (IOException e) {\r
250                         e.printStackTrace();\r
251                         fail(e.getLocalizedMessage());\r
252                 } catch (ResultNotAvailableException e) {\r
253                         e.printStackTrace();\r
254                         fail(e.getLocalizedMessage());\r
255                 }\r
256         }\r
257 \r
258         @Test(groups = { AllTestSuit.test_group_runner })\r
259         public void testPresets() {\r
260                 for (Preset<ClustalW> p : presets.getPresets()) {\r
261                         singleTest(p.getOptions());\r
262                 }\r
263         }\r
264 \r
265 }\r