blob: de65c70539f06833488ae05b306d405f8a583823 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2011 Attensity Europe GmbH and brox IT Solutions GmbH. All rights reserved. This program and the
* accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this
* distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Andreas Schank (Attensity Europe GmbH) - initial implementation
**********************************************************************************************************************/
package org.eclipse.smila.jobmanager.test;
import java.util.Date;
import org.eclipse.smila.datamodel.Any;
import org.eclipse.smila.datamodel.AnyMap;
import org.eclipse.smila.datamodel.DataFactory;
import org.eclipse.smila.datamodel.Record;
import org.eclipse.smila.http.server.util.RequestHandler;
import org.eclipse.smila.jobmanager.DefinitionBase;
import org.eclipse.smila.jobmanager.JobManagerConstants;
import org.eclipse.smila.jobmanager.httphandler.WorkflowHandler;
import org.eclipse.smila.jobmanager.httphandler.WorkflowsHandler;
import org.eclipse.smila.jobmanager.persistence.ConfigNotFoundException;
import org.eclipse.smila.test.DeclarativeServiceTestCase;
/**
* Test cases for the {@link WorkflowHandler} and {@link WorkflowsHandler}.
*/
public class TestWorkflowHandler extends DeclarativeServiceTestCase {
private WorkflowHandler _workflowHandler;
private WorkflowsHandler _workflowsHandler;
/** {@inheritDoc} */
@Override
protected void setUp() throws Exception {
super.setUp();
RequestHandler service = getService(RequestHandler.class, "(uriPattern=/jobmanager/workflows/\\([^/]+\\)/?$)");
assertTrue(service instanceof WorkflowHandler);
_workflowHandler = (WorkflowHandler) service;
service = getService(RequestHandler.class, "(uriPattern=/jobmanager/workflows/?$)");
assertTrue(service instanceof WorkflowsHandler);
_workflowsHandler = (WorkflowsHandler) service;
}
/** {@inheritDoc} */
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* tests adding, getting and deleting a workflow via the request handler.
*
* @throws Exception
*/
public void testAddAndGetAndDeleteWorkflow() throws Exception {
final String workflowBaseUrlPart = _workflowHandler.getRootContextPath() + "/jobmanager/workflows/";
final String workflowName = "triggeredWorkflow2";
final Record workflow = DataFactory.DEFAULT.createRecord();
workflow.getMetadata().put("name", workflowName);
final AnyMap startAction = DataFactory.DEFAULT.createAnyMap();
startAction.put("worker", "triggeredWorker");
final AnyMap input = DataFactory.DEFAULT.createAnyMap();
input.put("input", "finalBucket");
final AnyMap output = DataFactory.DEFAULT.createAnyMap();
output.put("output", "triggeredBucket");
startAction.put("input", input);
startAction.put("output", output);
workflow.getMetadata().put("startAction", startAction);
workflow.getMetadata().put("additionalData", "some additional data.");
// this must be removed when inserted via handler.
workflow.getMetadata().put(DefinitionBase.KEY_READ_ONLY, true);
// create a workflow
final Date startDate = new Date();
final AnyMap result = (AnyMap) _workflowsHandler.process("POST", workflowBaseUrlPart, workflow);
assertEquals(workflow.getMetadata().get("name").toString(), result.get("name").toString());
// get the complete workflow
final Record returnDetails = DataFactory.DEFAULT.createRecord();
returnDetails.getMetadata().put(JobManagerConstants.KEY_RETURN_DETAILS, true);
AnyMap workflowAny =
(AnyMap) _workflowHandler.process("GET", workflowBaseUrlPart + workflowName, returnDetails);
final Date endDate = new Date();
// check the timestamp of the result.
final Date dateFromWorkflow = workflowAny.getDateTimeValue(DefinitionBase.KEY_TIMESTAMP);
assertEquals(result.getDateTimeValue(DefinitionBase.KEY_TIMESTAMP), dateFromWorkflow);
assertTrue(startDate.compareTo(dateFromWorkflow) <= 0);
assertTrue(endDate.compareTo(dateFromWorkflow) >= 0);
// be sure that the readonly flag has been removed from the input any.
assertFalse(workflowAny.containsKey(DefinitionBase.KEY_READ_ONLY));
// we must remove timestamp and readOnly flag for comparison...
final Any timestampAny = workflow.getMetadata().get(JobManagerConstants.TIMESTAMP);
assertEquals(timestampAny.asValue().asDateTime(), dateFromWorkflow);
workflow.getMetadata().remove(DefinitionBase.KEY_TIMESTAMP);
workflow.getMetadata().remove(DefinitionBase.KEY_READ_ONLY);
workflowAny.remove(JobManagerConstants.TIMESTAMP);
assertEquals(workflow.getMetadata(), workflowAny);
// get only the relevant part
workflowAny = (AnyMap) _workflowHandler.process("GET", workflowBaseUrlPart + workflowName, null);
final AnyMap reducedAny = DataFactory.DEFAULT.cloneAnyMap(workflow.getMetadata());
reducedAny.remove("additionalData");
// re-set the timestamp to be able to check it (we removed it above)
reducedAny.put(DefinitionBase.KEY_TIMESTAMP, timestampAny);
assertEquals(reducedAny, workflowAny);
// remove the workflow
_workflowHandler.process("DELETE", workflowBaseUrlPart + workflowName, null);
// check if it really got removed...
try {
_workflowHandler.process("GET", workflowBaseUrlPart + workflowName, null);
fail("ConfigNotFoundException expected.");
} catch (final ConfigNotFoundException e) {
;// ignore
}
}
}