1 package org.openecomp.sdc.be.model.jsontitan.operations;
3 import com.thinkaurelius.titan.core.TitanVertex;
5 import org.apache.tinkerpop.gremlin.structure.Direction;
6 import org.apache.tinkerpop.gremlin.structure.Edge;
8 import org.junit.runner.RunWith;
9 import org.mockito.InjectMocks;
10 import org.mockito.Mock;
11 import org.mockito.Mockito;
12 import org.mockito.junit.MockitoJUnitRunner;
13 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
14 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
15 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
16 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
17 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
18 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
19 import org.openecomp.sdc.be.datatypes.elements.MapCapabilityProperty;
20 import org.openecomp.sdc.be.datatypes.elements.MapListCapabilityDataDefinition;
21 import org.openecomp.sdc.be.datatypes.elements.MapListRequirementDataDefinition;
22 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
23 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
24 import org.openecomp.sdc.be.model.DistributionStatusEnum;
25 import org.openecomp.sdc.be.model.PolicyDefinition;
26 import org.openecomp.sdc.be.model.User;
27 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
28 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
29 import org.openecomp.sdc.be.model.ComponentParametersView;
30 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
34 import static org.assertj.core.api.Assertions.assertThat;
35 import static org.junit.Assert.assertEquals;
36 import static org.mockito.ArgumentMatchers.any;
37 import static org.mockito.ArgumentMatchers.eq;
38 import static org.mockito.Mockito.when;
40 @RunWith(MockitoJUnitRunner.class)
42 public class TopologyTemplateOperationTest {
44 private static final String CONTAINER_ID = "containerId";
46 private TopologyTemplateOperation topologyTemplateOperation;
48 private TitanDao titanDao;
51 public void overrideToscaDataOfToscaElement_failedToFetchContainerVertex() {
52 when(titanDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(TitanOperationStatus.INVALID_ID));
53 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
54 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
58 public void overrideToscaDataOfToscaElement_failedToFetchDataVertex() {
59 GraphVertex containerVertex = new GraphVertex();
60 when(titanDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
61 when(titanDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
62 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
63 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
67 public void updateToscaDataDeepElements_failedToFetchContainerVertex() {
68 when(titanDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(TitanOperationStatus.INVALID_ID));
69 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
70 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
74 public void updateToscaDataDeepElements_failedToFetchDataVertex() {
75 GraphVertex containerVertex = new GraphVertex();
76 when(titanDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
77 when(titanDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
78 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
79 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
83 public void addPolicyToToscaElementSuccessTest(){
84 TitanOperationStatus status = TitanOperationStatus.OK;
85 StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
86 assertThat(result).isEqualTo(StorageOperationStatus.OK);
90 public void addPolicyToToscaElementFailureTest(){
91 TitanOperationStatus status = TitanOperationStatus.ALREADY_EXIST;
92 StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
93 assertThat(result).isEqualTo(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
97 public void testAssociateOrAddCalcCapReqToComponent() {
98 StorageOperationStatus result;
99 GraphVertex graphVertex = new GraphVertex();
100 Map<String, MapListRequirementDataDefinition> calcRequirements = new HashMap<>();
101 Map<String, MapListCapabilityDataDefinition> calcCapabilty = new HashMap<>();
102 Map<String, MapCapabilityProperty> calCapabilitiesProps = new HashMap<>();
103 addPolicyToToscaElementWithStatus(TitanOperationStatus.OK);
104 result = topologyTemplateOperation.associateOrAddCalcCapReqToComponent(graphVertex, calcRequirements, calcCapabilty, calCapabilitiesProps);
105 assertEquals(StorageOperationStatus.OK, result);
109 public void testSetDataTypesFromGraph() {
110 GraphVertex containerVertex = new GraphVertex();
111 ComponentParametersView filter = new ComponentParametersView(true);
112 filter.setIgnoreComponentInstancesInterfaces(true);
113 filter.setIgnoreDataType(false);
114 String componentName = "componentName";
115 String componentId = UniqueIdBuilder.buildResourceUniqueId();
116 containerVertex.setVertex(Mockito.mock(TitanVertex.class));
117 containerVertex.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
118 containerVertex.setUniqueId(componentId);
119 containerVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
120 when(titanDao.getChildVertex(any(GraphVertex.class), any(EdgeLabelEnum.class), any(JsonParseFlagEnum.class))).thenReturn(Either.right(TitanOperationStatus.GENERAL_ERROR));
121 Either<ToscaElement, StorageOperationStatus> storageOperationStatus = topologyTemplateOperation.getToscaElement(containerVertex, filter);
122 assertThat(storageOperationStatus).isEqualTo(Either.right(StorageOperationStatus.GENERAL_ERROR));
126 public void testUpdateDistributionStatus() {
127 Either<GraphVertex, StorageOperationStatus> result;
128 String uniqueId = "uniqueId";
129 User user = new User();
130 String userId = "userId";
131 user.setUserId(userId);
132 Iterator<Edge> edgeIterator = new Iterator<Edge>() {
134 public boolean hasNext() {
143 GraphVertex graphVertex = Mockito.mock(GraphVertex.class);
144 TitanVertex titanVertex = Mockito.mock(TitanVertex.class);
145 when(graphVertex.getVertex()).thenReturn(titanVertex);
146 when(titanVertex.edges(Direction.IN, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER.name())).thenReturn(edgeIterator);
147 when(titanDao.getVertexByPropertyAndLabel(GraphPropertyEnum.USERID, userId, VertexTypeEnum.USER, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
148 when(titanDao.getVertexById(uniqueId, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.left(graphVertex));
149 when(titanDao.createEdge(graphVertex, graphVertex, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER, null)).thenReturn(TitanOperationStatus.OK);
150 when(titanDao.updateVertex(graphVertex)).thenReturn(Either.left(graphVertex));
151 result = topologyTemplateOperation.updateDistributionStatus(uniqueId, user, DistributionStatusEnum.DISTRIBUTED);
152 assertThat(result.isLeft());
155 @SuppressWarnings("unchecked")
156 private StorageOperationStatus addPolicyToToscaElementWithStatus(TitanOperationStatus status) {
157 GraphVertex componentV = new GraphVertex();
158 componentV.setVertex(Mockito.mock(TitanVertex.class));
159 GraphVertex dataV = new GraphVertex();
160 dataV.setVertex(Mockito.mock(TitanVertex.class));
161 String componentName = "componentName";
162 String componentId = UniqueIdBuilder.buildResourceUniqueId();
163 String policyTypeName = "org.openecomp.policies.placement.valet.Affinity";
164 componentV.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
165 componentV.setUniqueId(componentId);
166 PolicyDefinition policy = new PolicyDefinition();
167 policy.setPolicyTypeName(policyTypeName);
169 Either<GraphVertex, TitanOperationStatus> toscaDataVertexRes = Either.right(TitanOperationStatus.NOT_FOUND);
170 when(titanDao.getChildVertex(eq(componentV), eq(EdgeLabelEnum.POLICIES), eq(JsonParseFlagEnum.ParseJson))).thenReturn(toscaDataVertexRes);
171 Either<GraphVertex, TitanOperationStatus> createVertex = Either.left(dataV);
172 when(titanDao.createVertex(any(GraphVertex.class))).thenReturn(createVertex);
173 when(titanDao.createEdge(any(TitanVertex.class), any(TitanVertex.class), any(EdgeLabelEnum.class), any(HashMap.class))).thenReturn(status);
174 return topologyTemplateOperation.addPolicyToToscaElement(componentV, policy, counter);