package org.zstack.core.workflow;
import org.zstack.header.exception.CloudRuntimeException;
public class MockAsyncWorkFlowChain extends AsyncWorkFlowChain {
private int exitPosition = -1;
private int rollbackExitPosition = -1;
public MockAsyncWorkFlowChain(String canonicalName) {
super(canonicalName);
}
public void setExitPositionForProcessDone(int pos) {
exitPosition = pos;
}
public void setRollbackExitPosition(int rollbackExitPosition) {
this.rollbackExitPosition = rollbackExitPosition;
}
@Override
protected void processFlow(AsyncWorkFlow flow, WorkFlowContext ctx, WorkFlowVO vo, int position) {
if (position == exitPosition) {
throw new CloudRuntimeException("Stop processing flow on purpose");
} else {
super.processFlow(flow, ctx, vo, position);
}
}
@Override
protected void rollbackFlow(WorkFlowVO vo) {
super.rollbackFlow(vo);
if (vo.getPosition() == rollbackExitPosition) {
throw new CloudRuntimeException("Stop rolling back flow on purpose");
}
}
}