package net.codjo.dataprocess.server.kernel;
import net.codjo.agent.AclMessage;
import net.codjo.agent.AgentMock;
import net.codjo.agent.Aid;
import net.codjo.database.common.api.DatabaseFactory;
import net.codjo.database.common.api.JdbcFixture;
import net.codjo.dataprocess.common.DataProcessConstants;
import net.codjo.dataprocess.common.exception.TreatmentException;
import net.codjo.dataprocess.common.model.ArgList;
import net.codjo.dataprocess.common.model.ArgModel;
import net.codjo.dataprocess.common.model.ExecutionListModel;
import net.codjo.dataprocess.common.model.TreatmentModel;
import net.codjo.workflow.common.message.JobAudit;
import net.codjo.workflow.common.message.JobRequest;
import net.codjo.workflow.common.protocol.JobProtocol;
import net.codjo.workflow.common.protocol.JobProtocolParticipant;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static net.codjo.test.common.matcher.JUnitMatchers.*;
/**
*
*/
public class TreatmentResultSenderTest {
private AgentMock participantAgentMock;
private JobProtocolParticipant jobProtocolParticipant;
private JdbcFixture jdbc;
@Before
public void before() throws Exception {
jdbc = new DatabaseFactory().createJdbcFixture();
jdbc.doSetUp();
participantAgentMock = new AgentMock();
participantAgentMock.mockGetAID(new Aid("participantAgentMock"));
jobProtocolParticipant = new JobProtocolParticipant() {
};
jobProtocolParticipant.setAgent(participantAgentMock);
}
@After
public void after() {
jdbc.doTearDown();
}
@Test
public void sendMessage() throws Exception {
AclMessage request = createRequest("requestId");
jobProtocolParticipant.setRequestMessage(request);
TreatmentResultSender sender = new TreatmentResultSender(jobProtocolParticipant);
AbstractTreatment treatment = createTreatment();
sender.sendMessage(treatment.getTreatmentModel(), new SQLException("mon erreur"));
JobAudit jobAuditMessage = sender.getJobAuditMessage();
assertThat(request.getConversationId(), equalTo(jobAuditMessage.getRequestId()));
AclMessage sentMessage = participantAgentMock.getLastSentMessage();
assertThat(request.getConversationId(), equalTo(sentMessage.getConversationId()));
assertThat(request.getProtocol(), equalTo(sentMessage.getProtocol()));
assertThat(AclMessage.Performative.INFORM, equalTo(sentMessage.getPerformative()));
assertThat(jobAuditMessage.getType(), equalTo(((JobAudit)sentMessage.getContentObject()).getType()));
assertThat(jobAuditMessage.getType(), equalTo(JobAudit.Type.MID));
String encode = jobAuditMessage.getArguments().encode();
assertThat(encode.contains("targetGuiClassName="), equalTo(true));
assertThat(encode.contains("treatmentId=traitement 1"), equalTo(true));
assertThat(encode.contains("status=ERROR"), equalTo(true));
assertThat(encode.contains("targetGuiClassParameters="), equalTo(true));
assertThat(encode.contains("error=mon erreur"), equalTo(true));
}
@Test
public void sendInformationMessage() throws Exception {
AclMessage request = createRequest("requestId");
jobProtocolParticipant.setRequestMessage(request);
TreatmentResultSender sender = new TreatmentResultSender(jobProtocolParticipant);
AbstractTreatment treatment = createTreatment();
sender.sendInformationMessage(treatment.getTreatmentModel(), "Mon message");
JobAudit jobAuditMessage = sender.getJobAuditMessage();
assertThat(request.getConversationId(), equalTo(jobAuditMessage.getRequestId()));
AclMessage sentMessage = participantAgentMock.getLastSentMessage();
assertThat(request.getConversationId(), equalTo(sentMessage.getConversationId()));
assertThat(request.getProtocol(), equalTo(sentMessage.getProtocol()));
assertThat(AclMessage.Performative.INFORM, equalTo(sentMessage.getPerformative()));
assertThat(jobAuditMessage.getType(), equalTo(((JobAudit)sentMessage.getContentObject()).getType()));
assertThat(jobAuditMessage.getType(), equalTo(JobAudit.Type.MID));
String encode = jobAuditMessage.getArguments().encode();
assertThat(encode.contains("info=Mon message"), equalTo(true));
assertThat(encode.contains("targetGuiClassName="), equalTo(true));
assertThat(encode.contains("treatmentId=traitement 1"), equalTo(true));
assertThat(encode.contains("status=INFO"), equalTo(true));
assertThat(encode.contains("targetGuiClassParameters="), equalTo(true));
}
@Test
public void createMessage() throws Exception {
TreatmentResultSender sender = new TreatmentResultSender(jobProtocolParticipant);
AbstractTreatment treatment = createTreatment();
JobAudit jobAudit = sender.createMessage(treatment.getTreatmentModel(), null, "");
String encode = jobAudit.getArguments().encode();
assertThat(encode.contains("info="), equalTo(true));
assertThat(encode.contains("targetGuiClassName="), equalTo(true));
assertThat(encode.contains("treatmentId=traitement 1"), equalTo(true));
assertThat(encode.contains("status=INFO"), equalTo(true));
assertThat(encode.contains("targetGuiClassParameters="), equalTo(true));
assertThat(encode.contains("error="), equalTo(true));
jobAudit = sender.createMessage(treatment.getTreatmentModel(), new SQLException("mon erreur"),
"mon message");
String encode1 = jobAudit.getArguments().encode();
assertThat(encode1.contains("targetGuiClassName="), equalTo(true));
assertThat(encode1.contains("treatmentId=traitement 1"), equalTo(true));
assertThat(encode1.contains("status=ERROR"), equalTo(true));
assertThat(encode1.contains("targetGuiClassParameters="), equalTo(true));
assertThat(encode1.contains("error=mon erreur"), equalTo(true));
jobAudit = sender.createMessage(treatment.getTreatmentModel(), null, "mon message");
String encode2 = jobAudit.getArguments().encode();
assertThat(encode2.contains("info=mon message"), equalTo(true));
assertThat(encode2.contains("targetGuiClassName="), equalTo(true));
assertThat(encode2.contains("treatmentId=traitement 1"), equalTo(true));
assertThat(encode2.contains("status=INFO"), equalTo(true));
assertThat(encode2.contains("targetGuiClassParameters="), equalTo(true));
assertThat(encode2.contains("error="), equalTo(true));
sender = new TreatmentResultSender(null);
sender.sendInformationMessage(treatment.getTreatmentModel(), "mon message");
}
private static ArgList buildArgsForQuery() {
ArgList argList = new ArgList();
List<ArgModel> list = new ArrayList<ArgModel>();
list.add(new ArgModel("CODE_PORTEFEUILLE", "$portfolioCode$", 1, Types.VARCHAR));
list.add(new ArgModel("QUANTITE", "0.12345", 2, Types.NUMERIC));
list.add(new ArgModel("CODE", "$code$", 3, Types.NUMERIC));
argList.setArgs(list);
return argList;
}
private AbstractTreatment createTreatment() throws TreatmentException {
Connection con = jdbc.getConnection();
TreatmentModel treatmentModel = new TreatmentModel();
treatmentModel.setId("traitement 1");
treatmentModel.setType(DataProcessConstants.SQL_QUERY_TYPE);
ArgList argList = buildArgsForQuery();
treatmentModel.setArguments(argList);
ExecutionListModel executionListModel = new ExecutionListModel();
return TreatmentFactory.buildTreatment(con, treatmentModel, 1, executionListModel);
}
private static AclMessage createRequest(String conversationId) {
AclMessage request = new AclMessage(AclMessage.Performative.REQUEST);
request.setConversationId(conversationId);
request.setProtocol(JobProtocol.ID);
JobRequest jobRequest = new JobRequest();
jobRequest.setType("data-process");
jobRequest.setId(conversationId);
request.setContentObject(jobRequest);
return request;
}
}