/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.workflow.execution.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.easymock.EasyMock; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import de.rcenvironment.core.communication.api.PlatformService; import de.rcenvironment.core.communication.common.LogicalNodeId; import de.rcenvironment.core.component.workflow.api.WorkflowConstants; import de.rcenvironment.core.component.workflow.execution.api.WorkflowFileException; import de.rcenvironment.core.component.workflow.execution.spi.WorkflowDescriptionLoaderCallback; import de.rcenvironment.core.component.workflow.model.api.WorkflowDescription; import de.rcenvironment.core.component.workflow.model.api.WorkflowDescriptionPersistenceHandlerTestUtils; import de.rcenvironment.core.component.workflow.update.api.PersistentWorkflowDescriptionUpdateUtils; import de.rcenvironment.core.utils.common.TempFileService; import de.rcenvironment.core.utils.common.TempFileServiceAccess; /** * Test cases for {@link WorkflowExecutionServiceImpl}. * * @author Doreen Seider */ public class WorkflowExecutionServiceImplTest { private TempFileService tempFileService = TempFileServiceAccess.getInstance(); private File tempDir; /** * Temp file environment setup. * * @throws IOException on unexpected error */ @BeforeClass public static void setUpTempFileEnvironment() throws IOException { TempFileServiceAccess.setupUnitTestEnvironment(); } /** * Creates a temp directory used for workflow test files. * * @throws IOException on unexpected error */ @Before public void setUp() throws IOException { tempDir = tempFileService.createManagedTempDir(); WorkflowDescriptionPersistenceHandlerTestUtils.initializeStaticFieldsOfWorkflowDescriptionPersistenceHandler(); } /** * Deletes the temp directory created in {@link #setUp()}. * * @throws IOException on unexpected error */ @After public void tearDown() throws IOException { tempFileService.disposeManagedTempDirOrFile(tempDir); } /** * Tests error case: Workflow file cannot be parsed completely. Some parts are skipped. Expected behavior: Original workflow file is * copied into a backup file and it only contains the valid parts of the workflow description now. * * @throws WorkflowFileException on unexpected error * @throws IOException on unexpected error */ @Test public void testLoadWorkflowDescriptionFromFile() throws WorkflowFileException, IOException { LogicalNodeId logicalNodeIdMock = EasyMock.createStrictMock(LogicalNodeId.class); final PlatformService platformServiceMock = EasyMock.createStrictMock(PlatformService.class); EasyMock.expect(platformServiceMock.getLocalDefaultLogicalNodeId()).andStubReturn(logicalNodeIdMock); EasyMock.replay(platformServiceMock); WorkflowDescriptionPersistenceHandlerTestUtils.createWorkflowDescriptionPersistenceHandlerTestInstance(); WorkflowExecutionServiceImpl wfExeService = new WorkflowExecutionServiceImpl(); File wfFileOrigin = new File(tempDir, "test_origin.wf"); File wfFile = new File(tempDir, "test.wf"); FileUtils.writeStringToFile(wfFileOrigin, IOUtils.toString(getClass().getResourceAsStream("/workflows_unit_test/Parsing_error.wf"))); FileUtils.copyFile(wfFileOrigin, wfFile); String expectedBackupFileName = PersistentWorkflowDescriptionUpdateUtils.getFilenameForBackupFile(wfFile) + WorkflowConstants.WORKFLOW_FILE_ENDING; WorkflowDescriptionLoaderCallback callbackMock = EasyMock.createStrictMock(WorkflowDescriptionLoaderCallback.class); EasyMock.expect(callbackMock.arePartlyParsedWorkflowConsiderValid()).andReturn(true); callbackMock.onWorkflowFileParsingPartlyFailed(expectedBackupFileName); EasyMock.expectLastCall(); EasyMock.replay(callbackMock); wfExeService.loadWorkflowDescriptionFromFile(wfFile, callbackMock); EasyMock.verify(callbackMock); File backupFile = new File(tempDir, expectedBackupFileName); assertTrue(backupFile.exists()); FileUtils.contentEquals(wfFileOrigin, backupFile); assertTrue(FileUtils.sizeOf(wfFile) < FileUtils.sizeOf(wfFileOrigin)); WorkflowDescription wd = wfExeService.loadWorkflowDescriptionFromFile(wfFile, EasyMock.createStrictMock(WorkflowDescriptionLoaderCallback.class)); assertEquals(0, wd.getWorkflowLabels().size()); } }