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