package io.parallec.core.actor;
import io.parallec.core.ParallelClient;
import io.parallec.core.ParallelTask;
import io.parallec.core.TestBase;
import io.parallec.core.actor.message.InitialRequestToManager;
import io.parallec.core.actor.message.type.ExecutionManagerMsgType;
import io.parallec.core.bean.HttpMeta;
import io.parallec.core.bean.TargetHostMeta;
import io.parallec.core.commander.workflow.InternalDataProvider;
import io.parallec.core.resources.HttpMethod;
import io.parallec.core.util.PcStringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import scala.concurrent.Await;
import scala.concurrent.Future;
import scala.concurrent.duration.Duration;
import scala.concurrent.duration.FiniteDuration;
import akka.actor.ActorRef;
import akka.actor.Props;
import akka.pattern.Patterns;
import akka.util.Timeout;
public class ExecutionManagerTest extends TestBase {
private static ParallelClient pc;
@BeforeClass
public static void setUp() throws Exception {
pc = new ParallelClient();
}
@AfterClass
public static void shutdown() throws Exception {
pc.releaseExternalResources();
}
public static ParallelTask genParallelTask() {
ParallelTask task = new ParallelTask();
List<String> list = new ArrayList<String>();
list.add("restcommander.com");
list.add("www.restcommander.com");
task.setTargetHostMeta(new TargetHostMeta(list));
task.setHttpMeta(new HttpMeta());
// task.getCommandMeta().setDefaultUnusedValue();
task.getHttpMeta().setHttpMethod(HttpMethod.GET);
task.getHttpMeta().setRequestUrlPostfix("/validateInternals.html");
task.validateWithFillDefault();
task.setTaskId(task.generateTaskId());
return task;
}
@Test
public void testHttpWorkerNormalCheckCancel() {
ActorRef executionManager = null;
try {
// Start new job
ParallelTask task = genParallelTask();
InternalDataProvider adp = InternalDataProvider.getInstance();
adp.genNodeDataMap(task);
executionManager = ActorConfig.createAndGetActorSystem().actorOf(
Props.create(ExecutionManager.class, task),
"executionManager-" + task.getTaskId());
final FiniteDuration duration = Duration.create(20,
TimeUnit.SECONDS);
Future<Object> future = Patterns.ask(executionManager,
new InitialRequestToManager(task), new Timeout(duration));
executionManager.tell(ExecutionManagerMsgType.CANCEL, executionManager);
Await.result(future, duration);
logger.info("\nWorker response header:"
+ PcStringUtils.renderJson(task.getParallelTaskResult()));
// logger.info("\nWorker response:" +
// PcStringUtils.renderJson(task));
} catch (Exception ex) {
logger.error("Exception in testHttpWorkerNormalCheckCancel : " + ex);
}
}// end func
@Test
public void testHttpWorkerNormalCheckTimeout() {
ActorRef executionManager = null;
try {
// Start new job
ParallelTask task = genParallelTask();
InternalDataProvider adp = InternalDataProvider.getInstance();
adp.genNodeDataMap(task);
executionManager = ActorConfig.createAndGetActorSystem().actorOf(
Props.create(ExecutionManager.class, task),
"ExecutionManager-" + task.getTaskId());
final FiniteDuration duration = Duration.create(20,
TimeUnit.SECONDS);
Future<Object> future = Patterns.ask(executionManager,
new InitialRequestToManager(task), new Timeout(duration));
executionManager.tell(ExecutionManagerMsgType.OPERATION_TIMEOUT,
executionManager);
Await.result(future, duration);
logger.info("\nWorker response header:"
+ PcStringUtils.renderJson(task.getParallelTaskResult()));
// logger.info("\nWorker response:" +
// PcStringUtils.renderJson(task));
} catch (Throwable ex) {
logger.error("Exception in testHttpWorkerNormalCheckTimeout : "
+ ex);
}
}// end func
@Test
public void testBadMsg() {
ActorRef executionManager = null;
try {
// Start new job
ParallelTask task = genParallelTask();
InternalDataProvider adp = InternalDataProvider.getInstance();
adp.genNodeDataMap(task);
executionManager = ActorConfig.createAndGetActorSystem().actorOf(
Props.create(ExecutionManager.class, task),
"ExecutionManager-" + task.getTaskId());
executionManager.tell("bad request", executionManager);
} catch (Exception ex) {
logger.error("Exception in testBadMsg : " + ex);
}
}// end func
@Test
public void testException() {
ActorRef executionManager = null;
try {
// Start new job
ParallelTask task = genParallelTask();
InternalDataProvider adp = InternalDataProvider.getInstance();
adp.genNodeDataMap(task);
// fake bad attribute
task.setTaskId(null);
executionManager = ActorConfig.createAndGetActorSystem().actorOf(
Props.create(ExecutionManager.class, task),
"executionManager-" + task.getTaskId());
final FiniteDuration duration = Duration.create(20,
TimeUnit.SECONDS);
// set task as null
Future<Object> future = Patterns.ask(executionManager,
new InitialRequestToManager(task), new Timeout(duration));
Await.result(future, duration);
logger.info("\nWorker response header:"
+ PcStringUtils.renderJson(task.getParallelTaskResult()));
} catch (Exception ex) {
logger.error("Exception in testBadMsg : " + ex);
}
}// end func
}