Unit tests for the action tracking service javascript interface (ALF-4505)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@22183 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Nick Burch
2010-09-02 13:48:37 +00:00
parent edc7e96e6b
commit d9748ebdf0
4 changed files with 158 additions and 6 deletions

View File

@@ -22,6 +22,8 @@ import static org.alfresco.repo.action.ActionServiceImplTest.assertBefore;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.transaction.UserTransaction; import javax.transaction.UserTransaction;
@@ -33,6 +35,7 @@ import org.alfresco.repo.action.ActionServiceImplTest.SleepActionExecuter;
import org.alfresco.repo.action.executer.MoveActionExecuter; import org.alfresco.repo.action.executer.MoveActionExecuter;
import org.alfresco.repo.cache.EhCacheAdapter; import org.alfresco.repo.cache.EhCacheAdapter;
import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.jscript.ClasspathScriptLocation;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionService; import org.alfresco.service.cmr.action.ActionService;
@@ -43,6 +46,8 @@ import org.alfresco.service.cmr.action.ExecutionSummary;
import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.ScriptLocation;
import org.alfresco.service.cmr.repository.ScriptService;
import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService; import org.alfresco.service.transaction.TransactionService;
@@ -67,6 +72,7 @@ public class ActionTrackingServiceImplTest extends TestCase
private NodeRef folder; private NodeRef folder;
private NodeService nodeService; private NodeService nodeService;
private ActionService actionService; private ActionService actionService;
private ScriptService scriptService;
private TransactionService transactionService; private TransactionService transactionService;
private RuntimeActionService runtimeActionService; private RuntimeActionService runtimeActionService;
private ActionTrackingService actionTrackingService; private ActionTrackingService actionTrackingService;
@@ -76,6 +82,7 @@ public class ActionTrackingServiceImplTest extends TestCase
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
protected void setUp() throws Exception { protected void setUp() throws Exception {
this.nodeService = (NodeService)ctx.getBean("nodeService"); this.nodeService = (NodeService)ctx.getBean("nodeService");
this.scriptService = (ScriptService)ctx.getBean("scriptService");
this.actionService = (ActionService)ctx.getBean("actionService"); this.actionService = (ActionService)ctx.getBean("actionService");
this.runtimeActionService = (RuntimeActionService)ctx.getBean("actionService"); this.runtimeActionService = (RuntimeActionService)ctx.getBean("actionService");
this.actionTrackingService = (ActionTrackingService)ctx.getBean("actionTrackingService"); this.actionTrackingService = (ActionTrackingService)ctx.getBean("actionTrackingService");
@@ -1074,6 +1081,52 @@ public class ActionTrackingServiceImplTest extends TestCase
assertEquals(ActionStatus.Failed, action.getExecutionStatus()); assertEquals(ActionStatus.Failed, action.getExecutionStatus());
} }
public void testJavascriptAPI() throws Exception
{
// We need a background action to sleep for long enough for
// it still to be running when the JS fires off
final SleepActionExecuter sleepActionExec =
(SleepActionExecuter)ctx.getBean(SleepActionExecuter.NAME);
sleepActionExec.setSleepMs(2000);
ActionImpl sleepAction;
ActionImpl action;
// Create three test actions:
((ActionTrackingServiceImpl)actionTrackingService).resetNextExecutionId();
// Sleep one that will still be running
UserTransaction txn = transactionService.getUserTransaction();
txn.begin();
sleepAction = (ActionImpl)createWorkingSleepAction(null);
sleepAction.setNodeRef(nodeRef); // This isn't true!
this.actionService.executeAction(sleepAction, null, false, true);
txn.commit();
// Move one that will appear to be "running"
action = (ActionImpl)createFailingMoveAction();
actionTrackingService.recordActionExecuting(action);
// Finally one that has "failed"
// (Shouldn't show up in any lists)
txn = transactionService.getUserTransaction();
txn.begin();
action = (ActionImpl)createWorkingSleepAction(null);
action.setExecutionStartDate(new Date(1234));
action.setExecutionEndDate(new Date(54321));
action.setExecutionStatus(ActionStatus.Failed);
this.actionService.saveAction(this.nodeRef, action);
txn.commit();
// Call the test
Map<String, Object> model = new HashMap<String, Object>();
model.put("NodeRef", nodeRef.toString());
model.put("SleepAction", sleepAction);
ScriptLocation location = new ClasspathScriptLocation("org/alfresco/repo/action/script/test_actionTrackingService.js");
this.scriptService.executeScript(location, model);
}
// =================================================================== // // =================================================================== //

View File

