r2749 - in isis-fish/trunk/src: main/java/fr/ifremer/isisfish/simulator/launcher main/resources/templates/ssh test/java/fr/ifremer/isisfish/simulator/launcher
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
participants (1)
-
chatellier@users.labs.libre-entreprise.org