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