2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
23 import org.janusgraph.core.JanusGraphVertex;
24 import fj.data.Either;
25 import org.apache.tinkerpop.gremlin.structure.Direction;
26 import org.apache.tinkerpop.gremlin.structure.Edge;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.InjectMocks;
30 import org.mockito.Mock;
31 import org.mockito.Mockito;
32 import org.mockito.junit.MockitoJUnitRunner;
33 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
34 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
35 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
36 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
37 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
38 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
39 import org.openecomp.sdc.be.datatypes.elements.MapCapabilityProperty;
40 import org.openecomp.sdc.be.datatypes.elements.MapListCapabilityDataDefinition;
41 import org.openecomp.sdc.be.datatypes.elements.MapListRequirementDataDefinition;
42 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
43 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
44 import org.openecomp.sdc.be.model.DistributionStatusEnum;
45 import org.openecomp.sdc.be.model.PolicyDefinition;
46 import org.openecomp.sdc.be.model.User;
47 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
48 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
49 import org.openecomp.sdc.be.model.ComponentParametersView;
50 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElement;
54 import static org.assertj.core.api.Assertions.assertThat;
55 import static org.junit.Assert.assertEquals;
56 import static org.mockito.ArgumentMatchers.any;
57 import static org.mockito.ArgumentMatchers.eq;
58 import static org.mockito.Mockito.doReturn;
59 import static org.mockito.Mockito.times;
60 import static org.mockito.Mockito.verify;
61 import static org.mockito.Mockito.when;
63 @RunWith(MockitoJUnitRunner.class)
65 public class TopologyTemplateOperationTest {
67 private static final String CONTAINER_ID = "containerId";
69 private TopologyTemplateOperation topologyTemplateOperation;
71 private JanusGraphDao janusGraphDao;
74 public void overrideToscaDataOfToscaElement_failedToFetchContainerVertex() {
75 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(
76 JanusGraphOperationStatus.INVALID_ID));
77 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
78 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
82 public void overrideToscaDataOfToscaElement_failedToFetchDataVertex() {
83 GraphVertex containerVertex = new GraphVertex();
84 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
85 when(janusGraphDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(
86 JanusGraphOperationStatus.NOT_FOUND));
87 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
88 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
92 public void updateToscaDataDeepElements_failedToFetchContainerVertex() {
93 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(
94 JanusGraphOperationStatus.INVALID_ID));
95 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
96 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
100 public void updateToscaDataDeepElements_failedToFetchDataVertex() {
101 GraphVertex containerVertex = new GraphVertex();
102 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
103 when(janusGraphDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(
104 JanusGraphOperationStatus.NOT_FOUND));
105 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
106 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
110 public void addPolicyToToscaElementSuccessTest(){
111 JanusGraphOperationStatus status = JanusGraphOperationStatus.OK;
112 StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
113 assertThat(result).isEqualTo(StorageOperationStatus.OK);
117 public void addPolicyToToscaElementFailureTest(){
118 JanusGraphOperationStatus status = JanusGraphOperationStatus.ALREADY_EXIST;
119 StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
120 assertThat(result).isEqualTo(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
124 public void testAssociateOrAddCalcCapReqToComponent() {
125 StorageOperationStatus result;
126 GraphVertex graphVertex = new GraphVertex();
127 Map<String, MapListRequirementDataDefinition> calcRequirements = new HashMap<>();
128 Map<String, MapListCapabilityDataDefinition> calcCapabilty = new HashMap<>();
129 Map<String, MapCapabilityProperty> calCapabilitiesProps = new HashMap<>();
130 addPolicyToToscaElementWithStatus(JanusGraphOperationStatus.OK);
131 result = topologyTemplateOperation.associateOrAddCalcCapReqToComponent(graphVertex, calcRequirements, calcCapabilty, calCapabilitiesProps);
132 assertEquals(StorageOperationStatus.OK, result);
136 public void testSetDataTypesFromGraph() {
137 GraphVertex containerVertex = new GraphVertex();
138 ComponentParametersView filter = new ComponentParametersView(true);
139 filter.setIgnoreComponentInstancesInterfaces(true);
140 filter.setIgnoreDataType(false);
141 String componentName = "componentName";
142 String componentId = UniqueIdBuilder.buildResourceUniqueId();
143 containerVertex.setVertex(Mockito.mock(JanusGraphVertex.class));
144 containerVertex.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
145 containerVertex.setUniqueId(componentId);
146 containerVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
147 when(janusGraphDao.getChildVertex(any(GraphVertex.class), any(EdgeLabelEnum.class), any(JsonParseFlagEnum.class))).thenReturn(Either.right(
148 JanusGraphOperationStatus.GENERAL_ERROR));
149 Either<ToscaElement, StorageOperationStatus> storageOperationStatus = topologyTemplateOperation.getToscaElement(containerVertex, filter);
150 assertThat(storageOperationStatus).isEqualTo(Either.right(StorageOperationStatus.GENERAL_ERROR));
154 public void testSetOutputsFromGraph() {
155 final GraphVertex containerVertex = new GraphVertex();
156 final ComponentParametersView filter = new ComponentParametersView(true);
157 filter.setIgnoreOutputs(false);
158 final String componentName = "componentName";
159 final String componentId = UniqueIdBuilder.buildResourceUniqueId();
160 containerVertex.setVertex(Mockito.mock(JanusGraphVertex.class));
161 containerVertex.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
162 containerVertex.setUniqueId(componentId);
163 containerVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
164 doReturn(Either.right(JanusGraphOperationStatus.GENERAL_ERROR)).when(janusGraphDao)
165 .getChildVertex(any(GraphVertex.class), any(EdgeLabelEnum.class), any(JsonParseFlagEnum.class));
166 final Either<ToscaElement, StorageOperationStatus> storageOperationStatus
167 = topologyTemplateOperation.getToscaElement(containerVertex, filter);
168 assertThat(storageOperationStatus).isEqualTo(Either.right(StorageOperationStatus.GENERAL_ERROR));
169 verify(janusGraphDao, times(1)).getChildVertex(any(GraphVertex.class), any(EdgeLabelEnum.class), any(JsonParseFlagEnum.class));
173 public void testUpdateDistributionStatus() {
174 Either<GraphVertex, StorageOperationStatus> result;
175 String uniqueId = "uniqueId";
176 User user = new User();
177 String userId = "userId";
178 user.setUserId(userId);
179 Iterator<Edge> edgeIterator = new Iterator<Edge>() {
181 public boolean hasNext() {
190 GraphVertex graphVertex = Mockito.mock(GraphVertex.class);
191 JanusGraphVertex janusGraphVertex = Mockito.mock(JanusGraphVertex.class);
192 when(graphVertex.getVertex()).thenReturn(janusGraphVertex);
193 when(janusGraphVertex.edges(Direction.IN, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER.name())).thenReturn(edgeIterator);
195 .getVertexByPropertyAndLabel(GraphPropertyEnum.USERID, userId, VertexTypeEnum.USER, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
196 when(janusGraphDao.getVertexById(uniqueId, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.left(graphVertex));
197 when(janusGraphDao.createEdge(graphVertex, graphVertex, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER, null)).thenReturn(
198 JanusGraphOperationStatus.OK);
199 when(janusGraphDao.updateVertex(graphVertex)).thenReturn(Either.left(graphVertex));
200 result = topologyTemplateOperation.updateDistributionStatus(uniqueId, user, DistributionStatusEnum.DISTRIBUTED);
201 assertThat(result.isLeft()).isTrue();
204 @SuppressWarnings("unchecked")
205 private StorageOperationStatus addPolicyToToscaElementWithStatus(JanusGraphOperationStatus status) {
206 GraphVertex componentV = new GraphVertex();
207 componentV.setVertex(Mockito.mock(JanusGraphVertex.class));
208 GraphVertex dataV = new GraphVertex();
209 dataV.setVertex(Mockito.mock(JanusGraphVertex.class));
210 String componentName = "componentName";
211 String componentId = UniqueIdBuilder.buildResourceUniqueId();
212 String policyTypeName = "org.openecomp.policies.placement.valet.Affinity";
213 componentV.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
214 componentV.setUniqueId(componentId);
215 PolicyDefinition policy = new PolicyDefinition();
216 policy.setPolicyTypeName(policyTypeName);
218 Either<GraphVertex, JanusGraphOperationStatus> toscaDataVertexRes = Either.right(
219 JanusGraphOperationStatus.NOT_FOUND);
220 when(janusGraphDao.getChildVertex(componentV, EdgeLabelEnum.POLICIES, JsonParseFlagEnum.ParseJson)).thenReturn(toscaDataVertexRes);
221 Either<GraphVertex, JanusGraphOperationStatus> createVertex = Either.left(dataV);
222 when(janusGraphDao.createVertex(any(GraphVertex.class))).thenReturn(createVertex);
223 when(janusGraphDao.createEdge(any(JanusGraphVertex.class), any(JanusGraphVertex.class), any(EdgeLabelEnum.class), any(HashMap.class))).thenReturn(status);
224 return topologyTemplateOperation.addPolicyToToscaElement(componentV, policy, counter);