package org.ourgrid.acceptance.broker; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.easymock.classextension.EasyMock; import org.junit.After; import org.junit.Test; import org.ourgrid.acceptance.util.broker.Req_302_Util; import org.ourgrid.acceptance.util.broker.Req_304_Util; import org.ourgrid.acceptance.util.broker.Req_309_Util; import org.ourgrid.acceptance.util.broker.Req_311_Util; import org.ourgrid.acceptance.util.broker.Req_312_Util; import org.ourgrid.acceptance.util.broker.Req_314_Util; import org.ourgrid.acceptance.util.broker.Req_327_Util; import org.ourgrid.acceptance.util.broker.Req_328_Util; import org.ourgrid.acceptance.util.broker.Req_329_Util; import org.ourgrid.acceptance.util.broker.Req_330_Util; import org.ourgrid.acceptance.util.broker.TestJob; import org.ourgrid.broker.BrokerConfiguration; import org.ourgrid.broker.BrokerServerModule; import org.ourgrid.broker.business.dao.BrokerDAOFactory; import org.ourgrid.broker.business.dao.WorkerEntry; import org.ourgrid.broker.business.scheduler.SchedulerIF; import org.ourgrid.broker.business.scheduler.workqueue.JobInfo; import org.ourgrid.broker.communication.actions.ErrorOcurredMessageHandle; import org.ourgrid.broker.communication.actions.HereIsGridProcessResultMessageHandle; import org.ourgrid.broker.communication.actions.WorkerIsReadyMessageHandle; import org.ourgrid.broker.communication.sender.BrokerResponseControl; import org.ourgrid.common.executor.ExecutorResult; import org.ourgrid.common.interfaces.LocalWorkerProvider; import org.ourgrid.common.interfaces.Worker; import org.ourgrid.common.interfaces.WorkerClient; import org.ourgrid.common.interfaces.control.BrokerControl; import org.ourgrid.common.interfaces.control.BrokerControlClient; import org.ourgrid.common.interfaces.to.GridProcessErrorTypes; import org.ourgrid.common.interfaces.to.GridProcessState; import org.ourgrid.common.internal.IResponseTO; import org.ourgrid.common.job.GridProcess; import org.ourgrid.common.job.Job; import org.ourgrid.common.job.Task; import org.ourgrid.common.specification.OurGridSpecificationConstants; import org.ourgrid.common.specification.job.IOBlock; import org.ourgrid.common.specification.job.IOEntry; import org.ourgrid.common.specification.job.JobSpecification; import org.ourgrid.common.specification.job.TaskSpecification; import org.ourgrid.common.specification.peer.PeerSpecification; import org.ourgrid.common.specification.worker.WorkerSpecification; import org.ourgrid.peer.PeerComponentContextFactory; import org.ourgrid.worker.business.controller.GridProcessError; import br.edu.ufcg.lsd.commune.container.ObjectDeployment; import br.edu.ufcg.lsd.commune.context.PropertiesFileParser; import br.edu.ufcg.lsd.commune.identification.DeploymentID; import br.edu.ufcg.lsd.commune.identification.ServiceID; import br.edu.ufcg.lsd.commune.testinfra.AcceptanceTestUtil; import br.edu.ufcg.lsd.commune.testinfra.util.TestContext; import br.edu.ufcg.lsd.commune.testinfra.util.TestStub; public class TestReplication extends BrokerAcceptanceTestCase { @After public void tearDown() throws Exception { createComponentContext("1", "1"); super.tearDown(); } private String peerUserAtServer = "test@servertest"; @Test public void test_Replicaton_TaskEnded() throws Exception { final String maxReplicas = "2"; TestContext context = createComponentContext(maxReplicas); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 2, 2, false); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); Job job = getJobInfo().getJob(1); //call workerIsReady List<WorkerEntry> taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Worker 1 finalized the execution AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Wating the scheduller Thread.sleep(15000); //call workerIsReady AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); Thread.sleep(5000); job = getJobInfo().getJob(1); assertTrue(getTaskWorkers(1, 2, job, GridProcessState.RUNNING).size() == 2); } @Test public void test_Replicaton_WorkerFailed() throws Exception { final String maxReplicas = "1"; TestContext context = createComponentContext(maxReplicas); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 2, 2, false); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); Job job = getJobInfo().getJob(1); //call workerIsReady - worker 1 List<WorkerEntry> taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); job = getJobInfo().getJob(1); List<WorkerEntry> workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //call workerIsReady - worker 2 taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Worker 1 failed taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.MACHINE_FAILURE))); //Worker 2 finalized the execution taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Wating the scheduller Thread.sleep(20000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); } @Test public void test_Replicaton_ManyWorkers() throws Exception { final String maxReplicas = "2"; TestContext context = createComponentContext(maxReplicas); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); //broker.getDAO(JobDAO.class).setRequestIDGenerator(new SequencialRequestIDGenerator()); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 5, 3, false); TestStub workerTestStub1 = workerStubs.get(0); TestStub workerTestStub2 = workerStubs.get(1); TestStub workerTestStub3 = workerStubs.get(2); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 2 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub2.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 3 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub3.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); Thread.sleep(5000); Job job = getJobInfo().getJob(1); List<WorkerEntry> workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); //Worker of task 2 finalized the execution List<WorkerEntry> taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Wating the scheduller Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); //Worker of task 3 finalized the execution taskWorkers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Wating the scheduller Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //call workerIsReady worker of task 5 taskWorkers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Worker of task 1 failed taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.MACHINE_FAILURE))); //Wating the scheduller Thread.sleep(15000); //Worker of task 5 finalized the execution taskWorkers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Wating the scheduller Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); //call workerIsReady worker of task 1 taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady worker of task 4 taskWorkers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Worker of task 1 finalized the execution taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Worker of task 4 finalized the execution taskWorkers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 1, job, GridProcessState.FINISHED); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.FINISHED); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 3, job, GridProcessState.FINISHED); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 4, job, GridProcessState.FINISHED); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 5, job, GridProcessState.FINISHED); assertTrue(workers.size() == 1); } @Test public void test_Replication_Max_Failed() throws Exception { final String maxReplicas = "1"; final String maxBLFails = "3"; final String maxFails = "1"; TestContext context = createComponentContext(maxReplicas, maxBLFails, maxFails); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); //broker.getDAO(JobDAO.class).setRequestIDGenerator(new SequencialRequestIDGenerator()); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 1, 1, false); TestStub workerTestStub1 = workerStubs.get(0); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); Thread.sleep(5000); Job job = getJobInfo().getJob(1); List<WorkerEntry> workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 1 failed List<WorkerEntry> taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.APPLICATION_ERROR))); //Wating the scheduller Thread.sleep(15000); job = getJobInfo().getJob(1); assertTrue(GridProcessState.FAILED.equals(job.getTasks().get(0).getState())); } @Test public void test_Replicaton_TwoReplicas_With_Failure() throws Exception { final String maxReplicas = "2"; TestContext context = createComponentContext(maxReplicas); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); //broker.getDAO(JobDAO.class).setRequestIDGenerator(new SequencialRequestIDGenerator()); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 3, 2, false); TestStub workerTestStub1 = workerStubs.get(0); TestStub workerTestStub2 = workerStubs.get(1); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 2 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub2.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); Thread.sleep(5000); Job job = getJobInfo().getJob(1); List<WorkerEntry> workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 1 failed List<WorkerEntry> taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.MACHINE_FAILURE))); //Worker of task 2 finalized the execution taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Waiting for the scheduler Thread.sleep(15000); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 1 finalized the execution taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Waiting for the scheduler Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Worker of task 3 finalized the execution taskWorkers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Waiting for the scheduler Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); } @Test public void test_Replicaton_TwoReplicas_With_Failure_OneWorker() throws Exception { final String maxReplicas = "2"; final String maxBLFails = "3"; TestContext context = createComponentContext(maxReplicas, maxBLFails); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); //broker.getDAO(JobDAO.class).setRequestIDGenerator(new SequencialRequestIDGenerator()); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 1, 1, false); TestStub workerTestStub1 = workerStubs.get(0); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); Thread.sleep(5000); Job job = getJobInfo().getJob(1); List<WorkerEntry> workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 1 failed List<WorkerEntry> taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.APPLICATION_ERROR))); //Waiting for the scheduler Thread.sleep(15000); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Waiting for the scheduler Thread.sleep(30000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 1 finalized the execution taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Waiting for the scheduler Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); } @Test public void test_Replicaton_WorkerNo_Exceeds_Max_Replicas() throws Exception { final String maxReplicas = "1"; final String maxBLFails = "3"; TestContext context = createComponentContext(maxReplicas, maxBLFails); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); //broker.getDAO(JobDAO.class).setRequestIDGenerator(new SequencialRequestIDGenerator()); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 1, 5, false); TestStub workerTestStub1 = workerStubs.get(0); TestStub workerTestStub2 = workerStubs.get(1); TestStub workerTestStub3 = workerStubs.get(2); TestStub workerTestStub4 = workerStubs.get(3); TestStub workerTestStub5 = workerStubs.get(4); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 2 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub2.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 3 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub3.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 4 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub4.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 5 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub5.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); Thread.sleep(15000); Job job = getJobInfo().getJob(1); //Worker of task 1 finalized the execution List<WorkerEntry> taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Waiting for the scheduler Thread.sleep(15000); job = getJobInfo().getJob(1); List<WorkerEntry> workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); } @Test public void test_Replicaton_With_Max_BL_Fails() throws Exception { final String maxReplicas = "2"; final String maxFails = "3"; TestContext context = createComponentContext(maxReplicas, maxFails); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); //broker.getDAO(JobDAO.class).setRequestIDGenerator(new SequencialRequestIDGenerator()); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 2, 2, false); TestStub workerTestStub1 = workerStubs.get(0); TestStub workerTestStub2 = workerStubs.get(1); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 2 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub2.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Waiting for the scheduling Thread.sleep(15000); Job job = getJobInfo().getJob(1); List<WorkerEntry> workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 1 failed List<WorkerEntry> taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.IO_ERROR))); //Waiting for the scheduling Thread.sleep(15000); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); Thread.sleep(5000); //Worker of task 1 failed by he second time AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.IO_ERROR))); //Waiting for the scheduling Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Waiting for the scheduling Thread.sleep(15000); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Waiting for the scheduling Thread.sleep(15000); //Worker of task 1 failed by he third time AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.IO_ERROR))); //Waiting for the scheduling Thread.sleep(15000); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); } @Test public void test_Replicaton_One_Worker_OK() throws Exception { final String maxReplicas = "2"; final String maxFails = "3"; TestContext context = createComponentContext(maxReplicas, maxFails); Req_302_Util req_302_Util = new Req_302_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); //start broker BrokerServerModule broker = req_302_Util.startBroker(peerUserAtServer); //broker.getDAO(JobDAO.class).setRequestIDGenerator(new SequencialRequestIDGenerator()); List<TestStub> workerStubs = prepareTestObjetcts(broker, context, 6, 3, false); TestStub workerTestStub1 = workerStubs.get(0); TestStub workerTestStub2 = workerStubs.get(1); TestStub workerTestStub3 = workerStubs.get(2); WorkerClient workerClient = req_314_Util.getWorkerClient(broker); ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); //call workerIsReady - worker 1 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub1.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 2 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub2.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //call workerIsReady - worker 3 AcceptanceTestUtil.setExecutionContext(broker, wcOD, workerTestStub3.getDeploymentID()); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Waiting for the scheduling Thread.sleep(15000); Job job = getJobInfo().getJob(1); List<WorkerEntry> workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 2 failed List<WorkerEntry> taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); WorkerEntry workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.IO_ERROR))); //Worker of task 3 failed taskWorkers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.IO_ERROR))); //Waiting for the scheduler Thread.sleep(15000); //Call worker is ready taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Call worker is ready taskWorkers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 1 finalized the execution taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Waiting for the scheduler Thread.sleep(15000); //Call worker is ready taskWorkers = getTaskWorkers(1, 1, job, GridProcessState.FINISHED); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //Worker of task 4 finalized the execution taskWorkers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //System.out.println(taskWorkers.get(0).getServiceID()); //Worker of task 2 failed taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.IO_ERROR))); //Waiting for the scheduler Thread.sleep(15000); //Call worker is ready taskWorkers = getTaskWorkers(1, 4, job, GridProcessState.FINISHED); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Call worker is ready taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //System.out.println(workers.get(0).getServiceID()); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); //System.out.println(workers.get(0).getServiceID()); //Worker of task 2 finalized the execution taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new HereIsGridProcessResultMessageHandle(new ExecutorResult())); //Worker of task 3 failed taskWorkers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new ErrorOcurredMessageHandle(new GridProcessError(GridProcessErrorTypes.IO_ERROR))); //Waiting for the scheduler Thread.sleep(15000); //Call worker is ready taskWorkers = getTaskWorkers(1, 2, job, GridProcessState.FINISHED); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); //Call worker is ready taskWorkers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); workerEntry = taskWorkers.get(0); AcceptanceTestUtil.setExecutionContext(broker, wcOD, getWorkerID(workerStubs, workerEntry.getServiceID())); workerClient.sendMessage(new WorkerIsReadyMessageHandle()); job = getJobInfo().getJob(1); workers = getTaskWorkers(1, 1, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 2, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 3, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 4, job, GridProcessState.RUNNING); assertTrue(workers.size() == 0); workers = getTaskWorkers(1, 5, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); workers = getTaskWorkers(1, 6, job, GridProcessState.RUNNING); assertTrue(workers.size() == 1); } private DeploymentID getWorkerID(List<TestStub> stubs, ServiceID serviceID) { String login = serviceID.getUserName() + "@" + serviceID.getServerName(); ServiceID workerServiceID = null; for (TestStub testStub : stubs) { workerServiceID = testStub.getDeploymentID().getServiceID(); String workerLogin = workerServiceID.getUserName() + "@" + workerServiceID.getServerName(); if (login.equals(workerLogin)) { return testStub.getDeploymentID(); } } return null; } private List<TestStub> prepareTestObjetcts(BrokerServerModule broker, TestContext context, int tasks, int workers, boolean hasGetFiles) throws Exception { Req_309_Util req_309_Util = new Req_309_Util(context); Req_311_Util req_311_Util = new Req_311_Util(context); Req_327_Util req_327_Util = new Req_327_Util(context); Req_328_Util req_328_Util = new Req_328_Util(context); Req_312_Util req_312_Util = new Req_312_Util(context); Req_329_Util req_329_Util = new Req_329_Util(context); Req_330_Util req_330_Util = new Req_330_Util(context); //call doNotifyRecovery passing a peer with username test DeploymentID deploymentID = req_328_Util.createPeerDeploymentID("publicKey1", getPeerSpec()); TestStub peerTestStub = req_327_Util.notifyPeerRecovery(getPeerSpec(), deploymentID, broker); //do login with peer req_311_Util.verifyLogin(broker, "publickey1", false, false, null, peerTestStub); TestJob testJob = prepareJob(tasks, broker, context, peerTestStub, hasGetFiles); //Receveing workers List<TestStub> workerStubs = new ArrayList<TestStub>(); TestStub workerTestStub = null; WorkerSpecification workerSpec = null; Map<String, String> attributes = null; for (int i = 1; i <= workers; i++) { attributes = new HashMap<String, String>(); attributes.put(OurGridSpecificationConstants.ATT_MEM, "mem = 256"); workerSpec = new WorkerSpecification(attributes); workerSpec.putAttribute(OurGridSpecificationConstants.ATT_USERNAME, "worker" + i); workerSpec.putAttribute(OurGridSpecificationConstants.ATT_SERVERNAME, "ortho.ece.ubc.ca"); workerTestStub = req_312_Util.receiveWorker(broker, "workerPublicKey" + i, true, true, true, true, workerSpec, "publickey1", peerTestStub, testJob); req_330_Util.notifyWorkerRecovery(broker, workerTestStub.getDeploymentID()); workerStubs.add(workerTestStub); } //Scheduling ObjectDeployment wcOD = req_329_Util.getWorkerClientDeployment(broker); EasyMock.reset(broker.getLogger()); for (TestStub testStub : workerStubs) { Worker worker = (Worker) testStub.getObject(); EasyMock.reset(worker); } EasyMock.reset(broker.getLogger()); Set<SchedulerIF> schedulers = BrokerDAOFactory.getInstance().getJobDAO().getSchedulers(); List<IResponseTO> responses = new ArrayList<IResponseTO>(); for (SchedulerIF schedulerIF : schedulers) { schedulerIF.schedule(responses); } ObjectDeployment od = req_329_Util.getBrokerControlDeployment(broker); BrokerResponseControl.getInstance().execute(responses, broker.createServiceManager(od)); return workerStubs; } private TestJob prepareJob(int tasks, BrokerServerModule broker, TestContext context, TestStub peerTestStub, boolean hasGetFiles) throws Exception { Req_304_Util req_304_Util = new Req_304_Util(context); Req_314_Util req_314_Util = new Req_314_Util(context); //Job creation List<TaskSpecification> taskSpecs = new ArrayList<TaskSpecification>(); for (int i = 1; i <= tasks; i++) { TaskSpecification taskSpec = null; if (hasGetFiles) { IOBlock finalBlock = new IOBlock(); finalBlock.putEntry(new IOEntry("GET", "remoteFile1.txt", "localFile1.txt")); finalBlock.putEntry(new IOEntry("GET", "remoteFile2.txt", "localFile2.txt")); taskSpec = new TaskSpecification(null, "echo", finalBlock, "echo"); } else { taskSpec = new TaskSpecification(null, "echo", null, "echo"); } taskSpec.setSourceDirPath(BrokerAcceptanceTestCase.BROKER_TEST_DIR); taskSpecs.add(taskSpec); } JobSpecification jobSpec = new JobSpecification("Test Job", "mem = 256", taskSpecs); BrokerControl brokerControl = req_304_Util.getBrokerControl(broker); ObjectDeployment brokerOD = req_314_Util.getBrokerControlDeployment(broker); BrokerControlClient brokerControlClientMock = EasyMock.createNiceMock(BrokerControlClient.class); DeploymentID clientID = new DeploymentID("bcc2@b/c","d"); AcceptanceTestUtil.publishTestObject(broker, clientID, brokerControlClientMock, BrokerControlClient.class); LocalWorkerProvider lwp = (LocalWorkerProvider) peerTestStub.getObject(); EasyMock.reset(lwp); EasyMock.reset(broker.getLogger()); clientID.setPublicKey(brokerOD.getDeploymentID().getPublicKey()); AcceptanceTestUtil.setExecutionContext(broker, brokerOD, clientID); brokerControl.addJob(brokerControlClientMock, jobSpec); Job job = getJobInfo().getJob(1); return new TestJob(job, jobSpec); } private List<WorkerEntry> getTaskWorkers(int jobID, int taskID, Job job, GridProcessState state) { List<WorkerEntry> taskWorkers = new ArrayList<WorkerEntry>(); for (Task task : job.getTasks()) { if (task.getJobId() == jobID && task.getTaskid() == taskID && task.getState().equals(state)) { for (GridProcess process : task.getGridProcesses()) { if (process.getState().equals(state)) { taskWorkers.add(process.getWorkerEntry()); } } } } return taskWorkers; } protected TestContext createComponentContext(String maxReplicas, String maxBLFails, String maxFails) { TestContext testContext = new TestContext( new PeerComponentContextFactory( new PropertiesFileParser(BrokerAcceptanceTestCase.PROPERTIES_FILENAME )).createContext()); testContext.set(BrokerConfiguration.PROP_MAX_REPLICAS, maxReplicas); testContext.set(BrokerConfiguration.PROP_MAX_BL_FAILS, maxBLFails); testContext.set(BrokerConfiguration.PROP_MAX_FAILS, maxFails); return testContext; } protected TestContext createComponentContext(String maxReplicas) { return createComponentContext(maxReplicas, "1", "3"); } protected TestContext createComponentContext(String maxReplicas, String maxBLFails) { return createComponentContext(maxReplicas, maxBLFails, "3"); } private JobInfo getJobInfo() { return JobInfo.getInstance(); } }