Add testing dirs
[proteocache.git] / testsrc / compbio / casscode / msa / ClustalWParametersTester.java
diff --git a/testsrc/compbio/casscode/msa/ClustalWParametersTester.java b/testsrc/compbio/casscode/msa/ClustalWParametersTester.java
new file mode 100644 (file)
index 0000000..0886e01
--- /dev/null
@@ -0,0 +1,265 @@
+/* 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.io.IOException;\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.client.ConfiguredExecutable;\r
+import compbio.engine.client.Executable.ExecProvider;\r
+import compbio.engine.conf.RunnerConfigMarshaller;\r
+import compbio.engine.local.ExecutableWrapper;\r
+import compbio.engine.local.LocalRunner;\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.ClustalW;\r
+import compbio.util.FileUtil;\r
+\r
+@Test(sequential = true)\r
+public class ClustalWParametersTester {\r
+\r
+       static final String clustalConfigFile = AllTestSuit.TEST_DATA_PATH\r
+                       + "ClustalParameters.xml";\r
+\r
+       public static String test_outfile = "TO1381.clustal.out";\r
+       public static String test_error = "TO1381.clustal.error";\r
+       public static String cluster_test_outfile = "TO1381.clustal.cluster.out";\r
+       public static final String input = AllTestSuit.TEST_DATA_PATH\r
+                       + "ClustalPresets.xml";\r
+\r
+       private static Logger log = Logger\r
+                       .getLogger(AllTestSuit.RUNNER_TEST_LOGGER);\r
+       static {\r
+               log.setLevel(Level.INFO);\r
+       }\r
+\r
+       RunnerConfig<ClustalW> clustalConfig = null;\r
+       OptionCombinator clustalOpc = null;\r
+       PresetManager<ClustalW> presets = null;\r
+\r
+       @BeforeMethod(groups = { AllTestSuit.test_group_runner })\r
+       public void setup() {\r
+               try {\r
+                       RunnerConfigMarshaller<ClustalW> clustalmarsh = new RunnerConfigMarshaller<ClustalW>(\r
+                                       RunnerConfig.class);\r
+                       clustalConfig = clustalmarsh.read(new FileInputStream(new File(\r
+                                       clustalConfigFile)), RunnerConfig.class);\r
+                       clustalOpc = new OptionCombinator(clustalConfig);\r
+\r
+                       // Load presets\r
+                       RunnerConfigMarshaller<ClustalW> rconfigPresets = new RunnerConfigMarshaller<ClustalW>(\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.clustalConfig.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
+       public void testDefaultParameters() {\r
+               ClustalW clustal = new ClustalW();\r
+               clustal.setInput(AllTestSuit.test_input).setOutput(test_outfile);\r
+\r
+               try {\r
+                       // For local execution use relavive\r
+                       ConfiguredExecutable<ClustalW> confClustal = Configurator\r
+                                       .configureExecutable(clustal);\r
+                       LocalRunner lr = new LocalRunner(confClustal);\r
+                       lr.executeJob();\r
+                       confClustal = (ConfiguredExecutable<ClustalW>) lr.waitForResult();\r
+                       assertNotNull(confClustal.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
+       public void testOptions() {\r
+               test(clustalOpc.getAllOptions());\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_runner })\r
+       public void testParameters() {\r
+               List<Parameter<?>> params = clustalOpc.getAllParameters();\r
+               Collections.shuffle(params);\r
+               test(params);\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_runner })\r
+       public void testArguments() {\r
+               List<Option<?>> options = clustalOpc.getAllOptions();\r
+               options.addAll(clustalOpc.getAllParameters());\r
+               Collections.shuffle(options);\r
+               test(options);\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_runner })\r
+       public void testConstrainedParametersMinValues() {\r
+               Map<Parameter<?>, String> params = clustalOpc\r
+                               .getAllConstrainedParametersWithBorderValues(true);\r
+               test(params);\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_runner })\r
+       public void testConstrainedParametersMaxValues() {\r
+               Map<Parameter<?>, String> params = clustalOpc\r
+                               .getAllConstrainedParametersWithBorderValues(false);\r
+               test(params);\r
+       }\r
+\r
+       @Test(groups = { AllTestSuit.test_group_runner })\r
+       public void testConstrainedParametersRandomValues() {\r
+               for (int i = 0; i < 5; i++) {\r
+                       Map<Parameter<?>, String> params = clustalOpc\r
+                                       .getAllConstrainedParametersWithRandomValues();\r
+                       List<Parameter<?>> paramList = new ArrayList<Parameter<?>>(params\r
+                                       .keySet());\r
+                       Collections.shuffle(paramList);\r
+                       List<String> args = clustalOpc.parametersToCommandString(paramList,\r
+                                       params);\r
+                       singleTest(args);\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 = clustalOpc.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 = clustalOpc.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
+                       ClustalW clustal = new ClustalW();\r
+                       clustal.setInput(AllTestSuit.test_input).setOutput(test_outfile);\r
+\r
+                       // For local execution use relative\r
+                       ConfiguredExecutable<ClustalW> confClustal = Configurator\r
+                                       .configureExecutable(clustal, ExecProvider.Local);\r
+                       // Add options to the executable\r
+                       confClustal.addParameters(params);\r
+                       LocalRunner lr = new LocalRunner(confClustal);\r
+                       lr.executeJob();\r
+                       confClustal = (ConfiguredExecutable<ClustalW>) lr.waitForResult();\r
+                       assertNotNull(confClustal.getResults());\r
+                       File errors = new File(confClustal.getWorkDirectory(),\r
+                                       ExecutableWrapper.PROC_ERR_FILE);\r
+                       if (errors.length() != 0) {\r
+                               log.error("PROBLEMS:\n " + FileUtil.readFileToString(errors));\r
+                       }\r
+                       assertTrue(errors.length() == 0, "Run with arguments : " + params\r
+                                       + " FAILED!");\r
+                       Collections.shuffle(params);\r
+               } catch (JobSubmissionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (JobExecutionException e) {\r
+                       e.printStackTrace();\r
+                       fail(e.getLocalizedMessage());\r
+               } catch (IOException 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
+       public void testPresets() {\r
+               for (Preset<ClustalW> p : presets.getPresets()) {\r
+                       singleTest(p.getOptions());\r
+               }\r
+       }\r
+\r
+}\r