--- /dev/null
+/* Copyright (c) 2009 Peter Troshin\r
+ * \r
+ * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0 \r
+ * \r
+ * This library is free software; you can redistribute it and/or modify it under the terms of the\r
+ * Apache License version 2 as published by the Apache Software Foundation\r
+ * \r
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without\r
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache \r
+ * License for more details.\r
+ * \r
+ * A copy of the license is in apache_license.txt. It is also available here:\r
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt\r
+ * \r
+ * Any republication or derived work distributed in source code form\r
+ * must include this copyright and license notice.\r
+ */\r
+\r
+package compbio.runner.msa;\r
+\r
+import static org.testng.Assert.assertFalse;\r
+import static org.testng.Assert.assertNotNull;\r
+import static org.testng.Assert.assertTrue;\r
+import static org.testng.Assert.fail;\r
+\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import javax.xml.bind.JAXBException;\r
+import javax.xml.bind.ValidationException;\r
+\r
+import org.apache.log4j.Level;\r
+import org.apache.log4j.Logger;\r
+import org.testng.annotations.BeforeMethod;\r
+import org.testng.annotations.Test;\r
+\r
+import compbio.engine.Configurator;\r
+import compbio.engine.SyncExecutor;\r
+import compbio.engine.client.ConfiguredExecutable;\r
+import compbio.engine.client.Executable.ExecProvider;\r
+import compbio.engine.conf.RunnerConfigMarshaller;\r
+import compbio.metadata.AllTestSuit;\r
+import compbio.metadata.JobExecutionException;\r
+import compbio.metadata.JobSubmissionException;\r
+import compbio.metadata.Option;\r
+import compbio.metadata.Parameter;\r
+import compbio.metadata.Preset;\r
+import compbio.metadata.PresetManager;\r
+import compbio.metadata.ResultNotAvailableException;\r
+import compbio.metadata.RunnerConfig;\r
+import compbio.runner.OptionCombinator;\r
+import compbio.runner.msa.Mafft;\r
+import compbio.util.Util;\r
+\r
+public class MafftParametersTester {\r
+\r
+ static final String mafftConfigFile = AllTestSuit.TEST_DATA_PATH\r
+ + "MafftParameters.xml";\r
+ public static String test_outfile = "TO1381.mafft.out";\r
+ public static final String input = AllTestSuit.TEST_DATA_PATH\r
+ + "MafftPresets.xml";\r
+\r
+ private static Logger log = Logger\r
+ .getLogger(AllTestSuit.RUNNER_TEST_LOGGER);\r
+ static {\r
+ log.setLevel(Level.INFO);\r
+ }\r
+\r
+ PresetManager<Mafft> presets = null;\r
+ RunnerConfig<Mafft> mafftConfig = null;\r
+ OptionCombinator mafftOpc = null;\r
+\r
+ @BeforeMethod(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void setup() {\r
+ try {\r
+ // Load parameters\r
+ RunnerConfigMarshaller<Mafft> mafftmarsh = new RunnerConfigMarshaller<Mafft>(\r
+ RunnerConfig.class);\r
+ mafftConfig = mafftmarsh.read(new FileInputStream(new File(\r
+ mafftConfigFile)), RunnerConfig.class);\r
+ mafftOpc = new OptionCombinator(mafftConfig);\r
+ // Load presets\r
+ RunnerConfigMarshaller<Mafft> rconfigPresets = new RunnerConfigMarshaller<Mafft>(\r
+ PresetManager.class);\r
+ File infile = new File(input);\r
+ assertTrue(infile.exists());\r
+ presets = rconfigPresets.read(new FileInputStream(infile),\r
+ PresetManager.class);\r
+ assertNotNull(presets);\r
+ assertFalse(presets.getPresets().isEmpty());\r
+\r
+ } catch (JAXBException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ }\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testConfiguration() {\r
+ try {\r
+ this.mafftConfig.validate();\r
+ } catch (ValidationException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (IllegalStateException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ }\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void testDefaultParameters() {\r
+ Mafft mafft = new Mafft();\r
+ mafft.setInput(AllTestSuit.test_input).setOutput(test_outfile);\r
+\r
+ try {\r
+ // For local execution use relavive\r
+ ConfiguredExecutable<Mafft> confMafft = Configurator\r
+ .configureExecutable(mafft, ExecProvider.Cluster);\r
+ SyncExecutor sexecutor = Configurator.getSyncEngine(confMafft);\r
+ sexecutor.executeJob();\r
+ confMafft = (ConfiguredExecutable<Mafft>) sexecutor.waitForResult();\r
+ assertNotNull(confMafft.getResults());\r
+ } catch (JobSubmissionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (JobExecutionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (ResultNotAvailableException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ }\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void testOptions() {\r
+ test(mafftOpc.getAllOptions());\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void testParameters() {\r
+ List<Parameter<?>> params = mafftOpc.getAllParameters();\r
+ Collections.shuffle(params);\r
+ test(params);\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void testArguments() {\r
+ List<Option<?>> options = new ArrayList<Option<?>>(mafftConfig\r
+ .getOptions());\r
+ options.addAll(mafftOpc.getAllParameters());\r
+ Collections.shuffle(options);\r
+ test(options);\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void testConstrainedParametersMinValues() {\r
+ Map<Parameter<?>, String> params = mafftOpc\r
+ .getAllConstrainedParametersWithBorderValues(true);\r
+ test(params);\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void testConstrainedParametersMaxValues() {\r
+ Map<Parameter<?>, String> params = mafftOpc\r
+ .getAllConstrainedParametersWithBorderValues(false);\r
+ test(params);\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void testConstrainedParametersRandomValues() {\r
+ for (int i = 0; i < 20; i++) {\r
+ Map<Parameter<?>, String> params = mafftOpc\r
+ .getAllConstrainedParametersWithRandomValues();\r
+ List<Parameter<?>> paramList = new ArrayList<Parameter<?>>(params\r
+ .keySet());\r
+ Collections.shuffle(paramList);\r
+ List<Parameter<?>> subList = paramList.subList(0, Util\r
+ .getRandomNumber(1, paramList.size()));\r
+ List<String> args = mafftOpc.parametersToCommandString(subList,\r
+ params);\r
+ singleTest(args);\r
+ }\r
+ }\r
+\r
+ @Test(groups = { AllTestSuit.test_group_runner,\r
+ AllTestSuit.test_group_non_windows })\r
+ public void testPresets() {\r
+ for (Preset<Mafft> p : presets.getPresets()) {\r
+ singleTest(p.getOptions());\r
+ }\r
+ }\r
+\r
+ void test(Map<Parameter<?>, String> paramValue) {\r
+ List<Parameter<?>> paramList = new ArrayList<Parameter<?>>(paramValue\r
+ .keySet());\r
+ for (int i = 0; i < paramValue.size(); i++) {\r
+ List<String> args = mafftOpc.parametersToCommandString(paramList,\r
+ paramValue);\r
+ singleTest(args);\r
+ Collections.shuffle(paramList);\r
+ }\r
+ log.info("NUMBER OF COBINATION TESTED: " + paramValue.size());\r
+ }\r
+\r
+ void test(List<? extends Option<?>> params) {\r
+ for (int i = 0; i < params.size(); i++) {\r
+ List<String> args = mafftOpc.argumentsToCommandString(params);\r
+ singleTest(args);\r
+ Collections.shuffle(params);\r
+ }\r
+ log.info("NUMBER OF COBINATION TESTED: " + params.size());\r
+ }\r
+\r
+ void singleTest(List<String> params) {\r
+ try {\r
+ log.info("Using arguments: " + params);\r
+ Mafft mafft = new Mafft();\r
+ mafft.setInput(AllTestSuit.test_input).setOutput(test_outfile);\r
+\r
+ // For local execution use relative\r
+ ConfiguredExecutable<Mafft> confMafft = Configurator\r
+ .configureExecutable(mafft, ExecProvider.Local);\r
+ // Add options to the executable\r
+ confMafft.addParameters(params);\r
+\r
+ SyncExecutor sexecutor = Configurator.getSyncEngine(confMafft);\r
+ sexecutor.executeJob();\r
+ ConfiguredExecutable<?> al = sexecutor.waitForResult();\r
+ assertNotNull(al.getResults());\r
+ /*\r
+ * TODO File errors = new File(confMafft.getWorkDirectory(),\r
+ * ExecutableWrapper.PROC_ERR_FILE); if (errors.length() != 0) {\r
+ * log.error("PROBLEMS:\n " + FileUtil.readFileToString(errors)); }\r
+ * assertTrue("Run with arguments : " + params + " FAILED!", errors\r
+ * .length() == 0);\r
+ */\r
+ } catch (JobSubmissionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (JobExecutionException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ } catch (ResultNotAvailableException e) {\r
+ e.printStackTrace();\r
+ fail(e.getLocalizedMessage());\r
+ }\r
+ }\r
+\r
+}\r