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