blob: 0b013f557b3691c9c06a445aab7006d57106ca82 [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.JobHandler;
import org.eclipse.smila.jobmanager.httphandler.JobsHandler;
import org.eclipse.smila.jobmanager.persistence.ConfigNotFoundException;
import org.eclipse.smila.test.DeclarativeServiceTestCase;
/**
* Test cases for the {@link JobHandler} and {@link JobsHandler}.
*/
public class TestJobHandler extends DeclarativeServiceTestCase {
private JobHandler _jobHandler;
private JobsHandler _jobsHandler;
/** {@inheritDoc} */
@Override
protected void setUp() throws Exception {
super.setUp();
RequestHandler service = getService(RequestHandler.class, "(uriPattern=/jobmanager/jobs/\\([^/]+\\)/?$)");
assertTrue(service instanceof JobHandler);
_jobHandler = (JobHandler) service;
service = getService(RequestHandler.class, "(uriPattern=/jobmanager/jobs/?$)");
assertTrue(service instanceof JobsHandler);
_jobsHandler = (JobsHandler) service;
}
/** {@inheritDoc} */
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* tests adding, getting and deleting a definition via the request handler.
*
* @throws Exception
*/
public void testAddAndGetAndDeleteDefinition() throws Exception {
final String jobBaseUrlPart = _jobHandler.getRootContextPath() + "/jobmanager/jobs/";
final String workflowName = "optionalParamWorkflow";
final String definitionName = "testAddAndGetAndDeleteDefinition";
final Record definition = DataFactory.DEFAULT.createRecord();
definition.getMetadata().put("name", definitionName);
definition.getMetadata().put("workflow", workflowName);
final AnyMap parameter = DataFactory.DEFAULT.createAnyMap();
parameter.put("workerParameter", "workerParameter");
parameter.put("store", "store");
definition.getMetadata().put("parameters", parameter);
definition.getMetadata().put("additionalData", "some additional data.");
// this must be removed when inserted via handler.
definition.getMetadata().put(DefinitionBase.KEY_READ_ONLY, true);
// create a definition
final Date startDate = new Date();
final AnyMap result = (AnyMap) _jobsHandler.process("POST", jobBaseUrlPart, definition);
assertEquals(definition.getMetadata().get("name").toString(), result.get("name").toString());
// get the complete definition
final Record returnDetails = DataFactory.DEFAULT.createRecord();
returnDetails.getMetadata().put(JobManagerConstants.KEY_RETURN_DETAILS, true);
AnyMap retrievedDefinition =
((AnyMap) _jobHandler.process("GET", jobBaseUrlPart + definitionName, returnDetails))
.getMap(JobHandler.KEY_DEFINITION);
final Date endDate = new Date();
// check the timestamp of the result.
final Date dateFromDefinition = retrievedDefinition.getDateTimeValue(DefinitionBase.KEY_TIMESTAMP);
assertEquals(result.getDateTimeValue(DefinitionBase.KEY_TIMESTAMP), dateFromDefinition);
assertTrue(startDate.compareTo(dateFromDefinition) <= 0);
assertTrue(endDate.compareTo(dateFromDefinition) >= 0);
// be sure that the readonly flag has been removed from the input any.
assertFalse(retrievedDefinition.containsKey(DefinitionBase.KEY_READ_ONLY));
// we must remove timestamp and readOnly flag for comparison...
final Any timestampAny = definition.getMetadata().get(JobManagerConstants.TIMESTAMP);
assertEquals(timestampAny.asValue().asDateTime(), dateFromDefinition);
definition.getMetadata().remove(DefinitionBase.KEY_TIMESTAMP);
definition.getMetadata().remove(DefinitionBase.KEY_READ_ONLY);
retrievedDefinition.remove(JobManagerConstants.TIMESTAMP);
assertEquals(definition.getMetadata(), retrievedDefinition);
// get only the relevant part
retrievedDefinition =
((AnyMap) _jobHandler.process("GET", jobBaseUrlPart + definitionName, null))
.getMap(JobHandler.KEY_DEFINITION);
final AnyMap reducedAny = DataFactory.DEFAULT.cloneAnyMap(definition.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, retrievedDefinition);
// remove the workflow
_jobHandler.process("DELETE", jobBaseUrlPart + definitionName, null);
// check if it really got removed...
try {
_jobHandler.process("GET", jobBaseUrlPart + definitionName, null);
fail("ConfigNotFoundException expected.");
} catch (final ConfigNotFoundException e) {
;// ignore
}
}
}