Module EDTestCaseEDPluginExecProcessScript
[hide private]
[frames] | no frames]

Source Code for Module EDTestCaseEDPluginExecProcessScript

  1  # 
  2  #    Project: The EDNA Kernel 
  3  #             http://www.edna-site.org 
  4  # 
  5  #    File: "$Id$" 
  6  # 
  7  #    Copyright (C) 2008-2009 European Synchrotron Radiation Facility 
  8  #                            Grenoble, France 
  9  # 
 10  #    Principal authors: Marie-Francoise Incardona (incardon@esrf.fr) 
 11  #                       Olof Svensson (svensson@esrf.fr)  
 12  # 
 13  #    This program is free software: you can redistribute it and/or modify 
 14  #    it under the terms of the GNU Lesser General Public License as published 
 15  #    by the Free Software Foundation, either version 3 of the License, or 
 16  #    (at your option) any later version. 
 17  # 
 18  #    This program is distributed in the hope that it will be useful, 
 19  #    but WITHOUT ANY WARRANTY; without even the implied warranty of 
 20  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 21  #    GNU Lesser General Public License for more details. 
 22  # 
 23  #    You should have received a copy of the GNU General Public License 
 24  #    and the GNU Lesser General Public License  along with this program.   
 25  #    If not, see <http://www.gnu.org/licenses/>. 
 26  # 
 27   
 28   
 29  __authors__ = [ "Marie-Francoise Incardona", "Olof Svensson" ] 
 30  __contact__ = "svensson@esrf.fr" 
 31  __license__ = "LGPLv3+" 
 32  __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" 
 33   
 34  """ 
 35  The purpose of this plugin execute class is to be subclassed for 
 36  creating plugins that execute external programs through scripts. 
 37  """ 
 38   
 39  import os, sys 
 40  from EDAssert import EDAssert 
 41  from EDPluginExecProcessScript import EDPluginExecProcessScript 
 42  from EDTestCase import EDTestCase 
 43  from EDUtilsPlatform import EDUtilsPlatform 
 44  from EDUtilsPath import EDUtilsPath 
 45   
