package betsy.bpel.model;
import java.util.Objects;
import pebl.benchmark.test.TestAssertion;
import pebl.benchmark.test.TestCase;
import pebl.benchmark.test.TestStep;
import pebl.benchmark.test.assertions.AssertDeployed;
import pebl.benchmark.test.assertions.AssertNotDeployed;
import pebl.benchmark.test.assertions.AssertXpath;
import pebl.benchmark.test.steps.CheckDeployment;
import pebl.benchmark.test.steps.DelayTesting;
import pebl.benchmark.test.steps.soap.SendSoapMessage;
import pebl.benchmark.test.steps.soap.WsdlService;
public class BPELTestCase extends TestCase {
public BPELTestCase() {
}
public BPELTestCase(String name) {
this.setName(Objects.requireNonNull(name));
}
public BPELTestCase buildPartnerConcurrencySetup() {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(ConcurrencyDetectionCodes.CODE_CONCURRENCY_DETECTION___RESET_COUNTERS));
step.setService(new WsdlService("testPartner"));
step.setOperation(BPELWsdlOperations.SYNC);
return addStep(step);
}
public static String getRequestContent(SendSoapMessage testStep) {
String requestContent;
if (BPELWsdlOperations.SYNC.equals(testStep.getOperation())) {
requestContent = TestMessages.createSyncInputMessage(testStep.getSoapMessage());
} else if (BPELWsdlOperations.ASYNC.equals(testStep.getOperation())) {
requestContent = TestMessages.createAsyncInputMessage(testStep.getSoapMessage());
} else if (testStep.getService().equals(new WsdlService("testPartner"))) {
requestContent = TestMessages.createSyncTestPartnerInputMessage(testStep.getSoapMessage());
} else {
requestContent = TestMessages.createSyncStringInputMessage(testStep.getSoapMessage());
}
return requestContent;
}
public BPELTestCase assertConcurrencyAtPartner() {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(ConcurrencyDetectionCodes.CODE_CONCURRENCY_DETECTION___GET_TOTAL_CONCURRENT_ACCESS));
step.setService(new WsdlService("testPartner"));
step.setOperation(BPELWsdlOperations.SYNC);
AssertXpath assertion = new AssertXpath(
"declare namespace test='http://dsg.wiai.uniba.de/betsy/activities/wsdl/testpartner';//test:testElementSyncResponse > 0",
"true"
);
step.getTestAssertions().add(assertion);
return addStep(step);
}
public BPELTestCase assertNumberOfPartnerCalls(int value) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(ConcurrencyDetectionCodes.CODE_CONCURRENCY_DETECTION___GET_TOTAL_ACCESSES));
step.setService(new WsdlService("testPartner"));
setPartnerOutput(step, String.valueOf(value));
step.setOperation(BPELWsdlOperations.SYNC);
return addStep(step);
}
public BPELTestCase checkDeployment() {
return addStep(new CheckDeployment().addAssertion(new AssertDeployed()));
}
public BPELTestCase checkFailedDeployment() {
return addStep(new CheckDeployment().addAssertion(new AssertNotDeployed()));
}
public BPELTestCase sendAsync(int input) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
step.setService(new WsdlService("testInterface"));
step.setOperation(BPELWsdlOperations.ASYNC);
return addStep(step);
}
public BPELTestCase buildSyncOperationOutputAsLeast(int input, int output) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
step.setService(new WsdlService("testInterface"));
setOutputAsLeast(step, String.valueOf(output));
step.setOperation(BPELWsdlOperations.SYNC);
return addStep(step);
}
public BPELTestCase sendSync(int input) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
step.setService(new WsdlService("testInterface"));
step.setOperation(BPELWsdlOperations.SYNC);
return addStep(step);
}
public BPELTestCase sendSyncString(int input, String output) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
setStringOperationOutput(step, output);
step.setService(new WsdlService("testInterface"));
step.setOperation(BPELWsdlOperations.SYNC_STRING);
return addStep(step);
}
public BPELTestCase sendSyncString(int input) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
step.setService(new WsdlService("testInterface"));
step.setOperation(BPELWsdlOperations.SYNC_STRING);
return addStep(step);
}
public BPELTestCase sendSyncString(int input, TestAssertion assertion) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
step.setOperation(BPELWsdlOperations.SYNC_STRING);
step.setService(new WsdlService("testInterface"));
step.getTestAssertions().add(assertion);
return addStep(step);
}
public BPELTestCase sendSync(int input, int output, TestAssertion assertion) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
setOutput(step, String.valueOf(output));
step.setOperation(BPELWsdlOperations.SYNC);
step.setService(new WsdlService("testInterface"));
step.getTestAssertions().add(assertion);
return addStep(step);
}
public BPELTestCase sendSync(int input, int output) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
setOutput(step, String.valueOf(output));
step.setService(new WsdlService("testInterface"));
step.setOperation(BPELWsdlOperations.SYNC);
return addStep(step);
}
public BPELTestCase waitFor(int timeout) {
DelayTesting step = new DelayTesting();
step.setMilliseconds(timeout);
return addStep(step);
}
public BPELTestCase sendSync(int input, TestAssertion assertion) {
SendSoapMessage step = new SendSoapMessage();
step.setSoapMessage(String.valueOf(input));
step.setOperation(BPELWsdlOperations.SYNC);
step.getTestAssertions().add(assertion);
step.setService(new WsdlService("testInterface"));
return addStep(step);
}
public BPELTestCase addStep(TestStep step) {
if(step instanceof SendSoapMessage) {
final SendSoapMessage sendSoapMessage = (SendSoapMessage) step;
sendSoapMessage.setSoapMessage(getRequestContent(sendSoapMessage));
}
getTestSteps().add(step);
return this;
}
public void setOutput(SendSoapMessage step, String output) {
AssertXpath assertion = new AssertXpath(
"declare namespace test='http://dsg.wiai.uniba.de/betsy/activities/wsdl/testinterface';number(//test:testElementSyncResponse) cast as xs:integer",
output
);
step.getTestAssertions().add(assertion);
}
public void setPartnerOutput(SendSoapMessage step, String output) {
AssertXpath assertion = new AssertXpath(
"declare namespace test='http://dsg.wiai.uniba.de/betsy/activities/wsdl/testpartner';number(//test:testElementSyncResponse) cast as xs:integer",
output
);
step.getTestAssertions().add(assertion);
}
public void setStringOperationOutput(SendSoapMessage step, String output) {
AssertXpath assertion = new AssertXpath(
"declare namespace test='http://dsg.wiai.uniba.de/betsy/activities/wsdl/testinterface';//test:testElementSyncStringResponse",
output
);
step.getTestAssertions().add(assertion);
}
public void setOutputAsLeast(SendSoapMessage step, final String output) {
AssertXpath assertion = new AssertXpath(
"declare namespace test=\'http://dsg.wiai.uniba.de/betsy/activities/wsdl/testinterface\';//test:testElementSyncResponse >= ",
"true"
);
step.getTestAssertions().add(assertion);
}
}