def test_generateControlScript(batchSystem): """Test that the control script generated by the merging operation between a BatchSystem and executeBatch.py is: * complete: contains the content of both files * executable and doesn't raise any syntax error. Example: it may check that a __future__ import is not misplaced in the script due to the merging of the files. """ ce = SSHComputingElement("Test_SSHCE") # Change the batch system file used during the control script generation ce.loadBatchSystem(batchSystem) # Get the local control script result = ce._generateControlScript() assert result["OK"] is True source = result["Value"] dest = "execute_batch.py" # Simulate operation done by the scpCall method # Copy the local control script into the "remote" control script # As the source can be composed of multiple files, we have to copy the content of each file sources = source.split(" ") with open(dest, "wb") as dst: for sourceFile in sources: with open(sourceFile, "rb") as src: shutil.copyfileobj(src, dst) # Test that the control script is complete with open(dest, "r") as dst: dataDest = dst.read() batchSystemDir = os.path.join(os.path.dirname(DIRAC.__file__), "Resources", "Computing", "BatchSystems") batchSystemScript = os.path.join(batchSystemDir, "%s.py" % batchSystem) with open(batchSystemScript, "r") as bsc: dataBatchSystemScript = bsc.read() assert executeBatchContent in dataDest assert dataBatchSystemScript in dataDest # Test the execution of the remote control script cmd = "python -m py_compile %s" % dest args = shlex.split(cmd) process = subprocess.Popen(args, universal_newlines=True) process.communicate() assert process.returncode == 0 # Delete the control script and the .pyc file associated os.remove(source) os.remove(dest) if os.path.isfile("%sc" % dest): os.remove("%sc" % dest)
def test_generateControlScript(batchSystem): """ Test that the control script generated by the merging operation between a BatchSystem and executeBatch.py is: * complete: contains the content of both files * executable and doesn't raise any syntax error. Example: it may check that a __future__ import is not misplaced in the script due to the merging of the files. """ ce = SSHComputingElement('Test_SSHCE') # Change the batch system file used during the control script generation ce.batchSystem = batchSystem # Get the local control script result = ce._generateControlScript() assert result['OK'] is True source = result['Value'] dest = 'execute_batch.py' # Simulate operation done by the scpCall method # Copy the local control script into the "remote" control script # As the source can be composed of multiple files, we have to copy the content of each file sources = source.split(' ') with open(dest, "wb") as dst: for sourceFile in sources: with open(sourceFile, "rb") as src: shutil.copyfileobj(src, dst) # Test that the control script is complete with open(dest, 'r') as dst: dataDest = dst.read() batchSystemDir = os.path.join(rootPath, "DIRAC", "Resources", "Computing", "BatchSystems") batchSystemScript = os.path.join(batchSystemDir, '%s.py' % batchSystem) with open(batchSystemScript, 'r') as bsc: dataBatchSystemScript = bsc.read() assert executeBatchContent in dataDest assert dataBatchSystemScript in dataDest # Test the execution of the remote control script cmd = 'python -m py_compile %s' % dest args = shlex.split(cmd) process = subprocess.Popen(args) process.communicate() assert process.returncode is 0 # Delete the control script and the .pyc file associated os.remove(source) os.remove(dest) os.remove('%sc' % dest)