use of org.ow2.proactive.scheduler.common.job.TaskFlowJob in project scheduling by ow2-proactive.
the class TestScriptTask method forkedTasks.
private void forkedTasks() throws Throwable {
TaskFlowJob job = (TaskFlowJob) StaxJobFactory.getFactory().createJob(new File(jobDescriptor.toURI()).getAbsolutePath());
JobId id = schedulerHelper.submitJob(job);
schedulerHelper.waitForEventJobFinished(id);
JobResult jobResult = schedulerHelper.getJobResult(id);
// Hello Work script task
TaskResult simpleTaskResult = jobResult.getResult("simple");
assertEquals(true, simpleTaskResult.value());
assertTrue(simpleTaskResult.getOutput().getAllLogs(false).contains("hello"));
// return binding should be used as task result
TaskResult returnTaskResult = jobResult.getResult("return");
assertEquals("42", returnTaskResult.value().toString());
// results binding should be avaible in dependent tasks
TaskResult resultFromDependentTaskTaskResult = jobResult.getResult("results_from_dependent_task");
assertEquals("42", resultFromDependentTaskTaskResult.value().toString());
// pas properties are exposed in the script task
TaskResult propertiesTaskResult = jobResult.getResult("properties");
String logs = propertiesTaskResult.getOutput().getAllLogs(false);
assertThat(logs, containsString("PA_JOB_ID=" + jobResult.getJobId().value()));
assertThat(logs, containsString("PA_JOB_NAME=" + jobResult.getName()));
assertThat(logs, containsString("PA_TASK_ID=" + propertiesTaskResult.getTaskId().value()));
assertThat(logs, containsString("PA_TASK_NAME=" + propertiesTaskResult.getTaskId().getReadableName()));
assertThat(logs, containsString("PA_TASK_ITERATION=0"));
assertThat(logs, containsString("PA_TASK_REPLICATION=0"));
// the script can be a file
TaskResult fileTaskResult = jobResult.getResult("file");
assertTrue(fileTaskResult.getOutput().getAllLogs(false).contains("Beginning of clean script"));
TaskResult fileAndArgsTaskResult = jobResult.getResult("file_and_args");
assertTrue(fileAndArgsTaskResult.getOutput().getAllLogs(false).contains("My_Magic_Arg"));
// dataspaces binding should be available
TaskResult dataspacesTaskResult = jobResult.getResult("dataspaces");
String dataspacesLogs = dataspacesTaskResult.getOutput().getAllLogs(false);
System.out.println(dataspacesLogs);
String schedulerHome = System.getProperty("pa.scheduler.home");
assertTrue(dataspacesLogs.contains("global=" + schedulerHome));
assertTrue(dataspacesLogs.contains("user=" + schedulerHome));
assertTrue(dataspacesLogs.contains("input=" + schedulerHome));
assertTrue(dataspacesLogs.contains("output=" + schedulerHome));
TaskResult multiNodeTaskResult = jobResult.getResult("multi-node");
String mnLogs = multiNodeTaskResult.getOutput().getAllLogs(false);
assertTrue("Invalid binding for nodesurl", mnLogs.contains("nodesurl=" + (SchedulerStartForFunctionalTest.RM_NODE_NUMBER - 1)));
// script task should be forked by default, ie it will not kill the scheduler on system.exit
JobState jobState = schedulerHelper.getSchedulerInterface().getJobState(id);
TaskResult killJVMTaskResult = jobResult.getResult("killJVM");
assertTrue(killJVMTaskResult.getException() instanceof ForkedJvmProcessException);
TaskState killJVMTaskState = jobState.getHMTasks().get(killJVMTaskResult.getTaskId());
assertEquals(TaskStatus.FAULTY, killJVMTaskState.getStatus());
}
use of org.ow2.proactive.scheduler.common.job.TaskFlowJob in project scheduling by ow2-proactive.
the class TestScriptTask method test_getTaskResult_nullReturningScriptTask_shouldSucceed.
/**
* SCHEDULING-2199 NPE is thrown when retrieving the result of a ScriptTask,
* if the result is 'null'.
*/
private void test_getTaskResult_nullReturningScriptTask_shouldSucceed() throws Throwable {
TaskFlowJob job = (TaskFlowJob) StaxJobFactory.getFactory().createJob(new File(job_null_returning_script_task.toURI()).getAbsolutePath());
JobId id = schedulerHelper.submitJob(job);
schedulerHelper.waitForEventJobFinished(id);
TaskResult taskResult = schedulerHelper.getTaskResult(id, "task");
assertNull(taskResult.value());
}
use of org.ow2.proactive.scheduler.common.job.TaskFlowJob in project scheduling by ow2-proactive.
the class TestUnauthorizedScripts method createJob.
public Job createJob(String forkScriptContent, String cleanScriptContent) throws InvalidScriptException, UserException {
TaskFlowJob job = new TaskFlowJob();
job.setName(this.getClass().getSimpleName() + "_forkAndClean");
ScriptTask taskWithFork = new ScriptTask();
taskWithFork.setScript(new TaskScript(new SimpleScript("println 'Hello'", "groovy")));
ForkEnvironment forkEnvironment = new ForkEnvironment();
forkEnvironment.setEnvScript(new SimpleScript(forkScriptContent, "groovy"));
taskWithFork.setForkEnvironment(forkEnvironment);
ScriptTask taskWithClean = new ScriptTask();
taskWithClean.setScript(new TaskScript(new SimpleScript("println 'Hello'", "groovy")));
taskWithClean.setCleaningScript(new SimpleScript(cleanScriptContent, "groovy"));
job.addTask(taskWithFork);
job.addTask(taskWithClean);
return job;
}
use of org.ow2.proactive.scheduler.common.job.TaskFlowJob in project scheduling by ow2-proactive.
the class TestUnauthorizedScripts method createJobSelection.
public Job createJobSelection(String selectionScriptContent) throws InvalidScriptException, UserException {
TaskFlowJob job = new TaskFlowJob();
job.setName(this.getClass().getSimpleName() + "_selection");
ScriptTask taskWithSelection = new ScriptTask();
taskWithSelection.setScript(new TaskScript(new SimpleScript("println 'Hello'", "groovy")));
taskWithSelection.addSelectionScript(new SelectionScript(new SimpleScript(selectionScriptContent, "groovy"), true));
job.addTask(taskWithSelection);
return job;
}
use of org.ow2.proactive.scheduler.common.job.TaskFlowJob in project scheduling by ow2-proactive.
the class TestNonForkedScriptTask method nonForkedTasks_SystemExitScript_KillsANode.
@Ignore
@Test
public void nonForkedTasks_SystemExitScript_KillsANode() throws Throwable {
TaskFlowJob job = (TaskFlowJob) StaxJobFactory.getFactory().createJob(new File(nonForked_jobDescriptor.toURI()).getAbsolutePath());
schedulerHelper.submitJob(job);
// busy event when task is scheduler
schedulerHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// down event when node is killed
RMNodeEvent nodeKilledEvent = schedulerHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
assertEquals(NodeState.DOWN, nodeKilledEvent.getNodeState());
}
Aggregations