blob: e31665569cc5bb4c53f2e8b88dc470946a4eb714 [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: Juergen Schumacher, Andreas Weber, Drazen Cindric, Andreas Schank (all Attensity Europe GmbH) - initial
* implementation
**********************************************************************************************************************/
package org.eclipse.smila.jobmanager.test;
import junit.framework.TestCase;
import org.eclipse.smila.datamodel.Any;
import org.eclipse.smila.datamodel.AnyMap;
import org.eclipse.smila.datamodel.AnySeq;
import org.eclipse.smila.jobmanager.InvalidConfigException;
import org.eclipse.smila.jobmanager.WorkflowDefinition;
import org.eclipse.smila.jobmanager.internal.AccessAny;
/**
* Tests for validation in job parsing.
*
*/
public class TestWorkflowDefinition extends TestCase {
/**
* Tests workflow with missing name. Must fail.
*
* @throws Exception
* Any exception that happens.
*/
public void testMissingName() throws Exception {
final AnyMap workflowAny = AccessAny.FACTORY.createAnyMap();
workflowAny.put("workflow-name", "job");
final AnyMap parametersAny = AccessAny.FACTORY.createAnyMap();
parametersAny.put("indexName", "index");
workflowAny.put("parameters", parametersAny);
final AnyMap startActionAny = AccessAny.FACTORY.createAnyMap();
startActionAny.put("worker", "input-worker");
final AnyMap inputParametersAny = AccessAny.FACTORY.createAnyMap();
inputParametersAny.put("index", "${indexName}");
startActionAny.put("parameters", inputParametersAny);
final AnyMap outputAny = AccessAny.FACTORY.createAnyMap();
outputAny.put("output", "insertBucket");
startActionAny.put("output", outputAny);
workflowAny.put("startAction", startActionAny);
try {
new WorkflowDefinition(workflowAny);
fail("should not work");
} catch (final Exception ex) {
assertTrue("wrong exception caught: " + ex.toString(), ex instanceof InvalidConfigException);
}
}
/**
* Tests workflow with missing startAction.
*
* @throws Exception
* Exception while trying to access jobmanager or creating objects.
*/
public void testMissingStartAction() throws Exception {
/*
* { "name": "testMissingStartAction", "actions": [ { "worker": "input-worker", "parameters": { "index":
* "${indexName}" }, "output": { "output": "insertBucket", "deletedRecords": "indexDeletesBucket" } } ] }
*/
final AnyMap workflowAny = AccessAny.FACTORY.createAnyMap();
workflowAny.put("name", "testMissingStartAction");
final AnySeq actionsListAny = AccessAny.FACTORY.createAnySeq();
final AnyMap actionAny = AccessAny.FACTORY.createAnyMap();
actionAny.put("worker", "input-worker");
final AnyMap parametersAny = AccessAny.FACTORY.createAnyMap();
parametersAny.put("index", "index");
actionAny.put("parameters", parametersAny);
final AnyMap outputAny = AccessAny.FACTORY.createAnyMap();
outputAny.put("output", "insertBucket");
actionAny.put("output", outputAny);
actionsListAny.add(actionAny);
workflowAny.put("actions", actionsListAny);
try {
new WorkflowDefinition(workflowAny);
fail("should fail.");
} catch (final Exception ex) {
assertTrue("Wrong exception caught: " + ex, ex instanceof InvalidConfigException);
}
}
/**
* Tests missing worker name in startAction.
*
* @throws Exception
* Exception when converting to or from Any.
*/
public void testMissingWorkerNameInStartAction() throws Exception {
final AnyMap workflowAny = AccessAny.FACTORY.createAnyMap();
workflowAny.put("name", "testMissingWorkerNameInStartAction");
final AnyMap parametersAny = AccessAny.FACTORY.createAnyMap();
parametersAny.put("indexName", "index");
workflowAny.put("parameters", parametersAny);
final AnyMap startActionAny = AccessAny.FACTORY.createAnyMap();
final AnyMap inputParametersAny = AccessAny.FACTORY.createAnyMap();
inputParametersAny.put("index", "${indexName}");
startActionAny.put("parameters", inputParametersAny);
final AnyMap outputAny = AccessAny.FACTORY.createAnyMap();
outputAny.put("output", "transBucket");
startActionAny.put("output", outputAny);
workflowAny.put("startAction", startActionAny);
final AnySeq actionsAny = AccessAny.FACTORY.createAnySeq();
// intermediate worker
final AnyMap intermediateActionAny = AccessAny.FACTORY.createAnyMap();
intermediateActionAny.put("worker", "intermediate-worker");
final AnyMap intermediateInputAny = AccessAny.FACTORY.createAnyMap();
intermediateInputAny.put("input", "transBucket");
intermediateActionAny.put("input", intermediateInputAny);
final AnyMap intermediateOutputAny = AccessAny.FACTORY.createAnyMap();
intermediateOutputAny.put("output", "processedBucket");
intermediateActionAny.put("output", intermediateOutputAny);
actionsAny.add(intermediateActionAny);
// final worker
final AnyMap finalActionAny = AccessAny.FACTORY.createAnyMap();
finalActionAny.put("worker", "final-worker");
final AnyMap finalInputAny = AccessAny.FACTORY.createAnyMap();
finalInputAny.put("input", "processedBucket");
finalActionAny.put("input", finalInputAny);
final AnyMap finalOutputAny = AccessAny.FACTORY.createAnyMap();
finalOutputAny.put("output", "finalBucket");
finalActionAny.put("output", finalOutputAny);
actionsAny.add(finalActionAny);
workflowAny.put("actions", actionsAny);
try {
new WorkflowDefinition(workflowAny);
fail("missing worker in startAction should prevent the WorkflowDefinition from being constructed.");
} catch (final Exception e) {
assertTrue("wrong exception caught: " + e.toString(), e instanceof InvalidConfigException);
}
}
/**
* Tests missing worker name in actions.
*
* @throws Exception
* Exception when converting to or from Any.
*/
public void testMissingWorkerNameInActions() throws Exception {
final AnyMap workflowAny = AccessAny.FACTORY.createAnyMap();
workflowAny.put("name", "testMissingWorkerNameInActions");
final AnyMap parametersAny = AccessAny.FACTORY.createAnyMap();
parametersAny.put("indexName", "index");
workflowAny.put("parameters", parametersAny);
final AnyMap startActionAny = AccessAny.FACTORY.createAnyMap();
startActionAny.put("worker", "input-worker");
final AnyMap inputParametersAny = AccessAny.FACTORY.createAnyMap();
inputParametersAny.put("index", "${indexName}");
startActionAny.put("parameters", inputParametersAny);
final AnyMap outputAny = AccessAny.FACTORY.createAnyMap();
outputAny.put("output", "transBucket");
startActionAny.put("output", outputAny);
workflowAny.put("startAction", startActionAny);
final AnySeq actionsAny = AccessAny.FACTORY.createAnySeq();
// intermediate worker
final AnyMap intermediateActionAny = AccessAny.FACTORY.createAnyMap();
intermediateActionAny.put("worker", "intermediate-worker");
final AnyMap intermediateInputAny = AccessAny.FACTORY.createAnyMap();
intermediateInputAny.put("input", "transBucket");
intermediateActionAny.put("input", intermediateInputAny);
final AnyMap intermediateOutputAny = AccessAny.FACTORY.createAnyMap();
intermediateOutputAny.put("output", "processedBucket");
intermediateActionAny.put("output", intermediateOutputAny);
actionsAny.add(intermediateActionAny);
// final worker
final AnyMap finalActionAny = AccessAny.FACTORY.createAnyMap();
// this one is missing: finalActionAny.put("worker", "final-worker");
final AnyMap finalInputAny = AccessAny.FACTORY.createAnyMap();
finalInputAny.put("input", "processedBucket");
finalActionAny.put("input", finalInputAny);
final AnyMap finalOutputAny = AccessAny.FACTORY.createAnyMap();
finalOutputAny.put("output", "finalBucket");
finalActionAny.put("output", finalOutputAny);
actionsAny.add(finalActionAny);
workflowAny.put("actions", actionsAny);
try {
new WorkflowDefinition(workflowAny);
fail("missing worker in actions section should prevent the WorkflowDefinition from being constructed.");
} catch (final Exception e) {
assertTrue("wrong exception caught: " + e.toString(), e instanceof InvalidConfigException);
}
}
/**
* Tests working workflow.
*
* @throws Exception
* Exception while trying to access jobmanager or creating objects.
*/
public void testWorkingDefinition() throws Exception {
final AnyMap workflowAny = AccessAny.FACTORY.createAnyMap();
workflowAny.put("name", "testWorkingDefinition");
final AnyMap parametersAny = AccessAny.FACTORY.createAnyMap();
parametersAny.put("indexName", "index");
workflowAny.put("parameters", parametersAny);
final AnyMap startActionAny = AccessAny.FACTORY.createAnyMap();
startActionAny.put("worker", "input-worker");
final AnyMap inputParametersAny = AccessAny.FACTORY.createAnyMap();
inputParametersAny.put("index", "${indexName}");
startActionAny.put("parameters", inputParametersAny);
final AnyMap outputAny = AccessAny.FACTORY.createAnyMap();
outputAny.put("output", "insertBucket");
startActionAny.put("output", outputAny);
workflowAny.put("startAction", startActionAny);
final WorkflowDefinition workflowDefinition = new WorkflowDefinition(workflowAny);
assertNotNull(workflowDefinition);
assertEquals("name is different", workflowAny.getStringValue("name"), workflowDefinition.getName());
assertEquals("parameters are different", workflowAny.getMap("parameters").getStringValue("indexName"),
workflowDefinition.getParameters().get("indexName").getExpression());
assertEquals("worker name is different", workflowAny.getMap("startAction").getStringValue("worker"),
workflowDefinition.getStartAction().getWorker());
assertEquals("startAction parameter is different", workflowAny.getMap("startAction").getMap("parameters")
.getStringValue("index"), workflowDefinition.getStartAction().getParameters().get("index").getExpression());
assertEquals("startAction output bucket is different", workflowAny.getMap("startAction").getMap("output")
.getStringValue("output"), workflowDefinition.getStartAction().getOutput().get("output"));
assertEquals("startAction output bucket is different", workflowAny.getMap("startAction").getMap("output")
.getStringValue("deletedRecords"), workflowDefinition.getStartAction().getOutput().get("deletedRecords"));
}
/**
* Tests the conversion to and from Any.
*
* @throws Exception
* Exception when converting to or from Any.
*/
public void testWorkingDefinitionToAndFromAny() throws Exception {
final AnyMap workflowAny = AccessAny.FACTORY.createAnyMap();
workflowAny.put("name", "testWorkingDefinitionToAndFromAny");
final AnyMap parametersAny = AccessAny.FACTORY.createAnyMap();
parametersAny.put("indexName", "index");
workflowAny.put("parameters", parametersAny);
final AnyMap startActionAny = AccessAny.FACTORY.createAnyMap();
startActionAny.put("worker", "input-worker");
final AnyMap inputParametersAny = AccessAny.FACTORY.createAnyMap();
inputParametersAny.put("index", "${indexName}");
startActionAny.put("parameters", inputParametersAny);
final AnyMap outputAny = AccessAny.FACTORY.createAnyMap();
outputAny.put("output", "transBucket");
startActionAny.put("output", outputAny);
workflowAny.put("startAction", startActionAny);
workflowAny.put("additionalInfo1", "additional info1");
workflowAny.put("additionalInfo2", "additional info2");
final AnySeq actionsAny = AccessAny.FACTORY.createAnySeq();
// intermediate worker
final AnyMap intermediateActionAny = AccessAny.FACTORY.createAnyMap();
intermediateActionAny.put("worker", "intermediate-worker");
final AnyMap intermediateInputAny = AccessAny.FACTORY.createAnyMap();
intermediateInputAny.put("input", "transBucket");
intermediateActionAny.put("input", intermediateInputAny);
final AnyMap intermediateOutputAny = AccessAny.FACTORY.createAnyMap();
intermediateOutputAny.put("output", "processedBucket");
intermediateActionAny.put("output", intermediateOutputAny);
actionsAny.add(intermediateActionAny);
// final worker
final AnyMap finalActionAny = AccessAny.FACTORY.createAnyMap();
finalActionAny.put("worker", "final-worker");
final AnyMap finalInputAny = AccessAny.FACTORY.createAnyMap();
finalInputAny.put("input", "processedBucket");
finalActionAny.put("input", finalInputAny);
final AnyMap finalOutputAny = AccessAny.FACTORY.createAnyMap();
finalOutputAny.put("output", "finalBucket");
finalActionAny.put("output", finalOutputAny);
actionsAny.add(finalActionAny);
workflowAny.put("actions", actionsAny);
final WorkflowDefinition workflowDefinition = new WorkflowDefinition(workflowAny);
assertNotNull(workflowDefinition);
final AnyMap reEngineeredAny = workflowDefinition.toAny();
assertTrue("Input and output Any objects do not match", equalsAny(workflowAny, reEngineeredAny));
}
/**
* Helper method to compare Any objects by first converting them to LinkedHashMaps and converting them then.
*
* @param expected
* The expected Any.
* @param actual
* The Any to be tested against the expected Any.
* @return true if expected is equal to actual
*/
private boolean equalsAny(final Any expected, final Any actual) {
return expected.equals(actual);
}
}