/*- * ============LICENSE_START======================================================= * SDC * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= */ package org.openecomp.sdc.be.model.operations.impl; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; import com.thinkaurelius.titan.core.TitanTransaction; import org.apache.commons.lang3.tuple.ImmutablePair; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge; import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels; import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary; import org.openecomp.sdc.be.dao.titan.TitanGenericDao; import org.openecomp.sdc.be.dao.titan.TitanOperationStatus; import org.openecomp.sdc.be.datatypes.enums.FilterKeyEnum; import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; import org.openecomp.sdc.be.model.ArtifactDefinition; import org.openecomp.sdc.be.model.CapabilityDefinition; import org.openecomp.sdc.be.model.Component; import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.model.ComponentParametersView; import org.openecomp.sdc.be.model.LifecycleStateEnum; import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.RequirementDefinition; import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.operations.api.ICapabilityOperation; import org.openecomp.sdc.be.model.operations.api.IRequirementOperation; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.operations.impl.ComponentInstanceOperation; import org.openecomp.sdc.be.model.operations.impl.ComponentOperation; import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder; import org.openecomp.sdc.be.resources.data.CapabilityData; import org.openecomp.sdc.be.resources.data.CapabilityInstData; import org.openecomp.sdc.be.resources.data.ComponentMetadataData; import org.openecomp.sdc.be.resources.data.PropertyData; import org.openecomp.sdc.be.resources.data.PropertyValueData; import org.openecomp.sdc.be.resources.data.RequirementData; import org.openecomp.sdc.be.unittests.utils.FactoryUtils; import fj.data.Either; public class ComponentOperationTest { @InjectMocks ComponentOperation compOperation = getAnnonimusImpl(); ComponentInstanceOperation componentInstanceOperation = Mockito.mock(ComponentInstanceOperation.class); TitanGenericDao titanGenericDao = Mockito.mock(TitanGenericDao.class); ICapabilityOperation capabilityOperation = Mockito.mock(ICapabilityOperation.class); IRequirementOperation requirementOperation = Mockito.mock(IRequirementOperation.class); @Before public void beforeTest() { Mockito.reset(componentInstanceOperation, requirementOperation, capabilityOperation); MockitoAnnotations.initMocks(this); } @Test public void testGetCapabilities() { Resource vf = FactoryUtils.createVF(); ComponentInstance ri = FactoryUtils.createResourceInstance(); CapabilityData capData = FactoryUtils.createCapabilityData(); FactoryUtils.addComponentInstanceToVF(vf, ri); Either>, TitanOperationStatus> capDataList = prepareCompOperationReturnValue( ri, capData); prepareMocksForCapabilitiesMethods(ri, capDataList); Map> capabilities = compOperation .getCapabilities(vf, NodeTypeEnum.Resource, false).left().value(); assertTrue(capabilities.size() == 1); Entry> entry = capabilities.entrySet().iterator().next(); assertTrue(entry.getKey().equals(capData.getType())); assertTrue(entry.getValue().size() == 1); assertTrue(entry.getValue().get(0).getUniqueId().equals(capData.getUniqueId())); } @Test public void testGetRequirments() { Resource vf = FactoryUtils.createVF(); ComponentInstance ri = FactoryUtils.createResourceInstance(); RequirementData reqData = FactoryUtils.createRequirementData(); FactoryUtils.addComponentInstanceToVF(vf, ri); Either>, TitanOperationStatus> reqDataEdgeList = prepareCompOperationReturnValue( ri, reqData); prepareMocksForRequirmenetsMethods(ri, reqDataEdgeList); Map> requirements = compOperation .getRequirements(vf, NodeTypeEnum.Resource, false).left().value(); assertTrue(requirements.size() == 1); Entry> entry = requirements.entrySet().iterator().next(); assertTrue(entry.getKey().equals(FactoryUtils.Constants.DEFAULT_CAPABILITY_TYPE)); assertTrue(entry.getValue().size() == 1); assertTrue(entry.getValue().get(0).getUniqueId().equals(reqData.getUniqueId())); } private void prepareMocksForRequirmenetsMethods(ComponentInstance ri, Either>, TitanOperationStatus> reqDataEdgeList) { when(componentInstanceOperation.getRequirements(ri, NodeTypeEnum.Resource)).thenReturn(reqDataEdgeList); when(requirementOperation.getRequirement(Mockito.anyString())).then(createReqDefAnswer()); } private void prepareMocksForCapabilitiesMethods(ComponentInstance ri, Either>, TitanOperationStatus> capDataList) { when(componentInstanceOperation.getCapabilities(ri, NodeTypeEnum.Resource)).thenReturn(capDataList); when(capabilityOperation.getCapabilityByCapabilityData(Mockito.any(CapabilityData.class))) .then(createCapDefByDataAnswer()); List> capInstList = new ArrayList<>(); CapabilityInstData curCapabilityInst = FactoryUtils.createCapabilityInstData(); GraphEdge edge = new GraphEdge(); Map properties = new HashMap<>(); properties.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), capDataList.left().value().get(0).getLeft().getUniqueId()); edge.setProperties(properties); ImmutablePair pair = new ImmutablePair( curCapabilityInst, edge); capInstList.add(pair); when(titanGenericDao.getChildrenNodes( UniqueIdBuilder.getKeyByNodeType( NodeTypeEnum.getByNameIgnoreCase(ri.getOriginType().getInstanceType().trim())), ri.getUniqueId(), GraphEdgeLabels.CAPABILITY_INST, NodeTypeEnum.CapabilityInst, CapabilityInstData.class)).thenReturn(Either.left(capInstList)); when(titanGenericDao.getChild( UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.getByName(curCapabilityInst.getLabel())), curCapabilityInst.getUniqueId(), GraphEdgeLabels.INSTANCE_OF, NodeTypeEnum.Capability, CapabilityData.class)).thenReturn(Either.left(capDataList.left().value().get(0))); PropertyValueData propertyValueData = FactoryUtils.createPropertyData(); ImmutablePair propPair = new ImmutablePair( propertyValueData, null); List> propPairList = new ArrayList<>(); propPairList.add(propPair); when(titanGenericDao.getChildrenNodes( UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.getByName(curCapabilityInst.getLabel())), curCapabilityInst.getUniqueId(), GraphEdgeLabels.PROPERTY_VALUE, NodeTypeEnum.PropertyValue, PropertyValueData.class)).thenReturn(Either.left(propPairList)); CapabilityDefinition capDef = FactoryUtils .convertCapabilityDataToCapabilityDefinitionAddProperties(capDataList.left().value().get(0).getLeft()); List propDefList = capDef.getProperties().stream().filter(p -> p.getName().equals("host")) .collect(Collectors.toList()); PropertyDefinition propDef = propDefList.get(0); PropertyData propData = FactoryUtils.convertCapabilityDefinitionToCapabilityData(propDef); ImmutablePair defPropPair = new ImmutablePair(propData, edge); when(titanGenericDao.getChild( UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.getByName(propertyValueData.getLabel())), propertyValueData.getUniqueId(), GraphEdgeLabels.PROPERTY_IMPL, NodeTypeEnum.Property, PropertyData.class)).thenReturn(Either.left(defPropPair)); List capDefList = new ArrayList<>(); capDefList.add(capDef); when(componentInstanceOperation.updateCapDefPropertyValues(Mockito.any(ComponentInstance.class), Mockito.any(List.class))).thenReturn(Either.left(capDefList)); } private Either>, TitanOperationStatus> prepareCompOperationReturnValue( ComponentInstance ri, Data data) { ImmutablePair dataEdgePair = new ImmutablePair<>(data, new GraphEdge()); List> dataEdgeList = new ArrayList<>(); dataEdgeList.add(dataEdgePair); return Either.left(dataEdgeList); } private Answer> createReqDefAnswer() { return new Answer>() { @Override public Either answer(InvocationOnMock invocation) throws Throwable { String reqDataId = (String) invocation.getArguments()[0]; return Either.left(FactoryUtils.convertRequirementDataIDToRequirementDefinition(reqDataId)); } }; } private Answer> createCapDefByDataAnswer() { return new Answer>() { @Override public Either answer(InvocationOnMock invocation) throws Throwable { CapabilityData capData = (CapabilityData) invocation.getArguments()[0]; return Either.left(FactoryUtils.convertCapabilityDataToCapabilityDefinitionAddProperties(capData)); } }; } private ComponentOperation getAnnonimusImpl() { return new ComponentOperation() { @Override protected StorageOperationStatus validateCategories(Component currentComponent, Component component, ComponentMetadataData componentData, NodeTypeEnum type) { // TODO Auto-generated method stub return null; } @Override protected StorageOperationStatus updateDerived(Component component, Component currentComponent, ComponentMetadataData updatedResourceData, Class clazz) { // TODO Auto-generated method stub return null; } @Override protected Either updateComponent(T component, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override public Either increaseAndGetComponentInstanceCounter(String componentId, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override protected ComponentMetadataData getMetaDataFromComponent(Component component) { // TODO Auto-generated method stub return null; } @Override public Either getLightComponent(String id, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override protected Either getComponentByNameAndVersion(String name, String version, Map additionalParams, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override public Either getComponent(String id, boolean inTransaction) { // TODO Auto-generated method stub return null; } // @Override // public Either // getComponent_tx(String id, boolean inTransaction) { // // TODO Auto-generated method stub // return null; // } @Override public Either, StorageOperationStatus> getAdditionalArtifacts(String resourceId, boolean recursively, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override public Either cloneComponent(T other, String version, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override public Component getDefaultComponent() { // TODO Auto-generated method stub return null; } @Override public boolean isComponentExist(String componentId) { // TODO Auto-generated method stub return false; } @Override public Either getMetadataComponent(String id, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override Component convertComponentMetadataDataToComponent(ComponentMetadataData componentMetadataData) { // TODO Auto-generated method stub return null; } @Override TitanOperationStatus setComponentCategoriesFromGraph(Component component) { // TODO Auto-generated method stub return null; } @Override public Either validateComponentNameExists(String componentName) { // TODO Auto-generated method stub return null; } @Override public Either markComponentToDelete(Component componentToDelete, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override public Either deleteComponent(String id, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override public Either isComponentInUse(String componentId) { // TODO Auto-generated method stub return null; } @Override public Either, StorageOperationStatus> getAllComponentsMarkedForDeletion() { // TODO Auto-generated method stub return null; } @Override public Either cloneComponent(T other, String version, LifecycleStateEnum targetLifecycle, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override public Either getComponent(String id, ComponentParametersView componentParametersView, boolean inTrasnaction) { // TODO Auto-generated method stub return null; } @Override public Either, StorageOperationStatus> getFilteredComponents(Map filters, boolean inTransaction) { // TODO Auto-generated method stub return null; } @Override protected Either updateComponentFilterResult(T component, boolean inTransaction, ComponentParametersView filterParametersView) { // TODO Auto-generated method stub return null; } }; } }