/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.workflow.update.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; import org.codehaus.jackson.JsonParseException; import org.easymock.Capture; import org.easymock.EasyMock; import org.junit.Test; import de.rcenvironment.core.communication.common.IdentifierException; import de.rcenvironment.core.communication.common.LogicalNodeId; import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils; import de.rcenvironment.core.communication.testutils.PlatformServiceDefaultStub; import de.rcenvironment.core.component.api.ComponentConstants; import de.rcenvironment.core.component.model.api.ComponentInstallation; import de.rcenvironment.core.component.update.api.DistributedPersistentComponentDescriptionUpdateService; import de.rcenvironment.core.component.update.api.PersistentComponentDescription; import de.rcenvironment.core.component.workflow.ComponentInstallationMockFactory; import de.rcenvironment.core.component.workflow.api.WorkflowConstants; import de.rcenvironment.core.component.workflow.update.api.PersistentWorkflowDescription; import junit.framework.Assert; /** * Test cases for {@link PersistentWorkflowDescriptionUpdateServiceImpl}. * * @author Sascha Zur * @author Robert Mischke (8.0.0 id adaptations) */ public class PersistentWorkflowDescriptionUpdateServiceImplTest { /** * Tests if the workflow version is updated correctly. * * @throws IOException on error * @throws JsonParseException on error */ @SuppressWarnings("unchecked") @Test public void test() throws JsonParseException, IOException { String persistentDescriptionV3 = "{" + "\"identifier\" : \"697261b6-eaf5-44ab-af40-6c161a4f26f8\"," + "\"workflowVersion\" : \"3\"" + "}"; List<PersistentComponentDescription> descriptions = new ArrayList<PersistentComponentDescription>(); PersistentWorkflowDescription persistentWorkflowDescriptionV3 = new PersistentWorkflowDescription(descriptions, persistentDescriptionV3); PersistentWorkflowDescriptionUpdateServiceImpl updateService = new PersistentWorkflowDescriptionUpdateServiceImpl(); DistributedPersistentComponentDescriptionUpdateService componentUpdateServiceMock = EasyMock .createMock(DistributedPersistentComponentDescriptionUpdateService.class); List<PersistentComponentDescription> componentDescriptions = new LinkedList<PersistentComponentDescription>(); EasyMock.expect(componentUpdateServiceMock.performComponentDescriptionUpdates(EasyMock.anyInt(), EasyMock.anyObject(new LinkedList<PersistentComponentDescription>().getClass()), EasyMock.anyBoolean())).andReturn(componentDescriptions).anyTimes(); EasyMock.replay(componentUpdateServiceMock); updateService.bindComponentDescriptionUpdateService(componentUpdateServiceMock); persistentWorkflowDescriptionV3 = updateService.performWorkflowDescriptionUpdate(persistentWorkflowDescriptionV3); Assert.assertEquals(String.valueOf(WorkflowConstants.CURRENT_WORKFLOW_VERSION_NUMBER), persistentWorkflowDescriptionV3.getWorkflowVersion()); } /** * Tests if the node identifier are set correctly. * * @throws IdentifierException not expected */ @Test public void testCheckAndSetNodeIdentifier() throws IdentifierException { final String componentId = "de.rce.comp-A"; final String version = "1.1"; final String componentIdPlusVersion = componentId + ComponentConstants.ID_SEPARATOR + version; final LogicalNodeId localDefaultLogicalNodeId = NodeIdentifierTestUtils.createTestDefaultLogicalNodeId(); final LogicalNodeId nodeId1 = NodeIdentifierTestUtils.createTestDefaultLogicalNodeId(); final LogicalNodeId nodeId2 = NodeIdentifierTestUtils.createTestDefaultLogicalNodeId(); final LogicalNodeId nodeId3 = NodeIdentifierTestUtils.createTestDefaultLogicalNodeId(); PersistentWorkflowDescriptionUpdateServiceImpl updateService = new PersistentWorkflowDescriptionUpdateServiceImpl(); updateService.bindPlatformService(new PlatformServiceDefaultStub() { @Override public LogicalNodeId getLocalDefaultLogicalNodeId() { return localDefaultLogicalNodeId; } }); PersistentComponentDescription persCompDesc = EasyMock.createStrictMock(PersistentComponentDescription.class); EasyMock.expect(persCompDesc.getComponentIdentifier()).andStubReturn(componentId); EasyMock.expect(persCompDesc.getComponentVersion()).andStubReturn(version); EasyMock.expect(persCompDesc.getComponentNodeIdentifier()).andStubReturn(nodeId1); Capture<LogicalNodeId> capturedNodeId = new Capture<>(); persCompDesc.setNodeIdentifier(EasyMock.capture(capturedNodeId)); EasyMock.expectLastCall().asStub(); EasyMock.replay(persCompDesc); Collection<ComponentInstallation> compInstalls = new ArrayList<>(); compInstalls.add(ComponentInstallationMockFactory.createComponentInstallationMock(componentIdPlusVersion, version, nodeId2)); compInstalls.add(ComponentInstallationMockFactory.createComponentInstallationMock(componentIdPlusVersion, version, nodeId1)); compInstalls.add(ComponentInstallationMockFactory.createComponentInstallationMock(componentIdPlusVersion, version, localDefaultLogicalNodeId)); updateService.checkAndSetNodeIdentifier(persCompDesc, compInstalls); assertTrue(capturedNodeId.hasCaptured()); assertEquals(localDefaultLogicalNodeId, capturedNodeId.getValue()); compInstalls = new ArrayList<>(); compInstalls.add(ComponentInstallationMockFactory.createComponentInstallationMock(componentIdPlusVersion, version, nodeId2)); compInstalls.add(ComponentInstallationMockFactory.createComponentInstallationMock(componentIdPlusVersion, version, nodeId1)); updateService.checkAndSetNodeIdentifier(persCompDesc, compInstalls); assertTrue(capturedNodeId.hasCaptured()); assertEquals(nodeId1, capturedNodeId.getValue()); compInstalls = new ArrayList<>(); compInstalls.add(ComponentInstallationMockFactory.createComponentInstallationMock(componentIdPlusVersion, version, nodeId2)); compInstalls.add(ComponentInstallationMockFactory.createComponentInstallationMock(componentIdPlusVersion, version, nodeId3)); updateService.checkAndSetNodeIdentifier(persCompDesc, compInstalls); assertTrue(capturedNodeId.hasCaptured()); assertTrue(capturedNodeId.getValue().equals(nodeId2) || capturedNodeId.getValue().equals(nodeId3)); updateService.checkAndSetNodeIdentifier(persCompDesc, new ArrayList<ComponentInstallation>()); assertTrue(capturedNodeId.hasCaptured()); assertEquals(localDefaultLogicalNodeId, capturedNodeId.getValue()); } }