Author: chatellier
Date: 2009-11-10 18:02:24 +0000 (Tue, 10 Nov 2009)
New Revision: 2749
Added:
isis-fish/trunk/src/main/resources/templates/ssh/qsub-script.ftl
Removed:
isis-fish/trunk/src/main/resources/templates/ssh/isis-launch-with-qsub.seq
Modified:
isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java
isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationItem.java
isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java
Log:
Add new caparmor mutijobs script (with tests)
Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java
===================================================================
--- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2009-11-10 16:33:52 UTC (rev 2748)
+++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2009-11-10 18:02:24 UTC (rev 2749)
@@ -92,8 +92,7 @@
protected Configuration freemarkerConfiguration;
/** Freemarker qsub template. */
- protected static final String QSUB_SCRIPT_TEMPLATE = "templates/ssh/isis-launch-with-qsub.seq";
- //protected static final String QSUB_SCRIPT_TEMPLATE = "templates/ssh/isis-launch-with-cron.seq";
+ protected static final String QSUB_SCRIPT_TEMPLATE = "templates/ssh/qsub-script.ftl";
/**
* Opened session to ssh service. Stored in static context to not reask passphrase at each
@@ -256,15 +255,10 @@
message(control,_("isisfish.simulation.remote.message.waitingstart"));
String simulationPreScriptPath = uploadPreScriptIfNecessary(
sshSession, control.getId(), simulationPrescript);
- File simulationScript = getLaunchSimulationScriptFile(simulationid,
- simulationRemotePath, remoteResultZip, simulationPreScriptPath);
- String scriptRemotePath = uploadSimulationScript(sshSession,
- simulationid, simulationScript);
- // prescript uploaded, delete
- simulationScript.delete();
+
+ // start simulation if necessary (multi jobs) ...
+ startSimulation(simulationItem, simulationid, simulationRemotePath, remoteResultZip, simulationPreScriptPath);
- //sendStartSimulationRequest(sshSession, scriptRemotePath, simulationid);
-
} catch (Exception e) {
if (log.isErrorEnabled()) {
log.error(_("isisfish.error.simulation.remote.global"));
@@ -854,6 +848,64 @@
}
/**
+ * Start simulation if necessary.
+ *
+ * Current simulation can be started later with a PBS multi job.
+ *
+ * @param simulationItem simulation item (needed for additionnal info, simulation, number, idenpendant, etc...)
+ * @param simulationid simulation id
+ * @param simulationRemotePath simulation preparation (input) zip path
+ * @param remoteResultZip simulation result (output) zip path
+ * @param simulationPreScriptPath simulation prescript
+ *
+ * @throws Exception
+ */
+ protected void startSimulation(SimulationItem simulationItem, String simulationid, String simulationRemotePath, String remoteResultZip, String simulationPreScriptPath) throws Exception {
+
+ if (simulationItem.isStandaloneSimulation()) {
+ // single simulation
+ File simulationPSBScript = getLaunchSimulationScriptFile(simulationid,
+ simulationRemotePath, remoteResultZip, simulationPreScriptPath, false);
+ String scriptRemotePath = uploadSimulationScript(sshSession,
+ simulationid, simulationPSBScript);
+
+ // prescript uploaded, delete
+ simulationPSBScript.delete();
+
+ sendStartSimulationRequest(sshSession, scriptRemotePath, simulationid, 1);
+ }
+ else {
+
+ if (simulationItem.isLastSimulation()) {
+
+ String shortSimulationId = simulationid.substring(simulationid.lastIndexOf('_') + 1);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Last simulation start requested, send multijob start request for " + shortSimulationId);
+ }
+
+ // multiples jobs simulation
+ File simulationPSBScript = getLaunchSimulationScriptFile(shortSimulationId,
+ simulationRemotePath, remoteResultZip, simulationPreScriptPath, true);
+ String scriptRemotePath = uploadSimulationScript(sshSession,
+ simulationid, simulationPSBScript);
+
+ // prescript uploaded, delete
+ simulationPSBScript.delete();
+
+ sendStartSimulationRequest(sshSession, simulationid, scriptRemotePath, simulationItem.getSimulationNumber());
+ }
+ else {
+ if (log.isDebugEnabled()) {
+ log.debug("Current simulation is not last simulation in pool, skip start");
+ }
+ }
+ }
+
+
+ }
+
+ /**
* Retourne un fichier temporaire contenant le script de lancement de
* simulation.
*
@@ -862,19 +914,20 @@
* @param simuationId id de la simulation
* @param simulationZip zip de la simulation
* @param preScriptPath simulation pre script path (can be null)
+ * @param multipleSimulationScript if {@code true} build a multijob simulation script
*
- * @return un Fichier temporaire ou <tt>null</tt> en cas d'exception
+ * @return un Fichier temporaire ou {@code null} en cas d'exception
*
* @throws IOException if can't build script
*/
protected File getLaunchSimulationScriptFile(String simuationId,
- String simulationZip, String simulationResultZip, String preScriptPath) throws IOException {
+ String simulationZip, String simulationResultZip, String preScriptPath, boolean multipleSimulationScript) throws IOException {
File tempScript = File.createTempFile("simulation-" + simuationId + "-script", ".seq");
tempScript.deleteOnExit(); // auto delete
String fileContent = getSimulationScriptLaunchContent(
- QSUB_SCRIPT_TEMPLATE, simuationId, simulationZip, simulationResultZip, preScriptPath);
+ QSUB_SCRIPT_TEMPLATE, simuationId, simulationZip, simulationResultZip, preScriptPath, multipleSimulationScript);
FileUtil.writeString(tempScript, fileContent);
return tempScript;
@@ -890,11 +943,12 @@
* @param simulationZip zip de la simulation
* @param simulationZipResult zip resultat de la simulation
* @param preScriptPath simulation pre script path (can be null)
+ * @param multipleSimulationScript if {@code true} build a multijob simulation script
*
* @throws IOException if can't get script content
*/
protected String getSimulationScriptLaunchContent(String templateName,
- String simuationId, String simulationZip, String simulationZipResult, String preScriptPath)
+ String simuationId, String simulationZip, String simulationZipResult, String preScriptPath, boolean multipleSimulationScript)
throws IOException {
String scriptContent = null;
@@ -918,6 +972,7 @@
root.put("simulationzip", simulationZip);
root.put("simulationresultzip", simulationZipResult);
root.put("simulationprescript", remotePreScript);
+ root.put("qsubmutiplejob", multipleSimulationScript);
// process template
Writer out = new StringWriter();
@@ -940,21 +995,33 @@
* Add script in remote qsub queue.
*
* @param session valid opened session
+ * @param simulationId simulation id (short version for a multiple job)
* @param scriptRemotePath remote script path
- * @param simulationId simulation id
+ * @param lastSimulationNumber if {@code >=0 } start a multiple pbs job form 0 to {@code lastSimulationNumber}
*
* @throws SSHException if call fail
*/
- protected void sendStartSimulationRequest(Session session, String scriptRemotePath, String simulationId)
+ protected void sendStartSimulationRequest(Session session, String simulationId, String scriptRemotePath, int lastSimulationNumber)
throws SSHException {
// command to :
// - add script in qsub queue
// - use option -m n (to not send email)
String remoteFilenameId = getRemoteTempDirectory() + "simulation-" + simulationId + "-pbs.id";
- String command = IsisFish.config.getSimulatorSshPbsBinPath()
- + "/qsub -m n \"" + scriptRemotePath + "\"|tee \"" + remoteFilenameId + "\"";
+ String command = IsisFish.config.getSimulatorSshPbsBinPath() + "/qsub -m n";
+ // multi job specific
+ if (lastSimulationNumber >=0 ) {
+ command+= " -J 0-" + String.valueOf(lastSimulationNumber);
+ }
+
+ // end with squb script path and redirect id into file (to stop it later)
+ command += " \"" + scriptRemotePath + "\"|tee \"" + remoteFilenameId + "\"";
+
+ if (log.isDebugEnabled()) {
+ log.debug("Send qsub job starting command : " + command);
+ }
+
Writer output = new StringWriter();
int exit = SSHUtils.exec(session, command, output);
@@ -963,7 +1030,8 @@
}
String out = output.toString();
- if (out.trim().matches("\\d+\\.\\w+")) {
+ // multiple jobs id are like : 78600[].service4
+ if (out.trim().matches("\\d+\\.\\[\\]\\w+") && log.isInfoEnabled()) {
log.info("Job submitted with job id : " + out);
}
}
Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationItem.java
===================================================================
--- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationItem.java 2009-11-10 16:33:52 UTC (rev 2748)
+++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationItem.java 2009-11-10 18:02:24 UTC (rev 2749)
@@ -28,11 +28,18 @@
* Objet representant une simulation qui doit être faite.
*
* Elle est composée :
- * - d'un fichier zip (la simulation a simuler)
- * - les parametres de la simulation
- * - d'un pre-script
- * - d'informations suplémentaires utiles à certains launcher :
- * -
+ * <ul>
+ * <li>d'un fichier zip (la simulation a simuler)
+ * <li>les parametres de la simulation
+ * <li>d'un pre-script
+ * <li>d'informations supplémentaires utiles à certains launcher :
+ * <ul>
+ * <li>standaloneSimulation : la simulation doit être lancée seule, sinon
+ * les simulations sont indépendantes et peuvent être lancées groupées.
+ * <li>simulationNumber : simulation number in non standalone simulation
+ * <li>simulationsCount : total simulation count
+ * </ul>
+ * </ul>
*
* @author poussin
* @version $Revision$
@@ -54,11 +61,21 @@
/** Simulation prescript. */
protected String simulationPrescriptContent;
+ /**
+ * La simulation doit être lancée seule, sinon les simulations sont
+ * indépendantes et peuvent être lancées groupées.
+ */
protected boolean standaloneSimulation;
+ /**
+ * Simulation number in non standalone simulation.
+ */
protected int simulationNumber;
- protected int simulationsCount;
+ /**
+ * Last simulation.
+ */
+ protected boolean lastSimulation;
/**
* Constructor.
@@ -70,7 +87,7 @@
this.control = control;
this.parameter = param;
}
-
+
/**
* Retourne le control pour la simulation.
*
@@ -91,7 +108,7 @@
public SimulationParameter getParameter() {
return parameter;
}
-
+
/**
* Permet de mettre le zip apres construction de l'objet. Cela est util
* car la construction du zip prend du temps, et on souhaite pouvoir le
@@ -112,7 +129,7 @@
public File getSimulationZip() {
return simulationZip;
}
-
+
/**
* Get simulation prescript.
*
@@ -130,4 +147,46 @@
public void setSimulationPrescriptContent(String simulationPrescriptContent) {
this.simulationPrescriptContent = simulationPrescriptContent;
}
+
+ /**
+ * @return the standaloneSimulation
+ */
+ public boolean isStandaloneSimulation() {
+ return standaloneSimulation;
+ }
+
+ /**
+ * @param standaloneSimulation the standaloneSimulation to set
+ */
+ public void setStandaloneSimulation(boolean standaloneSimulation) {
+ this.standaloneSimulation = standaloneSimulation;
+ }
+
+ /**
+ * @return the simulationNumber
+ */
+ public int getSimulationNumber() {
+ return simulationNumber;
+ }
+
+ /**
+ * @param simulationNumber the simulationNumber to set
+ */
+ public void setSimulationNumber(int simulationNumber) {
+ this.simulationNumber = simulationNumber;
+ }
+
+ /**
+ * @return the lastSimulation
+ */
+ public boolean isLastSimulation() {
+ return lastSimulation;
+ }
+
+ /**
+ * @param lastSimulation the lastSimulation to set
+ */
+ public void setLastSimulation(boolean lastSimulation) {
+ this.lastSimulation = lastSimulation;
+ }
}
Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java
===================================================================
--- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2009-11-10 16:33:52 UTC (rev 2748)
+++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2009-11-10 18:02:24 UTC (rev 2749)
@@ -451,6 +451,7 @@
// for launcher
SimulationParameter subParam = param.copy();
String preScriptContent = generatePreScript(scenario);
+ // usefull next two line ?
subParam.setUsePreScript(true);
subParam.setPreScript(preScriptContent);
@@ -461,6 +462,9 @@
// new item, with zip
SimulationItem item = new SimulationItem(realSimulationControl, subParam);
item.setSimulationZip(zip);
+ item.setStandaloneSimulation(false); // AS = always false
+ item.setSimulationNumber(simulationIndex);
+ item.setLastSimulation(simulationIndex == sensitivityScenarios.getScenarios().size() - 1);
SimulationJob job = new SimulationJob(this, item, priority);
job.setLauncher(launcher);
@@ -757,7 +761,7 @@
// via la methode finished(SimulationJob, SimulationStorage)
synchronized (this) {
- // si deja creer on ne le refet pas
+ // si deja creer on ne le refait pas
if (nextJob == null) {
// Prepration de la simulation a faire
// create next id simulation
@@ -796,14 +800,17 @@
if (result) {
File zip = sim.createZip();
- SimulationControl childControl = new SimulationControl(
- simId);
+ SimulationControl childControl = new SimulationControl(simId);
SimulationParameter childParam = param.copy();
- SimulationItem item = new SimulationItem(
- childControl, childParam);
+ SimulationItem item = new SimulationItem(childControl, childParam);
item.setSimulationZip(zip);
- nextJob = new SimulationJob(simulationService,
- job, item, job.getPriority());
+
+ // add extra information for specific launchers
+ //item.setStandaloneSimulation(standaloneSimulation);
+ //item.setSimulationNumber(simulationNumber);
+ //item.setSimulationsCount(simulationsCount);
+
+ nextJob = new SimulationJob(simulationService, job, item, job.getPriority());
nextJob.setLauncher(job.getLauncher());
nextJob.addPostAction(this); // pour l'appel des after des plans
}
Deleted: isis-fish/trunk/src/main/resources/templates/ssh/isis-launch-with-qsub.seq
===================================================================
--- isis-fish/trunk/src/main/resources/templates/ssh/isis-launch-with-qsub.seq 2009-11-10 16:33:52 UTC (rev 2748)
+++ isis-fish/trunk/src/main/resources/templates/ssh/isis-launch-with-qsub.seq 2009-11-10 18:02:24 UTC (rev 2749)
@@ -1,12 +0,0 @@
-#!/bin/csh
-
-cd "${isishome}"
-
-#source /usr/share/modules/init/csh
-#module load java/1.6.0
-
-<#if simulationprescript?length > 0>
-/home3/caparmor/poussin/jdk/bin/java -Xmx2500M -jar isis-fish*.jar --option launch.ui false --simulateRemotellyWithPreScript "${simulationid}" "${simulationzip}" "${simulationresultzip}" "${simulationprescript}" >& "${isistemp}simulation-${simulationid}-output.txt"
-<#else>
-/home3/caparmor/poussin/jdk/bin/java -jar isis-fish*.jar --option launch.ui false --simulateRemotelly "${simulationid}" "${simulationzip}" "${simulationresultzip}" >& "${isistemp}simulation-${simulationid}-output.txt"
-</#if>
Added: isis-fish/trunk/src/main/resources/templates/ssh/qsub-script.ftl
===================================================================
--- isis-fish/trunk/src/main/resources/templates/ssh/qsub-script.ftl (rev 0)
+++ isis-fish/trunk/src/main/resources/templates/ssh/qsub-script.ftl 2009-11-10 18:02:24 UTC (rev 2749)
@@ -0,0 +1,27 @@
+#!/bin/csh
+
+cd "${isishome}"
+
+#source /usr/share/modules/init/csh
+#module load java/1.6.0
+
+<#assign commonCommand="/home3/caparmor/poussin/jdk/bin/java -Xmx2500M -jar isis-fish*.jar --option launch.ui false" />
+<#if qsubmutiplejob>
+ <#-- localsimulationid is short simulation id version -->
+ <#assign localsimulationid='${simulationid}' />
+ <#assign localsimulationzip='${simulationzip?replace("${simulationid}_[0-9]+", "${simulationid}_\\\\$PBS_ARRAY_INDEX","ri")}' />
+ <#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 localsimulationoutput='${isistemp}simulation-${simulationid}_$PBS_ARRAY_INDEX-output.txt' />
+<#else>
+ <#assign localsimulationid='${simulationid}' />
+ <#assign localsimulationzip='${simulationzip}}' />
+ <#assign localsimulationresultzip='${simulationresultzip}' />
+ <#assign localsimulationprescript='${simulationprescript}' />
+ <#assign localsimulationoutput='${isistemp}simulation-${simulationid}-output.txt' />
+</#if>
+<#if simulationprescript?length > 0>
+${commonCommand} --simulateRemotellyWithPreScript "${localsimulationid}" "${localsimulationzip}" "${localsimulationresultzip}" "${localsimulationprescript}" >& "${localsimulationoutput}"
+<#else>
+${commonCommand} --simulateRemotelly "${localsimulationid}" "${localsimulationzip}" "${localsimulationresultzip}" >& "${localsimulationoutput}"
+</#if>
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 2009-11-10 16:33:52 UTC (rev 2748)
+++ isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2009-11-10 18:02:24 UTC (rev 2749)
@@ -18,13 +18,11 @@
package fr.ifremer.isisfish.simulator.launcher;
-import java.io.File;
import java.io.IOException;
-import junit.framework.Assert;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.junit.Assert;
import org.junit.Test;
import fr.ifremer.isisfish.AbstractIsisFishTest;
@@ -49,56 +47,43 @@
/**
* Test l'instantiation du script qsub (caparmor).
*
- * Le script contient une variable $simulation qui
- * doit être remplacée.
+ * Le script contient plusieurs variables qui doivent être remplacées.
*
* @throws IOException when freemarker throws it
* @throws TemplateException when freemarker throws it
*/
@Test
- public void testFreemarkerTemplateWithScript() throws IOException,
+ public void testFreemarkerTemplateSimpleScript() throws IOException,
TemplateException {
- final String SIMULATIONID = "testid";
- final String SIMULATIONZIP = "test.zip";
- final String SIMULATIONRESULTZIP = "/tmp/test-result.zip";
- final String SIMULATIONPRESCRIPT = "prescript-1234567890.txt";
- final String ISISHOME = IsisFish.config.getSimulatorSshIsisHome();
- final String ISISTMP = IsisFish.config.getSimulatorSshTmpPath();
+ String simulationId = "sim_test1_2009-11-10-18-08_122";
+ String simulationZip = "simulation-" + simulationId + "-preparation.zip";
+ String simulationResultZip = "/tmp/simulation" + simulationId + "-result.zip";
+ String simulationPreScript = "simulation-" + simulationId + "-prescript.bsh";
+ String isisHome = IsisFish.config.getSimulatorSshIsisHome();
+ String isisTemp = IsisFish.config.getSimulatorSshTmpPath();
SSHSimulatorLauncher launcher = new SSHSimulatorLauncher();
String content = launcher.getSimulationScriptLaunchContent(
- SSHSimulatorLauncher.QSUB_SCRIPT_TEMPLATE, SIMULATIONID,
- SIMULATIONZIP, SIMULATIONRESULTZIP, SIMULATIONPRESCRIPT);
+ SSHSimulatorLauncher.QSUB_SCRIPT_TEMPLATE, simulationId,
+ simulationZip, simulationResultZip, simulationPreScript, false);
if (log.isDebugEnabled()) {
log.debug("Script content = " + content);
}
// simulation parameters
- Assert.assertTrue("String \"" + SIMULATIONID
- + "\" not found in template", content
- .indexOf(SIMULATIONID) > 0);
- Assert.assertTrue("String \"" + SIMULATIONZIP
- + "\" not found in template",
- content.indexOf(SIMULATIONZIP) > 0);
- Assert.assertTrue("String \"" + SIMULATIONRESULTZIP
- + "\" not found in template", content
- .indexOf(SIMULATIONRESULTZIP) > 0);
- Assert.assertTrue("String \"" + SIMULATIONPRESCRIPT
- + "\" not found in template", content
- .indexOf(SIMULATIONPRESCRIPT) > 0);
- Assert.assertTrue(
- "Action --simulateRemotellyWithPreScript not on script",
- content.indexOf(" --simulateRemotellyWithPreScript ") > 0);
+ Assert.assertTrue("String \"" + simulationId + "\" not found in template", content.indexOf(simulationId) > 0);
+ Assert.assertTrue("String \"" + simulationZip + "\" not found in template", content.indexOf(simulationZip) > 0);
+ Assert.assertTrue("String \"" + simulationResultZip + "\" not found in template", content.indexOf(simulationResultZip) > 0);
+ Assert.assertTrue("String \"" + simulationPreScript + "\" not found in template", content.indexOf(simulationPreScript) > 0);
+ Assert.assertTrue("Action --simulateRemotellyWithPreScript not on script", content.indexOf(" --simulateRemotellyWithPreScript ") > 0);
// isis location
- Assert.assertTrue("String \"" + ISISHOME + "\" not found in template",
- content.indexOf(ISISHOME) > 0);
+ Assert.assertTrue("String \"" + isisHome + "\" not found in template", content.indexOf(isisHome) > 0);
// isis temp
- Assert.assertTrue("String \"" + ISISTMP + "\" not found in template",
- content.indexOf(ISISTMP) > 0);
+ Assert.assertTrue("String \"" + isisTemp + "\" not found in template", content.indexOf(isisTemp) > 0);
}
/**
@@ -106,81 +91,142 @@
*
* Test sans script de pre simu.
*
- * Le script contient une variable $simulation qui
- * doit être remplacée.
+ * Le script contient plusieurs variables qui doivent être remplacées.
*
* @throws IOException when freemarker throws it
* @throws TemplateException when freemarker throws it
*/
@Test
- public void testFreemarkerTemplateWithoutScript() throws IOException,
+ public void testFreemarkerTemplateSimpleAndScript() throws IOException,
TemplateException {
- final String SIMULATIONID = "testid";
- final String SIMULATIONZIP = "test.zip";
- final String SIMULATIONRESULTZIP = "/tmp/test-result.zip";
- final String SIMULATIONPRESCRIPT = null;
- final String ISISHOME = IsisFish.config.getSimulatorSshIsisHome();
- final String ISISTMP = IsisFish.config.getSimulatorSshTmpPath();
+ String simulationId = "sim_test1_2009-11-10-18-08_122";
+ String simulationZip = "simulation-" + simulationId + "-preparation.zip";
+ String simulationResultZip = "/tmp/simulation" + simulationId + "-result.zip";
+ String simulationPreScript = null;
+ String isisHome = IsisFish.config.getSimulatorSshIsisHome();
+ String isisTemp = IsisFish.config.getSimulatorSshTmpPath();
SSHSimulatorLauncher launcher = new SSHSimulatorLauncher();
String content = launcher.getSimulationScriptLaunchContent(
- SSHSimulatorLauncher.QSUB_SCRIPT_TEMPLATE, SIMULATIONID,
- SIMULATIONZIP, SIMULATIONRESULTZIP, SIMULATIONPRESCRIPT);
+ SSHSimulatorLauncher.QSUB_SCRIPT_TEMPLATE, simulationId,
+ simulationZip, simulationResultZip, simulationPreScript, false);
if (log.isDebugEnabled()) {
log.debug("Script content = " + content);
}
// simulation parameters
- Assert.assertTrue("String \"" + SIMULATIONID
- + "\" not found in template", content
- .indexOf(SIMULATIONID) > 0);
- Assert.assertTrue("String \"" + SIMULATIONZIP
- + "\" not found in template",
- content.indexOf(SIMULATIONZIP) > 0);
- Assert.assertTrue("String \"" + SIMULATIONRESULTZIP
- + "\" not found in template", content
- .indexOf(SIMULATIONRESULTZIP) > 0);
- Assert.assertTrue("Action --simulateRemotelly not on script", content
- .indexOf(" --simulateRemotelly ") > 0);
+ Assert.assertTrue("String \"" + simulationId + "\" not found in template", content.indexOf(simulationId) > 0);
+ Assert.assertTrue("String \"" + simulationZip + "\" not found in template", content.indexOf(simulationZip) > 0);
+ Assert.assertTrue("String \"" + simulationResultZip + "\" not found in template", content.indexOf(simulationResultZip) > 0);
+ Assert.assertTrue("Action --simulateRemotelly not on script", content.indexOf(" --simulateRemotelly ") > 0);
// isis location
- Assert.assertTrue("String \"" + ISISHOME + "\" not found in template",
- content.indexOf(ISISHOME) > 0);
+ Assert.assertTrue("String \"" + isisHome + "\" not found in template", content.indexOf(isisHome) > 0);
// isis temp
- Assert.assertTrue("String \"" + ISISTMP + "\" not found in template",
- content.indexOf(ISISTMP) > 0);
+ Assert.assertTrue("String \"" + isisTemp + "\" not found in template", content.indexOf(isisTemp) > 0);
}
-
+
/**
- * Test get le chemin distant commence et fini toujours par /
+ * Test l'instantiation du script qsub en multijobs, sans prescript.
+ *
+ * Test sans script de pre simu.
+ *
+ * Le script contient plusieurs variables qui doivent être remplacées.
+ *
+ * @throws IOException when freemarker throws it
+ * @throws TemplateException when freemarker throws it
*/
@Test
- public void testGetRemoteTempDirectory() {
+ public void testFreemarkerTemplateMultiJobs() throws IOException,
+ TemplateException {
+
+ String shortSimulationId = "sim_test1_2009-11-10-18-08";
+ String simulationId = shortSimulationId + "_122";
+ String simulationZip = "simulation-" + simulationId + "-preparation.zip";
+ String simulationResultZip = "/tmp/simulation-" + simulationId + "-result.zip";
+ String simulationPreScript = null;
+ String isisHome = IsisFish.config.getSimulatorSshIsisHome();
+ String isisTemp = IsisFish.config.getSimulatorSshTmpPath();
+
SSHSimulatorLauncher launcher = new SSHSimulatorLauncher();
+ String content = launcher.getSimulationScriptLaunchContent(
+ SSHSimulatorLauncher.QSUB_SCRIPT_TEMPLATE, shortSimulationId,
+ simulationZip, simulationResultZip, simulationPreScript, true);
+
+ if (log.isDebugEnabled()) {
+ log.debug("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);
+
+ // isis location
+ Assert.assertTrue("String \"" + isisHome + "\" not found in template", content.indexOf(isisHome) > 0);
- String remoteTemp = launcher.getRemoteTempDirectory();
- Assert.assertTrue(remoteTemp.startsWith("/"));
- Assert.assertTrue(remoteTemp.endsWith("/"));
+ // isis temp
+ Assert.assertTrue("String \"" + isisTemp + "\" not found in template", content.indexOf(isisTemp) > 0);
}
-
+
/**
- * Pour tester, un autre script est present, mais
- * celui ci ne doit jamais être utilisé hors des tests.
+ * Test l'instantiation du script qsub en multijobs, avec prescript.
*
- * Test que le script contient "!/bin/csh".
- * @throws IOException
+ * Le script contient plusieurs variables qui doivent être remplacées.
+ *
+ * @throws IOException when freemarker throws it
+ * @throws TemplateException when freemarker throws it
*/
@Test
- public void testValidQsubScript() throws IOException {
+ public void testFreemarkerTemplateMultiJobsAndScript() throws IOException,
+ TemplateException {
+
+ String shortSimulationId = "sim_test1_2009-11-10-18-08";
+ String simulationId = shortSimulationId + "_122";
+ String simulationZip = "simulation-" + simulationId + "-preparation.zip";
+ String simulationResultZip = "/tmp/simulation-" + simulationId + "-result.zip";
+ String simulationPreScript = "simulation-" + simulationId + "-prescript.bsh";
+ String isisHome = IsisFish.config.getSimulatorSshIsisHome();
+ String isisTemp = IsisFish.config.getSimulatorSshTmpPath();
+
SSHSimulatorLauncher launcher = new SSHSimulatorLauncher();
String content = launcher.getSimulationScriptLaunchContent(
- SSHSimulatorLauncher.QSUB_SCRIPT_TEMPLATE, "", "", "", "");
+ SSHSimulatorLauncher.QSUB_SCRIPT_TEMPLATE, shortSimulationId,
+ simulationZip, simulationResultZip, simulationPreScript, true);
+ if (log.isDebugEnabled()) {
+ log.debug("Script content = " + content);
+ }
+
// simulation parameters
- Assert.assertTrue("Invalid qsub script is used", content
- .indexOf("!/bin/csh") > 0);
+ 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(content.indexOf("simulation-" + shortSimulationId + "_$PBS_ARRAY_INDEX-prescript.bsh") > 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 --simulateRemotellyWithPreScript not on script", content.indexOf(" --simulateRemotellyWithPreScript ") > 0);
+
+ // isis location
+ Assert.assertTrue("String \"" + isisHome + "\" not found in template", content.indexOf(isisHome) > 0);
+
+ // isis temp
+ Assert.assertTrue("String \"" + isisTemp + "\" not found in template", content.indexOf(isisTemp) > 0);
}
+
+ /**
+ * Test get le chemin distant commence et fini toujours par /
+ */
+ @Test
+ public void testGetRemoteTempDirectory() {
+ SSHSimulatorLauncher launcher = new SSHSimulatorLauncher();
+
+ String remoteTemp = launcher.getRemoteTempDirectory();
+ Assert.assertTrue(remoteTemp.startsWith("/"));
+ Assert.assertTrue(remoteTemp.endsWith("/"));
+ }
}
\ No newline at end of file