46 -class EDTestCaseEDPluginExecProcessScript(EDTestCase):
47 48
49 - def __init__(self, _strTestName="EDTestCaseEDPluginExecProcessScript"):
50 EDTestCase.__init__(self, _strTestName)
51 52
53 - def testGenerateScript(self):
54 listCommandPreExecution = ['PRE-EXECUTION1', 'PRE-EXECUTION2 PATATE'] 55 listCommandExecution = ['COMMAND1', 'COMMAND2 BANANA'] 56 listCommandPostExecution = ['POST-EXECUTION1', 'POST-EXECUTION2 FRAISE'] 57 edPluginExecProcessScript = EDPluginExecProcessScript() 58 edPluginExecProcessScript.setScriptShell("/bin/bash") 59 edPluginExecProcessScript.setScriptBaseName("TestCaseGenerateScript") 60 edPluginExecProcessScript.setListCommandPreExecution(listCommandPreExecution) 61 edPluginExecProcessScript.setListCommandExecution(listCommandExecution) 62 edPluginExecProcessScript.setListCommandPostExecution(listCommandPostExecution) 63 edPluginExecProcessScript.setRequireCCP4(True) 64 edPluginExecProcessScript.setSetupCCP4("/usr/local/xtal/ccp4-6.0.2/include/ccp4.setup-bash") 65 edPluginExecProcessScript.setScriptExecutable("cat") 66 edPluginExecProcessScript.configure() 67 strScript = edPluginExecProcessScript.prepareScript() 68 lstScriptReference = ["#!/bin/bash", 69 "cd %s" % edPluginExecProcessScript.getWorkingDirectory(), 70 ". /usr/local/xtal/ccp4-6.0.2/include/ccp4.setup-bash", 71 "PRE-EXECUTION1", 72 "PRE-EXECUTION2 PATATE", 73 "cat > TestCaseGenerateScript.log 2> TestCaseGenerateScript.err << EOF-EDPluginExecProcessScript &", 74 "COMMAND1", 75 "COMMAND2 BANANA", 76 "EOF-EDPluginExecProcessScript", 77 "ednaJobPid=$!", 78 "ednaJobHostName=$(hostname)", 79 'echo "$ednaJobHostName $ednaJobPid" > %s' % edPluginExecProcessScript.getPathToHostNamePidFile(), 80 'wait $ednaJobPid', 81 'POST-EXECUTION1', 82 'POST-EXECUTION2 FRAISE', 83 ''] 84 strScriptReference = EDUtilsPlatform.linesep.join(lstScriptReference) 85 EDAssert.equal(strScriptReference, strScript)
86 87 88
90 listCommands = ['COMMAND1', 'COMMAND2 BANANA'] 91 edPluginExecProcessScript = EDPluginExecProcessScript() 92 edPluginExecProcessScript.setScriptShell("/bin/bash") 93 edPluginExecProcessScript.setScriptBaseName("TestCaseGenerateScript") 94 edPluginExecProcessScript.setListCommandExecution(listCommands) 95 edPluginExecProcessScript.setRequireCCP4(True) 96 edPluginExecProcessScript.setSetupCCP4("/usr/local/xtal/ccp4-6.0.2/include/ccp4.setup-bash") 97 edPluginExecProcessScript.setScriptExecutable("cat") 98 edPluginExecProcessScript.configure() 99 strScript = edPluginExecProcessScript.prepareScript() 100 edPluginExecProcessScript.writeExecutableScript(strScript) 101 strScriptFileName = edPluginExecProcessScript.getScriptFileName() 102 strScriptFromFile = edPluginExecProcessScript.readProcessFile(strScriptFileName) 103 lstScriptReference = ["#!/bin/bash", 104 "cd %s" % edPluginExecProcessScript.getWorkingDirectory(), 105 ". /usr/local/xtal/ccp4-6.0.2/include/ccp4.setup-bash", 106 "cat > TestCaseGenerateScript.log 2> TestCaseGenerateScript.err << EOF-EDPluginExecProcessScript &", 107 "COMMAND1", 108 "COMMAND2 BANANA", 109 "EOF-EDPluginExecProcessScript", 110 "ednaJobPid=$!", 111 "ednaJobHostName=$(hostname)", 112 'echo "$ednaJobHostName $ednaJobPid" > %s' % edPluginExecProcessScript.getPathToHostNamePidFile(), 113 "wait $ednaJobPid", 114 ""] 115 strScriptReference = EDUtilsPlatform.linesep.join(lstScriptReference) 116 EDAssert.equal(strScriptFromFile, strScriptReference)
117 118
119 - def testExecuteScript(self):
120 listCommandExecution = list(['COMMAND1', 'COMMAND2 BANANA']) 121 strLogReference = EDUtilsPlatform.linesep.join(["COMMAND1", "COMMAND2 BANANA", ""]) 122 edPluginExecProcessScript = EDPluginExecProcessScript() 123 edPluginExecProcessScript.setListCommandExecution(listCommandExecution) 124 edPluginExecProcessScript.setRequireCCP4(False) 125 126 edPluginExecProcessScript.setScriptExecutable("%s %s" % (sys.executable, 127 os.path.join(EDUtilsPath.EDNA_HOME, "kernel", "bin", "cat.py"))) 128 edPluginExecProcessScript.setTimeOut(15.0) 129 edPluginExecProcessScript.setScriptShell("python") 130 from XSDataCommon import XSData 131 edPluginExecProcessScript.setXSDataInputClass(XSData) 132 edPluginExecProcessScript.execute() 133 edPluginExecProcessScript.synchronize() 134 strScriptLogFileName = edPluginExecProcessScript.getScriptLogFileName() 135 strLogFromFile = edPluginExecProcessScript.readProcessLogFile() 136 EDAssert.equal(strLogFromFile, strLogReference)
137 138
139 - def process(self):
143 144 145 if __name__ == '__main__': 146 147 edTestCaseEDPluginExecProcessScript = EDTestCaseEDPluginExecProcessScript("TestCase EDPluginExecProcessScript") 148 edTestCaseEDPluginExecProcessScript.execute() 149