package org.jbpm.command;
import org.jbpm.JbpmException;
import org.jbpm.db.AbstractDbTestCase;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
/**
* Tests for {@link Command}s working on {@link Token}
*
* @author bernd.ruecker@camunda.com
*/
public class TokenCommandTest extends AbstractDbTestCase {
public void testUnlockTokenCommand() throws Exception {
String xml = "<process-definition name='TestException'>"
+ " <start-state name='start'>"
+ " <transition to='wait' />"
+ " </start-state>"
+ " <state name='wait'>"
+ " <transition to='end' />"
+ " </state>"
+ " <end-state name='end' />"
+ "</process-definition>";
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(xml);
deployProcessDefinition(processDefinition);
ProcessInstance processInstance = jbpmContext.newProcessInstance("TestException");
long tokenId = processInstance.getRootToken().getId();
processInstance.getRootToken().signal();
processInstance.getRootToken().lock("TEST-OWNER");
processInstance = saveAndReload(processInstance);
try {
processInstance.getRootToken().signal();
fail("TOKEN IS LOCKED exception expected");
}
catch (JbpmException ex) {
// token is locked
assert ex.getMessage().indexOf("locked") != -1 : ex.getMessage();
}
// unlocking without owner is a force unlock -> works
new UnlockTokenCommand().tokenId(tokenId).execute(jbpmContext);
// unlock with same owner
processInstance = saveAndReload(processInstance);
processInstance.getRootToken().lock("TEST-OWNER");
processInstance = saveAndReload(processInstance);
new UnlockTokenCommand().lockOwner("TEST-OWNER")
.tokenId(tokenId)
.execute(jbpmContext);
// unlocking with wrong owner fails
processInstance = saveAndReload(processInstance);
processInstance.getRootToken().lock("TEST-OWNER");
processInstance = saveAndReload(processInstance);
try {
new UnlockTokenCommand().lockOwner("OTHER-OWNER")
.tokenId(tokenId)
.execute(jbpmContext);
fail("CANNOT UNLOCK TOKEN exception expected");
}
catch (JbpmException ex) {
// token is locked
assert ex.getMessage().indexOf("cannot unlock") != -1 : ex.getMessage();
}
}
}