]> SALOME platform Git repositories - tools/libbatch.git/commitdiff
Salome HOME
Added environment variables for ePBS jobs. Added the corresponding tests. Merged...
authorbarate <barate>
Thu, 26 Nov 2009 16:41:34 +0000 (16:41 +0000)
committerbarate <barate>
Thu, 26 Nov 2009 16:41:34 +0000 (16:41 +0000)
src/Core/Test/SimpleParser.cxx
src/Core/Test/Test_SimpleParser.cxx
src/PBS/Batch_BatchManager_ePBS.cxx
src/PBS/Test/CMakeLists.txt
src/PBS/Test/Test_PBS.cxx
src/PBS/Test/Test_ePBS.cxx [new file with mode: 0644]
src/PBS/Test/Test_ePBS_RSH.cxx [deleted file]
src/PBS/Test/Test_ePBS_SSH.cxx [deleted file]
src/PBS/Test/test-script.sh

index 83f647854d8c1c30c4af07ae2fbf13958735b427..9942576de54aff206f1b9cf21cf8190b24e9ca9c 100644 (file)
@@ -141,7 +141,6 @@ int SimpleParser::getValueAsInt(const string & key) const throw(ParserException)
 
 ostream & operator <<(ostream & os, const SimpleParser & parser) throw()
 {
-  os << "Configuration map:" << endl;
   if (parser._configmap.empty()) {
     os << "Empty map" << endl;
   } else {
index bb446ef565d4a631fab2e0178fc7f443d9b01daa..6e60fbcdd89b7744e5443893bd5f29336b2729c0 100644 (file)
@@ -55,6 +55,7 @@ int main(int argc, char** argv)
   }
 
   // Print the configuration
+  cout << "Configuration map:" << endl;
   cout << parser << endl;
 
   return 0;
index 724e9f842cdf3fe085f1deb1349b5f1d9431e140..9909b55d3fb39d7c27f49f5a2d1211b1838677ff 100644 (file)
@@ -212,6 +212,7 @@ namespace Batch {
   {
     std::cerr << "BuildBatchScript" << std::endl;
     Parametre params = job.getParametre();
+    Environnement env = job.getEnvironnement();
 
     // Job Parameters
     string workDir       = "";
@@ -266,6 +267,16 @@ namespace Batch {
     tempOutputFile << "#PBS -o " << workDir << "/logs/output.log." << rootNameToExecute << endl;
     tempOutputFile << "#PBS -e " << workDir << "/logs/error.log."  << rootNameToExecute << endl;
 
+    // Define environment for the job
+    if (!env.empty()) {
+      tempOutputFile << "#PBS -v ";
+      Environnement::const_iterator iter;
+      for (iter = env.begin() ; iter != env.end() ; ++iter) {
+        tempOutputFile << iter->first << "=" << iter->second << ",";
+      }
+      tempOutputFile << endl;
+    }
+
     // Abstraction of PBS_NODEFILE - TODO
     tempOutputFile << "export LIBBATCH_NODEFILE=$PBS_NODEFILE" << endl;
 
index f58426531f27cb47aaf8bf353a1f3b2890a4b0bc..a96946a408c246e41911e1a992e83756414eb653 100644 (file)
@@ -32,16 +32,15 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 
 # Build the test programs and add the tests
+add_executable(Test_ePBS Test_ePBS.cxx)
+target_link_libraries(Test_ePBS Batch SimpleParser)
+
 IF (HAS_SSH)
-    add_executable(Test_ePBS_SSH Test_ePBS_SSH.cxx)
-    target_link_libraries(Test_ePBS_SSH Batch SimpleParser)
-    ADD_TEST(ePBS_SSH Test_ePBS_SSH)
+    ADD_TEST(ePBS_SSH Test_ePBS SSH)
 ENDIF (HAS_SSH)
 
 IF (HAS_RSH)
-    add_executable(Test_ePBS_RSH Test_ePBS_RSH.cxx)
-    target_link_libraries(Test_ePBS_RSH Batch SimpleParser)
-    ADD_TEST(ePBS_RSH Test_ePBS_RSH)
+    ADD_TEST(ePBS_RSH Test_ePBS RSH)
 ENDIF (HAS_RSH)
 
 IF (BUILD_PBS_INTERFACE AND PBS_FOUND)
index e58278d1134865e52fc34f7d4ac5f3ae61709389..5ceb09ff68825ce68c756438ce0320dab290bbdf 100644 (file)
@@ -47,6 +47,8 @@
 using namespace std;
 using namespace Batch;
 
+const int MAX_SLEEP_TIME = 600;
+
 int main(int argc, char** argv)
 {
   cout << "*******************************************************************************************" << endl;
@@ -92,6 +94,7 @@ int main(int argc, char** argv)
     job.setParametre(p);
     // ... and its environment
     Environnement e;
+    e["MYENVVAR"] = "MYVALUE";
     job.setEnvironnement(e);
     cout << job << endl;
 
@@ -107,13 +110,28 @@ int main(int argc, char** argv)
     cout << jobid.__repr__() << endl;
 
     // Wait for the end of the job
-    string state = "Undefined";
-    for (int i=0 ; i<timeout/2 && state != "U" && state != "C"; i++) {
-      sleep(2);
-      JobInfo jinfo = jobid.queryJob();
+    int time = 0;
+    int sleeptime = 1;
+    bool testTimeout = (timeout > -1);
+    bool timeoutReached = (testTimeout && time >= timeout);
+    JobInfo jinfo = jobid.queryJob();
+    string state = jinfo.getParametre()["STATE"].str();
+    cout << "State is \"" << state << "\"";
+    while (!timeoutReached && state != "U" && state != "C") {
+      cout << ", sleeping " << sleeptime << "s..." << endl;
+      sleep(sleeptime);
+      time += sleeptime;
+      timeoutReached = (testTimeout && time >= timeout);
+      sleeptime *= 2;
+      if (testTimeout && sleeptime > timeout - time)
+        sleeptime = timeout - time;
+      if (sleeptime > MAX_SLEEP_TIME)
+        sleeptime = MAX_SLEEP_TIME;
+      jinfo = jobid.queryJob();
       state = jinfo.getParametre()["STATE"].str();
-      cout << "State is \"" << state << "\"" << endl;
+      cout << "State is \"" << state << "\"";
     }
+    cout << endl;
 
     if (state == "U" || state == "C") {
       cout << "Job " << jobid.__repr__() << " is done" << endl;
@@ -131,16 +149,21 @@ int main(int argc, char** argv)
   }
 
   // test the result file
-  string exp = "c = 12";
-  string res;
-  ifstream f("result.txt");
-  getline(f, res);
-  f.close();
-
-  cout << "result found : " << res << ", expected : " << exp << endl;
-
-  if (res == exp)
-    return 0;
-  else
+  try {
+    SimpleParser resultParser;
+    resultParser.parse("result.txt");
+    cout << "Result:" << endl << resultParser;
+    const string & envvar = resultParser.getValue("MYENVVAR");
+    int result = resultParser.getValueAsInt("c");
+    if (envvar == "MYVALUE" && result == 12) {
+      cout << "OK, Expected result found." << endl;
+      return 0;
+    } else {
+      cerr << "Error, result is not the expected one (MYENVVAR = MYVALUE, c = 12)." << endl;
+      return 1;
+    }
+  } catch (ParserException e) {
+    cerr << "Parser error on result file: " << e.what() << endl;
     return 1;
+  }
 }
diff --git a/src/PBS/Test/Test_ePBS.cxx b/src/PBS/Test/Test_ePBS.cxx
new file mode 100644 (file)
index 0000000..b603d75
--- /dev/null
@@ -0,0 +1,188 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+/*
+ * Test_ePBS.cxx :
+ *
+ * Author : Renaud BARATE - EDF R&D
+ * Date   : April 2009
+ *
+ */
+
+#include <iostream>
+#include <fstream>
+
+#include <Batch_Job.hxx>
+#include <Batch_BatchManagerCatalog.hxx>
+#include <Batch_FactBatchManager.hxx>
+#include <Batch_FactBatchManager_eClient.hxx>
+#include <Batch_BatchManager.hxx>
+#include <Batch_BatchManager_eClient.hxx>
+
+#include <SimpleParser.hxx>
+
+#ifdef WIN32
+#include <Windows.h>
+#define sleep(seconds) Sleep((seconds)*1000)
+#define usleep(useconds) Sleep((useconds)/1000)
+#endif
+
+using namespace std;
+using namespace Batch;
+
+const int MAX_SLEEP_TIME = 600;
+
+void print_usage()
+{
+  cout << "usage: Test_ePBS PROTOCOL" << endl;
+  cout << "    PROTOCOL      \"SSH\" or \"RSH\"" << endl;
+}
+
+int main(int argc, char** argv)
+{
+  // Parse argument
+  if (argc != 2) {
+    print_usage();
+    return 1;
+  }
+  CommunicationProtocolType protocol;
+  if (strcmp(argv[1], "SSH") == 0)
+    protocol = SSH;
+  else if (strcmp(argv[1], "RSH") == 0)
+    protocol = RSH;
+  else {
+    print_usage();
+    return 1;
+  }
+
+  cout << "*******************************************************************************************" << endl;
+  cout << "This program tests the batch submission based on PBS emulation. Passwordless authentication" << endl;
+  cout << "must be used for this test to pass. For SSH, this can be configured with ssh-agent for" << endl;
+  cout << "instance. For RSH, this can be configured with the .rhosts file." << endl;
+  cout << "*******************************************************************************************" << endl;
+
+  // eventually remove any previous result
+  remove("result.txt");
+
+  try {
+    // Parse the test configuration file
+    SimpleParser parser;
+    parser.parseTestConfigFile();
+    const string & homedir = parser.getValue("TEST_EPBS_HOMEDIR");
+    const string & host = parser.getValue("TEST_EPBS_HOST");
+    const string & user = parser.getValue("TEST_EPBS_USER");
+    const string & queue = parser.getValue("TEST_EPBS_QUEUE");
+    int timeout = parser.getValueAsInt("TEST_EPBS_TIMEOUT");
+
+    // Define the job...
+    Job job;
+    // ... and its parameters ...
+    Parametre p;
+    p["EXECUTABLE"]    = "./test-script.sh";
+    p["NAME"]          = string("Test_ePBS_") + argv[1];
+    p["WORKDIR"]       = homedir + "/tmp/Batch";
+    p["INFILE"]        = Couple("seta.sh", "tmp/Batch/seta.sh");
+    p["INFILE"]       += Couple("setb.sh", "tmp/Batch/setb.sh");
+    p["OUTFILE"]       = Couple("result.txt", "tmp/Batch/result.txt");
+    p["TMPDIR"]        = "tmp/Batch/";
+    p["USER"]          = user;
+    p["NBPROC"]        = 1;
+    p["MAXWALLTIME"]   = 1;
+    p["MAXRAMSIZE"]    = 1000;
+    p["HOMEDIR"]       = homedir;
+    p["QUEUE"]         = queue;
+    job.setParametre(p);
+    // ... and its environment
+    Environnement e;
+    e["MYENVVAR"] = "MYVALUE";
+    job.setEnvironnement(e);
+    cout << job << endl;
+
+    // Get the catalog
+    BatchManagerCatalog& c = BatchManagerCatalog::getInstance();
+
+    // Create a BatchManager of type ePBS on localhost
+    FactBatchManager_eClient * fbm = (FactBatchManager_eClient *)(c("ePBS"));
+    BatchManager_eClient * bm = (*fbm)(host.c_str(), protocol, "lam");
+
+    // Submit the job to the BatchManager
+    JobId jobid = bm->submitJob(job);
+    cout << jobid.__repr__() << endl;
+
+    // Wait for the end of the job
+    int time = 0;
+    int sleeptime = 1;
+    bool testTimeout = (timeout > -1);
+    bool timeoutReached = (testTimeout && time >= timeout);
+    JobInfo jinfo = jobid.queryJob();
+    string state = jinfo.getParametre()["STATE"].str();
+    cout << "State is \"" << state << "\"";
+    while (!timeoutReached && state != "U" && state != "C") {
+      cout << ", sleeping " << sleeptime << "s..." << endl;
+      sleep(sleeptime);
+      time += sleeptime;
+      timeoutReached = (testTimeout && time >= timeout);
+      sleeptime *= 2;
+      if (testTimeout && sleeptime > timeout - time)
+        sleeptime = timeout - time;
+      if (sleeptime > MAX_SLEEP_TIME)
+        sleeptime = MAX_SLEEP_TIME;
+      jinfo = jobid.queryJob();
+      state = jinfo.getParametre()["STATE"].str();
+      cout << "State is \"" << state << "\"";
+    }
+    cout << endl;
+
+    if (state == "U" || state == "C") {
+      cout << "Job " << jobid.__repr__() << " is done" << endl;
+      bm->importOutputFiles(job, ".");
+    } else {
+      cerr << "Timeout while executing job" << endl;
+      return 1;
+    }
+
+  } catch (GenericException e) {
+    cerr << "Error: " << e << endl;
+    return 1;
+  } catch (ParserException e) {
+    cerr << "Parser error: " << e.what() << endl;
+    return 1;
+  }
+
+  // test the result file
+  try {
+    SimpleParser resultParser;
+    resultParser.parse("result.txt");
+    cout << "Result:" << endl << resultParser;
+    const string & envvar = resultParser.getValue("MYENVVAR");
+    int result = resultParser.getValueAsInt("c");
+    if (envvar == "MYVALUE" && result == 12) {
+      cout << "OK, Expected result found." << endl;
+      return 0;
+    } else {
+      cerr << "Error, result is not the expected one (MYENVVAR = MYVALUE, c = 12)." << endl;
+      return 1;
+    }
+  } catch (ParserException e) {
+    cerr << "Parser error on result file: " << e.what() << endl;
+    return 1;
+  }
+}
diff --git a/src/PBS/Test/Test_ePBS_RSH.cxx b/src/PBS/Test/Test_ePBS_RSH.cxx
deleted file mode 100644 (file)
index daafecb..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of the GNU Lesser General Public
-//  License as published by the Free Software Foundation; either
-//  version 2.1 of the License.
-//
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-/*
- * Test_ePBS.cxx :
- *
- * Author : Renaud BARATE - EDF R&D
- * Date   : April 2009
- *
- */
-
-#include <iostream>
-#include <fstream>
-
-#include <Batch_Job.hxx>
-#include <Batch_BatchManagerCatalog.hxx>
-#include <Batch_FactBatchManager.hxx>
-#include <Batch_FactBatchManager_eClient.hxx>
-#include <Batch_BatchManager.hxx>
-#include <Batch_BatchManager_eClient.hxx>
-
-#include <SimpleParser.hxx>
-
-#ifdef WIN32
-#include <Windows.h>
-#define sleep(seconds) Sleep((seconds)*1000)
-#define usleep(useconds) Sleep((useconds)/1000)
-#endif
-
-using namespace std;
-using namespace Batch;
-
-int main(int argc, char** argv)
-{
-  cout << "*******************************************************************************************" << endl;
-  cout << "This program tests the batch submission based on PBS emulation with RSH. Passwordless RSH" << endl;
-  cout << "authentication must be used for this test to pass (this can be configured with the .rhosts" << endl;
-  cout << "file). You also need to create a directory \"tmp/Batch\" in your home directory on the PBS" << endl;
-  cout << "server before running this test." << endl;
-  cout << "*******************************************************************************************" << endl;
-
-  // eventually remove any previous result
-  remove("result.txt");
-
-  try {
-    // Parse the test configuration file
-    SimpleParser parser;
-    parser.parseTestConfigFile();
-    const string & homedir = parser.getValue("TEST_EPBS_HOMEDIR");
-    const string & host = parser.getValue("TEST_EPBS_HOST");
-    const string & user = parser.getValue("TEST_EPBS_USER");
-    const string & queue = parser.getValue("TEST_EPBS_QUEUE");
-    int timeout = parser.getValueAsInt("TEST_EPBS_TIMEOUT");
-
-    // Define the job...
-    Job job;
-    // ... and its parameters ...
-    Parametre p;
-    p["EXECUTABLE"]    = "./test-script.sh";
-    p["NAME"]          = "Test_ePBS_RSH";
-    p["WORKDIR"]       = homedir + "/tmp/Batch";
-    p["INFILE"]        = Couple("seta.sh", "tmp/Batch/seta.sh");
-    p["INFILE"]       += Couple("setb.sh", "tmp/Batch/setb.sh");
-    p["OUTFILE"]       = Couple("result.txt", "tmp/Batch/result.txt");
-    p["TMPDIR"]        = "tmp/Batch/";
-    p["USER"]          = user;
-    p["NBPROC"]        = 1;
-    p["MAXWALLTIME"]   = 1;
-    p["MAXRAMSIZE"]    = 4;
-    p["HOMEDIR"]       = homedir;
-    p["QUEUE"]         = queue;
-    job.setParametre(p);
-    // ... and its environment (SSH_AUTH_SOCK env var is important for ssh agent authentication)
-    Environnement e;
-    const char * sshAuthSock = getenv("SSH_AUTH_SOCK");
-    if (sshAuthSock != NULL) e["SSH_AUTH_SOCK"] = sshAuthSock;
-    job.setEnvironnement(e);
-    cout << job << endl;
-
-    // Get the catalog
-    BatchManagerCatalog& c = BatchManagerCatalog::getInstance();
-
-    // Create a BatchManager of type ePBS on localhost
-    FactBatchManager_eClient * fbm = (FactBatchManager_eClient *)(c("ePBS"));
-    BatchManager_eClient * bm = (*fbm)(host.c_str(), RSH, "lam");
-
-    // Submit the job to the BatchManager
-    JobId jobid = bm->submitJob(job);
-    cout << jobid.__repr__() << endl;
-
-    // Wait for the end of the job
-    string state = "Undefined";
-    for (int i=0 ; i<timeout/2 && state != "U"; i++) {
-      sleep(2);
-      JobInfo jinfo = jobid.queryJob();
-      state = jinfo.getParametre()["STATE"].str();
-      cout << "State is \"" << state << "\"" << endl;
-    }
-
-    if (state == "U") {
-      cout << "Job " << jobid.__repr__() << " is done" << endl;
-      bm->importOutputFiles(job, ".");
-    } else {
-      cerr << "Timeout while executing job" << endl;
-      return 1;
-    }
-
-  } catch (GenericException e) {
-    cerr << "Error: " << e << endl;
-    return 1;
-  } catch (ParserException e) {
-    cerr << "Parser error: " << e.what() << endl;
-    return 1;
-  }
-
-  // test the result file
-  string exp = "c = 12";
-  string res;
-  ifstream f("result.txt");
-  getline(f, res);
-  f.close();
-
-  cout << "result found : " << res << ", expected : " << exp << endl;
-
-  if (res == exp)
-    return 0;
-  else
-    return 1;
-}
diff --git a/src/PBS/Test/Test_ePBS_SSH.cxx b/src/PBS/Test/Test_ePBS_SSH.cxx
deleted file mode 100644 (file)
index 42e98c3..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of the GNU Lesser General Public
-//  License as published by the Free Software Foundation; either
-//  version 2.1 of the License.
-//
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
-//
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-/*
- * Test_ePBS.cxx :
- *
- * Author : Renaud BARATE - EDF R&D
- * Date   : April 2009
- *
- */
-
-#include <iostream>
-#include <fstream>
-
-#include <Batch_Job.hxx>
-#include <Batch_BatchManagerCatalog.hxx>
-#include <Batch_FactBatchManager.hxx>
-#include <Batch_FactBatchManager_eClient.hxx>
-#include <Batch_BatchManager.hxx>
-#include <Batch_BatchManager_eClient.hxx>
-
-#include <SimpleParser.hxx>
-
-#ifdef WIN32
-#include <Windows.h>
-#define sleep(seconds) Sleep((seconds)*1000)
-#define usleep(useconds) Sleep((useconds)/1000)
-#endif
-
-using namespace std;
-using namespace Batch;
-
-int main(int argc, char** argv)
-{
-  cout << "*******************************************************************************************" << endl;
-  cout << "This program tests the batch submission based on PBS emulation with SSH. Passwordless SSH" << endl;
-  cout << "authentication must be used for this test to pass (this can be configured with ssh-agent" << endl;
-  cout << "for instance). You also need to create a directory \"tmp/Batch\" in your home directory on" << endl;
-  cout << "the PBS server before running this test." << endl;
-  cout << "*******************************************************************************************" << endl;
-
-  // eventually remove any previous result
-  remove("result.txt");
-
-  try {
-    // Parse the test configuration file
-    SimpleParser parser;
-    parser.parseTestConfigFile();
-    const string & homedir = parser.getValue("TEST_EPBS_HOMEDIR");
-    const string & host = parser.getValue("TEST_EPBS_HOST");
-    const string & user = parser.getValue("TEST_EPBS_USER");
-    const string & queue = parser.getValue("TEST_EPBS_QUEUE");
-    int timeout = parser.getValueAsInt("TEST_EPBS_TIMEOUT");
-
-    // Define the job...
-    Job job;
-    // ... and its parameters ...
-    Parametre p;
-    p["EXECUTABLE"]    = "./test-script.sh";
-    p["NAME"]          = "Test_ePBS_SSH";
-    p["WORKDIR"]       = homedir + "/tmp/Batch";
-    p["INFILE"]        = Couple("seta.sh", "tmp/Batch/seta.sh");
-    p["INFILE"]       += Couple("setb.sh", "tmp/Batch/setb.sh");
-    p["OUTFILE"]       = Couple("result.txt", "tmp/Batch/result.txt");
-    p["TMPDIR"]        = "tmp/Batch/";
-    p["USER"]          = user;
-    p["NBPROC"]        = 1;
-    p["MAXWALLTIME"]   = 1;
-    p["MAXRAMSIZE"]    = 4;
-    p["HOMEDIR"]       = homedir;
-    p["QUEUE"]         = queue;
-    job.setParametre(p);
-    // ... and its environment (SSH_AUTH_SOCK env var is important for ssh agent authentication)
-    Environnement e;
-    const char * sshAuthSock = getenv("SSH_AUTH_SOCK");
-    if (sshAuthSock != NULL) e["SSH_AUTH_SOCK"] = sshAuthSock;
-    job.setEnvironnement(e);
-    cout << job << endl;
-
-    // Get the catalog
-    BatchManagerCatalog& c = BatchManagerCatalog::getInstance();
-
-    // Create a BatchManager of type ePBS on localhost
-    FactBatchManager_eClient * fbm = (FactBatchManager_eClient *)(c("ePBS"));
-    BatchManager_eClient * bm = (*fbm)(host.c_str(), SSH, "lam");
-
-    // Submit the job to the BatchManager
-    JobId jobid = bm->submitJob(job);
-    cout << jobid.__repr__() << endl;
-
-    // Wait for the end of the job
-    string state = "Undefined";
-    for (int i=0 ; i<timeout/2 && state != "U"; i++) {
-      sleep(2);
-      JobInfo jinfo = jobid.queryJob();
-      state = jinfo.getParametre()["STATE"].str();
-      cout << "State is \"" << state << "\"" << endl;
-    }
-
-    if (state == "U") {
-      cout << "Job " << jobid.__repr__() << " is done" << endl;
-      bm->importOutputFiles(job, ".");
-    } else {
-      cerr << "Timeout while executing job" << endl;
-      return 1;
-    }
-
-  } catch (GenericException e) {
-    cerr << "Error: " << e << endl;
-    return 1;
-  } catch (ParserException e) {
-    cerr << "Parser error: " << e.what() << endl;
-    return 1;
-  }
-
-  // test the result file
-  string exp = "c = 12";
-  string res;
-  ifstream f("result.txt");
-  getline(f, res);
-  f.close();
-
-  cout << "result found : " << res << ", expected : " << exp << endl;
-
-  if (res == exp)
-    return 0;
-  else
-    return 1;
-}
index 64eb2facee310eb6ccfa6aa8cc6747f8955540ad..ae952c89ca110b5a8eb2623dc5a270663c009c11 100755 (executable)
@@ -5,4 +5,5 @@ source setb.sh
 
 c=`expr $a "*" $b`
 
-echo "c = $c" > result.txt
+echo "MYENVVAR = $MYENVVAR" > result.txt
+echo "c = $c" >> result.txt