package net.codjo.dataprocess.server.plugin; import net.codjo.agent.AclMessage; import net.codjo.agent.Aid; import net.codjo.dataprocess.common.DataProcessConstants; import net.codjo.dataprocess.common.codec.ExecutionListModelCodec; import net.codjo.dataprocess.common.context.DataProcessContext; import net.codjo.dataprocess.common.context.DataProcessContextCodec; import net.codjo.dataprocess.common.exception.TreatmentException; import net.codjo.dataprocess.common.message.DataProcessJobRequest; import net.codjo.dataprocess.common.model.ExecutionListModel; import net.codjo.dataprocess.common.report.OperationReport; import net.codjo.dataprocess.server.kernel.TreatmentLauncher; import net.codjo.dataprocess.server.plugin.DataProcessJobAgent.DefaultDataProcessLauncherFactory; import net.codjo.sql.server.JdbcServiceUtilMock; import net.codjo.test.common.LogString; import net.codjo.workflow.common.message.JobAudit.Status; import net.codjo.workflow.common.message.JobAudit.Type; import net.codjo.workflow.common.protocol.JobProtocol; import net.codjo.workflow.common.protocol.JobProtocolParticipant; import net.codjo.workflow.server.api.JobAgent.MODE; import net.codjo.workflow.server.api.WorkflowTestCase; import java.sql.Connection; import java.sql.SQLException; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * */ public class DataProcessJobAgentTest extends WorkflowTestCase { private LogString logString = new LogString(); @Test public void test_delegate() throws Exception { story.record() .startAgent("dataprocess-job-agent", new DataProcessJobAgent(new JdbcServiceUtilMock(new LogString()), new DefaultDataProcessLauncherFactory(), new TreatmentLauncherMock(), MODE.DELEGATE)); AclMessage requestMessage = new AclMessage(AclMessage.Performative.REQUEST); requestMessage.setConversationId("conversation-id"); requestMessage.setProtocol(JobProtocol.ID); requestMessage.addReceiver(new Aid("dataprocess-job-agent")); DataProcessJobRequest request = new DataProcessJobRequest(); request.setDataProcessJobType(DataProcessConstants.EXECUTION_LIST_JOB_TYPE); DataProcessContext context = new DataProcessContext(); context.setProperty("periode", "200512"); request.setContext(DataProcessContextCodec.encode(context)); ExecutionListModel listModel = new ExecutionListModel(); listModel.setName("listModel1"); listModel.setFamilyId(1); listModel.setPriority(1); request.setExecutionListModel(new ExecutionListModelCodec().encode(listModel)); request.setRepositoryId("1"); requestMessage.setContentObject(request.toRequest()); story.record().startTester("schedule-leader") .sendMessage(requestMessage) .then() .receiveMessage(containsAudit(Type.PRE, Status.OK)) .then() .receiveMessage(containsAudit(Type.POST, Status.OK)); story.execute(); story.getAgentContainerFixture().waitForAgentDeath("dataprocess-job-agent"); logString.assertContent("proceedTreatmentList(connection, 1, listModel1, {periode=200512})"); } @Before public void before() throws Exception { story.doSetUp(); } @After public void after() throws Exception { story.doTearDown(); } class TreatmentLauncherMock extends TreatmentLauncher { @Override public OperationReport proceedTreatmentList(Connection con, int repositoryId, ExecutionListModel executionListModel, DataProcessContext context, JobProtocolParticipant jobProtocolParticipant) throws TreatmentException, SQLException { logString.call("proceedTreatmentList", "connection", repositoryId, executionListModel.getName(), context); return new OperationReport(); } } }