use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class TagTest method execute.
private void execute(InternalTask task) {
task.setExecuterInformation(executerInformationMock);
job.startTask(task);
FlowScript script = task.getFlowScript();
FlowAction action = null;
if (script != null) {
action = task.getFlowScript().execute().getResult();
}
job.terminateTask(false, task.getId(), schedulerStateUpdateMock, action, resultMock);
System.out.println("executed " + task.getName() + " -> " + getTaskNameList(true));
}
use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class TestPreciousLogs method testPreciousLogs.
private void testPreciousLogs(boolean createJavaTask, boolean forkEnv, boolean generateError) throws Exception {
TaskFlowJob job = new TaskFlowJob();
job.setName(this.getClass().getSimpleName());
Map<String, List<String>> expectedOutput = new LinkedHashMap<>();
for (int i = 0; i < 3; i++) {
String forkOutput = "forkOutput-" + i;
String preOutput = "preOutput-" + i;
String postOutput = "postOutput-" + i;
List<String> expectedTaskOutput = new ArrayList<>();
expectedTaskOutput.add(TASK_OUTPUT);
expectedTaskOutput.add(preOutput);
if (!generateError) {
expectedTaskOutput.add(postOutput);
}
Task task;
if (createJavaTask) {
JavaTask javaTask = new JavaTask();
if (generateError) {
javaTask.setExecutableClassName(TestJavaTaskWithError.class.getName());
} else {
javaTask.setExecutableClassName(TestJavaTask.class.getName());
}
if (forkEnv) {
ForkEnvironment env = new ForkEnvironment();
env.setEnvScript(createScript(forkOutput));
javaTask.setForkEnvironment(env);
expectedTaskOutput.add(forkOutput);
}
task = javaTask;
} else {
NativeTask nativeTask = new NativeTask();
File script = new File(getClass().getResource("/functionaltests/executables/test_echo_task.sh").getFile());
if (!script.exists()) {
Assert.fail("Can't find script " + script.getAbsolutePath());
}
nativeTask.setCommandLine(script.getAbsolutePath());
task = nativeTask;
}
if (generateError) {
task.setMaxNumberOfExecution(NB_EXECUTIONS);
} else {
task.setMaxNumberOfExecution(1);
task.setOnTaskError(OnTaskError.CANCEL_JOB);
}
task.setPreciousLogs(true);
task.setName("Task-" + i);
task.setPreScript(createScript(preOutput));
task.setPostScript(createScript(postOutput));
expectedOutput.put(task.getName(), expectedTaskOutput);
job.addTask(task);
}
Scheduler scheduler = schedulerHelper.getSchedulerInterface();
String userURI = scheduler.getUserSpaceURIs().get(0);
File userFile = new File(new URI(userURI));
// Clean all log files in user space
for (File logFile : FileUtils.listFiles(userFile, new String[] { "log" }, true)) {
FileUtils.deleteQuietly(logFile);
}
JobId jobId = schedulerHelper.testJobSubmission(job, true, false);
JobResult jobResult = scheduler.getJobResult(jobId);
Map<String, TaskResult> results = jobResult.getAllResults();
List<File> logFiles = new ArrayList<>();
for (String taskName : expectedOutput.keySet()) {
File taskLog = new File(userFile.toString() + "/" + jobId.value(), String.format("TaskLogs-%s-%s.log", jobId.value(), results.get(taskName).getTaskId().value()));
logFiles.add(taskLog);
if (!taskLog.exists()) {
Assert.fail("Task log file " + taskLog.getAbsolutePath() + " doesn't exist");
}
String output = new String(FileToBytesConverter.convertFileToByteArray(taskLog));
System.out.println("Log file for " + taskName + ":");
System.out.println(output);
for (String expectedLine : expectedOutput.get(taskName)) {
Assert.assertTrue("Output doesn't contain line " + expectedLine, output.contains(expectedLine));
int expectedOccurrences = (generateError ? NB_EXECUTIONS : 1);
Assert.assertEquals("Output doesn't contain " + expectedOccurrences + " occurrences of line " + expectedLine, expectedOccurrences, StringUtils.countMatches(output, expectedLine));
}
}
// Test log removal
schedulerHelper.removeJob(jobId);
waitUntilAllLogsWereRemoved(jobId, logFiles);
}
use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class TestExecuteScriptsOnBusyNode method testRunningTaskDoesNotImpactScriptExecution.
public void testRunningTaskDoesNotImpactScriptExecution(boolean withSelectionScript) throws Exception {
FileLock fileLock = new FileLock();
Path fileLockPath = fileLock.lock();
String scriptCode = "org.ow2.proactive.scheduler.util.FileLock.waitUntilUnlocked(\"" + fileLockPath.toString().replace("\\", "\\\\") + "\")";
log("Submit script (handled asynchronously by the resource manager)");
List<ScriptResult<Object>> resultsFuture = schedulerHelper.getResourceManager().executeScript(scriptCode, "groovy", TargetType.NODE_URL.name(), Sets.newSet(testNode.getNodeURL()));
log("Submit job");
final JobId jobId = schedulerHelper.submitJob(createNonBlockingJob(withSelectionScript));
// We wait a bit to be sure the job went through the scheduling loop
// if a selection script is set, the task start will be delayed as much as the SelectionManager is busy executing this script
// (and thus cannot execute the selection script provided by the task)
Thread.sleep(3000);
// unlock the script.
log("Unlock the script");
fileLock.unlock();
log("Wait when job finish");
schedulerHelper.waitForEventJobFinished(jobId, TIMEOUT);
Assert.assertEquals(1, resultsFuture.size());
ScriptResult result = resultsFuture.get(0);
if (result.errorOccured()) {
result.getException().printStackTrace();
Assert.fail("Script execution failed");
}
schedulerHelper.waitUntilState(testNode.getNodeURL(), NodeState.FREE, TIMEOUT);
log("Check job result");
checkJobResult(schedulerHelper.getSchedulerInterface(), jobId);
checkActiveObjects();
}
use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class TestExecuteScriptsOnBusyNode method createNonBlockingJob.
private TaskFlowJob createNonBlockingJob(boolean withSelectionScript) throws Exception {
TaskFlowJob job = new TaskFlowJob();
job.setName(this.getClass().getSimpleName() + "_SimpleJob");
job.setOnTaskError(OnTaskError.CANCEL_JOB);
job.setMaxNumberOfExecution(1);
JavaTask javaTask = new JavaTask();
javaTask.setExecutableClassName(TestJavaTask.class.getName());
javaTask.setMaxNumberOfExecution(1);
javaTask.setOnTaskError(OnTaskError.CANCEL_JOB);
javaTask.setName("Test task");
if (withSelectionScript) {
// we want to trigger a selection script execution on the unique node, as this will call node.clean()
javaTask.addSelectionScript(new SelectionScript("selected = true", "groovy", true));
}
job.addTask(javaTask);
return job;
}
use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class TestJobSchedulerHome method pahomeScriptTask.
public void pahomeScriptTask() throws Throwable {
log("Test ProActive Home Script Task...");
String tname = "pahomeScriptTask";
TaskFlowJob job = new TaskFlowJob();
job.setName(this.getClass().getSimpleName() + "_" + tname);
ScriptTask task1 = new ScriptTask();
task1.setName(tname);
Script pahomeScript = new SimpleScript(TestJobSchedulerHome.class.getResource("/functionaltests/scripts/schedulerHome.js"), new String[] { schedulerHomePath });
;
TaskScript ts = new TaskScript(pahomeScript);
task1.setScript(ts);
job.addTask(task1);
submitAndCheckJob(job, tname, false);
}
Aggregations