Author: chatellier Date: 2010-11-09 11:06:37 +0000 (Tue, 09 Nov 2010) New Revision: 3116 Log: Add special characters escaping in freemarker script Modified: isis-fish/trunk/src/main/resources/templates/ssh/qsub-script.ftl isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java Modified: isis-fish/trunk/src/main/resources/templates/ssh/qsub-script.ftl =================================================================== --- isis-fish/trunk/src/main/resources/templates/ssh/qsub-script.ftl 2010-10-29 08:26:23 UTC (rev 3115) +++ isis-fish/trunk/src/main/resources/templates/ssh/qsub-script.ftl 2010-11-09 11:06:37 UTC (rev 3116) @@ -10,12 +10,12 @@ <#-- localsimulationid is short simulation id version --> <#assign localsimulationid='${simulationid}_$PBS_ARRAY_INDEX' /> <#if simulationstandalonezip> - <#assign localsimulationzip='${simulationzip?replace("${simulationid}_[0-9]+", "${simulationid}_\\\\$PBS_ARRAY_INDEX","ri")}' /> + <#assign localsimulationzip='${simulationzip?replace("\\\\Q${simulationid}\\\\E_[0-9]+", "${simulationid}_\\\\$PBS_ARRAY_INDEX","ri")}' /> <#else> <#assign localsimulationzip='${simulationzip}' /> </#if> - <#assign localsimulationresultzip='${simulationresultzip?replace("${simulationid}_[0-9]+", "${simulationid}_\\\\$PBS_ARRAY_INDEX","ri")}' /> - <#assign localsimulationprescript='${simulationprescript?replace("${simulationid}_[0-9]+", "${simulationid}_\\\\$PBS_ARRAY_INDEX","ri")}' /> + <#assign localsimulationresultzip='${simulationresultzip?replace("\\\\Q${simulationid}\\\\E_[0-9]+", "${simulationid}_\\\\$PBS_ARRAY_INDEX","ri")}' /> + <#assign localsimulationprescript='${simulationprescript?replace("\\\\Q${simulationid}\\\\E_[0-9]+", "${simulationid}_\\\\$PBS_ARRAY_INDEX","ri")}' /> <#assign localsimulationoutput='${isistemp}simulation-${simulationid}_$PBS_ARRAY_INDEX-output.txt' /> <#else> <#assign localsimulationid='${simulationid}' /> Modified: isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java =================================================================== --- isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2010-10-29 08:26:23 UTC (rev 3115) +++ isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2010-11-09 11:06:37 UTC (rev 3116) @@ -19,6 +19,7 @@ package fr.ifremer.isisfish.simulator.launcher; import java.io.IOException; +import java.util.regex.Pattern; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -239,4 +240,42 @@ Assert.assertTrue(remoteTemp.startsWith("/")); Assert.assertTrue(remoteTemp.endsWith("/")); } + + /** + * Test simulation names with special char. + * + * as_ICES2010_M+_10%_152Param_2010-11-08-17-18. + * + * Script now contains \\Q and \\E for thta case. + * + * @throws IOException when freemarker throws it + * @throws TemplateException when freemarker throws it + */ + @Test + public void testFreemarkerTemplateScriptSpecialchar() throws IOException, TemplateException { + + // some things to test ! + String shortSimulationId = "as_ICES2010_M+_10%_152Param_2010-11-08-17-18"; + String simulationId = shortSimulationId + "_122"; + String simulationZip = "simulation-" + simulationId + "-preparation.zip"; + String simulationResultZip = "/tmp/simulation-" + simulationId + "-result.zip"; + String simulationPreScript = null; + String isisTemp = IsisFish.config.getSimulatorSshTmpPath(); + + SSHSimulatorLauncher launcher = new SSHSimulatorLauncher(); + String content = launcher.getSimulationScriptLaunchContent( + SSHSimulatorLauncher.QSUB_SCRIPT_TEMPLATE, shortSimulationId, + simulationZip, true, simulationResultZip, simulationPreScript, true); + + if (log.isInfoEnabled()) { + log.info("Script content = " + content); + } + + // simulation parameters + Assert.assertTrue("String \"" + shortSimulationId + "\" not found in template", content.indexOf(shortSimulationId) > 0); + Assert.assertTrue(content.indexOf("simulation-" + shortSimulationId + "_$PBS_ARRAY_INDEX-preparation.zip") > 0); + Assert.assertTrue(content.indexOf("/tmp/simulation-" + shortSimulationId + "_$PBS_ARRAY_INDEX-result.zip") > 0); + Assert.assertTrue("String " + isisTemp + "/simulation-" + shortSimulationId + "_$PBS_ARRAY_INDEX-output.txt\" not found in template", content.indexOf(isisTemp + "/simulation-" + shortSimulationId + "_$PBS_ARRAY_INDEX-output.txt\"") > 0); + Assert.assertTrue("Action --simulateRemotelly not on script", content.indexOf(" --simulateRemotelly ") > 0); + } } \ No newline at end of file