/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.workflow.model.api;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Random;
import org.easymock.EasyMock;
import org.junit.Ignore;
import org.junit.Test;
import de.rcenvironment.core.communication.common.InstanceNodeSessionId;
import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils;
import de.rcenvironment.core.component.model.api.ComponentDescription;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription;
import de.rcenvironment.core.datamodel.api.EndpointType;
/**
* Test cases for {@link WorkflowDescription}.
*
* @author Heinrich Wendel
* @author Robert Mischke (id adaptations and some cleanup)
*/
public class WorkflowDescriptionTest {
private static final String DEFAULT_TEST_WORKFLOW_ID = "testWfId";
private static final Random RANDOM = new Random(System.currentTimeMillis());
private ComponentDescription cd = EasyMock.createNiceMock(ComponentDescription.class);
/** Test. */
@Test
public void testWorkflowDescription() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
assertEquals(DEFAULT_TEST_WORKFLOW_ID, desc.getIdentifier());
}
/** Test. */
@Test
public void testGetName() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
desc.setName("test2");
assertEquals("test2", desc.getName());
}
/** Test. */
@Test
public void testGetWorkflowVersion() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
final int version = 7;
desc.setWorkflowVersion(version);
assertEquals(version, desc.getWorkflowVersion());
}
/** Test. */
@Test
public void testGetAdditionalInformation() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
String value = "test ... " + RANDOM.nextLong();
String expectedValue = new String(value);
desc.setAdditionalInformation(value);
assertEquals(expectedValue, desc.getAdditionalInformation());
}
/** Test. */
@Test
public void testGetControllerNode() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
InstanceNodeSessionId tp = NodeIdentifierTestUtils.createTestInstanceNodeSessionIdWithDisplayName(DEFAULT_TEST_WORKFLOW_ID);
desc.setControllerNode(tp.convertToDefaultLogicalNodeId());
assertEquals(tp.convertToDefaultLogicalNodeId(), desc.getControllerNode());
}
/** Test. */
@Test
@Ignore
public void testGetWorkflowNodes() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
WorkflowNodeChangeListener l1 = new WorkflowNodeChangeListener(WorkflowDescription.PROPERTY_NODES);
desc.addPropertyChangeListener(l1);
assertEquals(0, desc.getWorkflowNodes().size());
WorkflowNode node = new WorkflowNode(cd);
desc.addWorkflowNode(node);
assertTrue(l1.getFired());
assertEquals(1, desc.getWorkflowNodes().size());
assertTrue(desc.getWorkflowNodes().contains(node));
desc.removePropertyChangeListener(l1);
WorkflowNodeChangeListener l2 = new WorkflowNodeChangeListener(WorkflowDescription.PROPERTY_NODES);
desc.addPropertyChangeListener(l2);
desc.removeWorkflowNode(node);
assertTrue(l2.getFired());
assertEquals(0, desc.getWorkflowNodes().size());
}
/** Test. */
@Test
@Ignore
public void testGetWorkflowNode() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
WorkflowNode node = new WorkflowNode(cd);
try {
desc.getWorkflowNode(node.getIdentifier());
} catch (IllegalArgumentException e) {
assertTrue(true);
}
desc.addWorkflowNode(node);
assertEquals(node, desc.getWorkflowNode(node.getIdentifier()));
}
/** Test. */
@Test
@Ignore
public void testGetConnections() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
WorkflowNodeChangeListener l1 = new WorkflowNodeChangeListener(WorkflowDescription.PROPERTY_CONNECTIONS);
WorkflowNode node1 = new WorkflowNode(cd);
WorkflowNode node2 = new WorkflowNode(cd);
EndpointDescription ep1 = new EndpointDescription(null, EndpointType.INPUT);
EndpointDescription ep2 = new EndpointDescription(null, EndpointType.OUTPUT);
Connection connection = new Connection(node1, ep2, node2, ep1);
desc.addWorkflowNode(node1);
desc.addWorkflowNode(node2);
desc.addPropertyChangeListener(l1);
assertEquals(0, desc.getConnections().size());
desc.addConnection(connection);
assertEquals(1, desc.getConnections().size());
assertTrue(desc.getConnections().contains(connection));
assertTrue(l1.getFired());
desc.removePropertyChangeListener(l1);
WorkflowNodeChangeListener l2 = new WorkflowNodeChangeListener(WorkflowDescription.PROPERTY_CONNECTIONS);
desc.addPropertyChangeListener(l2);
desc.removeConnection(connection);
assertEquals(0, desc.getConnections().size());
assertTrue(l2.getFired());
}
/** Test. */
@Test
public void testClone() {
WorkflowDescription desc = new WorkflowDescription(DEFAULT_TEST_WORKFLOW_ID);
desc.clone();
}
/**
* Dummy implementation of {@link PropertyChangeListener}.
*
* @author Heinrich Wendel
*/
class WorkflowNodeChangeListener implements PropertyChangeListener {
/** Fired or not? */
private boolean fired = false;
/** Event to check. */
private String event;
/**
* Constructor.
*
* @param event Name of the property to listen for.
*/
WorkflowNodeChangeListener(String event) {
this.event = event;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
assertEquals(event, evt.getPropertyName());
fired = true;
}
public boolean getFired() {
return fired;
}
};
}