/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.xml.merger.execution; import java.io.File; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.w3c.dom.Document; import de.rcenvironment.components.xml.merger.common.XmlMergerComponentConstants; import de.rcenvironment.core.component.api.ComponentException; import de.rcenvironment.core.component.datamanagement.api.ComponentDataManagementService; import de.rcenvironment.core.component.execution.api.Component; import de.rcenvironment.core.component.testutils.ComponentContextMock; import de.rcenvironment.core.component.testutils.ComponentTestWrapper; import de.rcenvironment.core.datamodel.api.DataType; import de.rcenvironment.core.datamodel.api.TypedDatumFactory; import de.rcenvironment.core.datamodel.api.TypedDatumService; import de.rcenvironment.core.utils.common.TempFileServiceAccess; import de.rcenvironment.core.utils.common.xml.api.XMLMapperService; import de.rcenvironment.core.utils.common.xml.api.XMLSupportService; import de.rcenvironment.core.utils.common.xml.impl.XMLSupportServiceImpl; /** * Unit test for the XML Merger Component. This test uses mocks for the XML services. It does not contain many test cases because most of * the logic can only be tested with the actual XMLSupport, so most of the tests for this component are in the XMLMergerIntegrationTest. * * @author Brigitte Boden */ public class XMLMergerComponentTest { private static final String ENDPOINT_NAME_XML = "XML"; private static final String ENDPOINT_NAME_XML_TO_INTEGRATE = XmlMergerComponentConstants.INPUT_NAME_XML_TO_INTEGRATE; /** * Junit Exception rule. */ @Rule public ExpectedException exception = ExpectedException.none(); private ComponentTestWrapper component; private XMLMergerComponentContextMock context; private ComponentDataManagementService componentDataManagementServiceMock; private File originCPACS; private File xmlToIntegrate; private TypedDatumFactory typedDatumFactory; /** * Context mock for XMLMerger Component test. * * @author Brigitte Boden */ private final class XMLMergerComponentContextMock extends ComponentContextMock { private static final long serialVersionUID = -2806639411734497853L; } /** * Set up the test. * * @throws Exception e */ @Before public void setup() throws Exception { TempFileServiceAccess.setupUnitTestEnvironment(); context = new XMLMergerComponentContextMock(); componentDataManagementServiceMock = EasyMock.createMock(ComponentDataManagementService.class); context.addService(ComponentDataManagementService.class, componentDataManagementServiceMock); component = new ComponentTestWrapper(new XmlMergerComponent(), context); context.addSimulatedInput(ENDPOINT_NAME_XML, ENDPOINT_NAME_XML, DataType.FileReference, false, null); context.addSimulatedInput(ENDPOINT_NAME_XML_TO_INTEGRATE, ENDPOINT_NAME_XML_TO_INTEGRATE, DataType.FileReference, false, null); context.addSimulatedOutput(ENDPOINT_NAME_XML, ENDPOINT_NAME_XML, DataType.FileReference, false, null); XMLSupportService support = EasyMock.createMock(XMLSupportService.class); XMLMapperService mapper = EasyMock.createMock(XMLMapperService.class); context.addService(XMLSupportService.class, support); context.addService(XMLMapperService.class, mapper); EasyMock.expect(support.readXMLFromString(EasyMock.anyObject(String.class))).andReturn(null).anyTimes(); Document emptyDoc = new XMLSupportServiceImpl().createDocument(); EasyMock.expect(support.readXMLFromFile(EasyMock.anyObject(File.class))).andReturn(emptyDoc).anyTimes(); support.writeXMLtoFile(EasyMock.anyObject(Document.class), EasyMock.anyObject(File.class)); EasyMock.expectLastCall(); EasyMock.replay(support); EasyMock.replay(mapper); originCPACS = new File("src/test/resources/CPACS.xml"); xmlToIntegrate = new File("src/test/resources/xmlToIntegrate.xml"); typedDatumFactory = context.getService(TypedDatumService.class).getFactory(); } /** * Test with no input. * * @throws ComponentException e */ @Test public void testNoInputs() throws ComponentException { component.start(); component.tearDownAndDispose(Component.FinalComponentState.FINISHED); } /** * Test with null mapping. A component exception is expected, we should not get an uncatched NullPointerException. * * @throws Exception e * */ @Test public void testWithNullMapping() throws Exception { String mapping = null; context.setConfigurationValue(XmlMergerComponentConstants.MAPPINGTYPE_CONFIGNAME, XmlMergerComponentConstants.MAPPINGTYPE_CLASSIC); context.setConfigurationValue(XmlMergerComponentConstants.XMLCONTENT_CONFIGNAME, mapping); context.setConfigurationValue(XmlMergerComponentConstants.MAPPINGFILE_DEPLOYMENT_CONFIGNAME, XmlMergerComponentConstants.MAPPINGFILE_DEPLOYMENT_LOADED); component.start(); context.setInputValue(ENDPOINT_NAME_XML, typedDatumFactory.createFileReference(originCPACS.getAbsolutePath(), originCPACS.getName())); context.setInputValue(ENDPOINT_NAME_XML_TO_INTEGRATE, typedDatumFactory.createFileReference(xmlToIntegrate.getAbsolutePath(), xmlToIntegrate.getName())); exception.expect(ComponentException.class); component.processInputs(); component.tearDownAndDispose(Component.FinalComponentState.FINISHED); } }