@@ -113,7 +113,7 @@ public class ScriptActionTrackingService extends BaseScopableProcessorExtension
ExecutionDetails detail = actionTrackingService.getExecutionDetails(summary); ExecutionDetails detail = actionTrackingService.getExecutionDetails(summary);
if(detail != null) if(detail != null)
{ {
details.add( new ScriptExecutionDetails(detail) ); details.add( new ScriptExecutionDetails(detail, serviceRegistry) );
} }
} }

View File

@@ -22,9 +22,10 @@ import java.io.Serializable;
import java.util.Date; import java.util.Date;
import org.alfresco.repo.jscript.Scopeable; import org.alfresco.repo.jscript.Scopeable;
import org.alfresco.repo.jscript.ScriptNode;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.action.ExecutionDetails; import org.alfresco.service.cmr.action.ExecutionDetails;
import org.alfresco.service.cmr.action.ExecutionSummary; import org.alfresco.service.cmr.action.ExecutionSummary;
import org.alfresco.service.cmr.repository.NodeRef;
import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.Scriptable;
/** /**
@@ -44,9 +45,13 @@ public final class ScriptExecutionDetails implements Serializable, Scopeable
/** The details we wrap */ /** The details we wrap */
private ExecutionDetails details; private ExecutionDetails details;
public ScriptExecutionDetails(ExecutionDetails details) /** Services, used when building Script objects */
private ServiceRegistry services;
public ScriptExecutionDetails(ExecutionDetails details, ServiceRegistry services)
{ {
this.details = details; this.details = details;
this.services = services;
} }
protected ExecutionDetails getExecutionDetails() protected ExecutionDetails getExecutionDetails()
@@ -67,8 +72,8 @@ public final class ScriptExecutionDetails implements Serializable, Scopeable
return details.getExecutionInstance(); return details.getExecutionInstance();
} }
public NodeRef getPersistedActionRef() { public ScriptNode getPersistedActionRef() {
return details.getPersistedActionRef(); return new ScriptNode(details.getPersistedActionRef(), services);
} }
public String getRunningOn() { public String getRunningOn() {

View File

@@ -0,0 +1,94 @@
var sleepActionType = "sleep-action";
var moveActionType = "move";
// Checks the details of one action
function testExecutionDetails()
{
var definitions = actionTrackingService.getExecutingActions(sleepActionType);
test.assertEquals(1, definitions.length);
var definition = definitions[0];
test.assertEquals(sleepActionType, definition.actionType);
test.assertEquals(1, definition.executionInstance);
test.assertEquals(NodeRef, definition.persistedActionRef.nodeRef.toString());
test.assertEquals(false, definition.cancelRequested);
}
// Checks that we can list different actions
function testGetAllExecuting()
{
var definitions;
definitions = actionTrackingService.getAllExecutingActions();
test.assertEquals(2, definitions.length);
// Check for the two, but be aware that
// we don't know what order they'll be in
var foundSleep = false;
var foundMove = false;
for(var i in definitions)
{
var definition = definitions[i];
if(definition.actionType == sleepActionType)
{
foundSleep = true;
}
if(definition.actionType == moveActionType)
{
foundMove = true;
}
}
test.assertEquals(true, foundSleep);
test.assertEquals(true, foundMove);
}
// Test we can fetch by type
function testGetOfType()
{
var definitions;
// By name
definitions = actionTrackingService.getExecutingActions(sleepActionType);
test.assertEquals(1, definitions.length);
test.assertEquals(sleepActionType, definitions[0].actionType);
definitions = actionTrackingService.getExecutingActions(moveActionType);
test.assertEquals(1, definitions.length);
test.assertEquals(moveActionType, definitions[0].actionType);
definitions = actionTrackingService.getExecutingActions("MADE UP");
test.assertEquals(0, definitions.length);
// By action
definitions = actionTrackingService.getExecutingActions(SleepAction);
test.assertEquals(1, definitions.length);
test.assertEquals(sleepActionType, definitions[0].actionType);
}
// Test the we can request the cancellation
function testCancel()
{
// Check
var definitions = actionTrackingService.getExecutingActions(sleepActionType);
test.assertEquals(1, definitions.length);
var definition = definitions[0];
test.assertEquals(false, definition.cancelRequested);
// Cancel
actionTrackingService.requestActionCancellation(definition);
// Ensure it worked
definitions = actionTrackingService.getExecutingActions(sleepActionType);
test.assertEquals(1, definitions.length);
definition = definitions[0];
test.assertEquals(true, definition.cancelRequested);
}
// Execute Tests
testExecutionDetails();
testGetAllExecuting();
testGetOfType();
testCancel();