def test_crud_executable(self): """It tests basis CRUD operations of an Executable Class""" # We verify that the object is not in the db after creating it executable = Executable() executable.source_code_file = "source" executable.compilation_script = "script" executable.compilation_type = "type" self.assertIsNone(executable.id) # We store the object in the db db.session.add(executable) db.session.commit() # We recover the executable form the db executable = db.session.query(Executable).filter_by( id=executable.id).first() self.assertEquals("source", executable.source_code_file) # We check that we can update the Executable executable.executable_file = 'pepito' executable.singularity_app_folder = "app_folder" db.session.commit() executable = db.session.query(Executable).filter_by( id=executable.id).first() self.assertEquals('pepito', executable.executable_file) self.assertEquals('app_folder', executable.singularity_app_folder) # We check that we can delete the Executable db.session.delete(executable) db.session.commit() count = db.session.query(Executable).count() self.assertEquals(0, count)
def test_execute_application_type_torque_qsub(self, mock_shell, mock_add_nodes): """ It verifies that the application type slurm sbatch is executed """ # First we verify that the testbed is of type TORQUE to be able # to execute it, in this case it should give an error since it is # not of type torque # We define the different entities necessary for the test. testbed = Testbed( name="nova2", on_line=True, category="xxxx", protocol="SSH", endpoint="*****@*****.**", package_formats=['sbatch', 'SINGULARITY'], extra_config={ "enqueue_compss_sc_cfg": "nova.cfg", "enqueue_env_file": "/home_nfs/home_ejarquej/installations/rc1707/COMPSs/compssenv" }) db.session.add(testbed) application = Application(name="super_app") db.session.add(application) db.session.commit() # So application and testbed get an id executable = Executable() executable.compilation_type = Executable.__type_torque_qsub__ executable.executable_file = "pepito.sh" db.session.add(executable) db.session.commit() # We do this so executable gets and id deployment = Deployment() deployment.testbed_id = testbed.id deployment.executable_id = executable.id db.session.add( deployment) # We add the executable to the db so it has an id execution_config = ExecutionConfiguration() execution_config.execution_type = Executable.__type_torque_qsub__ execution_config.application = application execution_config.testbed = testbed execution_config.executable = executable db.session.add(execution_config) db.session.commit() execution = Execution() execution.execution_type = Executable.__type_torque_qsub__ execution.status = Execution.__status_submitted__ torque.execute_batch(execution, execution_config.id) self.assertEquals(Execution.__status_failed__, execution.status) self.assertEquals("Testbed does not support TORQUE:QSUB applications", execution.output) # If the testbed is off-line, execution isn't allowed also testbed.category = Testbed.torque_category testbed.on_line = False db.session.commit() execution = Execution() execution.execution_type = Executable.__type_torque_qsub__ execution.status = Execution.__status_submitted__ torque.execute_batch(execution, execution_config.id) self.assertEquals(Executable.__type_torque_qsub__, execution.execution_type) self.assertEquals(Execution.__status_failed__, execution.status) self.assertEquals("Testbed is off-line", execution.output) ## Test executing output = b'1208.cloudserver' mock_shell.return_value = output testbed.category = Testbed.torque_category testbed.on_line = True db.session.commit() execution = Execution() execution.execution_type = Executable.__type_torque_qsub__ execution.status = Execution.__status_submitted__ torque.execute_batch(execution, execution_config.id) mock_shell.assert_called_with("qsub", "*****@*****.**", ["pepito.sh"]) execution = db.session.query(Execution).filter_by( execution_configuration_id=execution_config.id).first() self.assertEqual(execution.execution_type, execution_config.execution_type) self.assertEqual(execution.status, Execution.__status_running__) self.assertEqual("1208.cloudserver", execution.batch_id)