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.when;
60 @RunWith(MockitoJUnitRunner.class)
62 public class TopologyTemplateOperationTest {
64 private static final String CONTAINER_ID = "containerId";
66 private TopologyTemplateOperation topologyTemplateOperation;
68 private JanusGraphDao janusGraphDao;
71 public void overrideToscaDataOfToscaElement_failedToFetchContainerVertex() {
72 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(
73 JanusGraphOperationStatus.INVALID_ID));
74 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
75 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
79 public void overrideToscaDataOfToscaElement_failedToFetchDataVertex() {
80 GraphVertex containerVertex = new GraphVertex();
81 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
82 when(janusGraphDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(
83 JanusGraphOperationStatus.NOT_FOUND));
84 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
85 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
89 public void updateToscaDataDeepElements_failedToFetchContainerVertex() {
90 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(
91 JanusGraphOperationStatus.INVALID_ID));
92 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
93 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
97 public void updateToscaDataDeepElements_failedToFetchDataVertex() {
98 GraphVertex containerVertex = new GraphVertex();
99 when(janusGraphDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
100 when(janusGraphDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(
101 JanusGraphOperationStatus.NOT_FOUND));
102 StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
103 assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
107 public void addPolicyToToscaElementSuccessTest(){
108 JanusGraphOperationStatus status = JanusGraphOperationStatus.OK;
109 StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
110 assertThat(result).isEqualTo(StorageOperationStatus.OK);
114 public void addPolicyToToscaElementFailureTest(){
115 JanusGraphOperationStatus status = JanusGraphOperationStatus.ALREADY_EXIST;
116 StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
117 assertThat(result).isEqualTo(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
121 public void testAssociateOrAddCalcCapReqToComponent() {
122 StorageOperationStatus result;
123 GraphVertex graphVertex = new GraphVertex();
124 Map<String, MapListRequirementDataDefinition> calcRequirements = new HashMap<>();
125 Map<String, MapListCapabilityDataDefinition> calcCapabilty = new HashMap<>();
126 Map<String, MapCapabilityProperty> calCapabilitiesProps = new HashMap<>();
127 addPolicyToToscaElementWithStatus(JanusGraphOperationStatus.OK);
128 result = topologyTemplateOperation.associateOrAddCalcCapReqToComponent(graphVertex, calcRequirements, calcCapabilty, calCapabilitiesProps);
129 assertEquals(StorageOperationStatus.OK, result);
133 public void testSetDataTypesFromGraph() {
134 GraphVertex containerVertex = new GraphVertex();
135 ComponentParametersView filter = new ComponentParametersView(true);
136 filter.setIgnoreComponentInstancesInterfaces(true);
137 filter.setIgnoreDataType(false);
138 String componentName = "componentName";
139 String componentId = UniqueIdBuilder.buildResourceUniqueId();
140 containerVertex.setVertex(Mockito.mock(JanusGraphVertex.class));
141 containerVertex.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
142 containerVertex.setUniqueId(componentId);
143 containerVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
144 when(janusGraphDao.getChildVertex(any(GraphVertex.class), any(EdgeLabelEnum.class), any(JsonParseFlagEnum.class))).thenReturn(Either.right(
145 JanusGraphOperationStatus.GENERAL_ERROR));
146 Either<ToscaElement, StorageOperationStatus> storageOperationStatus = topologyTemplateOperation.getToscaElement(containerVertex, filter);
147 assertThat(storageOperationStatus).isEqualTo(Either.right(StorageOperationStatus.GENERAL_ERROR));
151 public void testUpdateDistributionStatus() {
152 Either<GraphVertex, StorageOperationStatus> result;
153 String uniqueId = "uniqueId";
154 User user = new User();
155 String userId = "userId";
156 user.setUserId(userId);
157 Iterator<Edge> edgeIterator = new Iterator<Edge>() {
159 public boolean hasNext() {
168 GraphVertex graphVertex = Mockito.mock(GraphVertex.class);
169 JanusGraphVertex janusGraphVertex = Mockito.mock(JanusGraphVertex.class);
170 when(graphVertex.getVertex()).thenReturn(janusGraphVertex);
171 when(janusGraphVertex.edges(Direction.IN, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER.name())).thenReturn(edgeIterator);
173 .getVertexByPropertyAndLabel(GraphPropertyEnum.USERID, userId, VertexTypeEnum.USER, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
174 when(janusGraphDao.getVertexById(uniqueId, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.left(graphVertex));
175 when(janusGraphDao.createEdge(graphVertex, graphVertex, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER, null)).thenReturn(
176 JanusGraphOperationStatus.OK);
177 when(janusGraphDao.updateVertex(graphVertex)).thenReturn(Either.left(graphVertex));
178 result = topologyTemplateOperation.updateDistributionStatus(uniqueId, user, DistributionStatusEnum.DISTRIBUTED);
179 assertThat(result.isLeft());
182 @SuppressWarnings("unchecked")
183 private StorageOperationStatus addPolicyToToscaElementWithStatus(JanusGraphOperationStatus status) {
184 GraphVertex componentV = new GraphVertex();
185 componentV.setVertex(Mockito.mock(JanusGraphVertex.class));
186 GraphVertex dataV = new GraphVertex();
187 dataV.setVertex(Mockito.mock(JanusGraphVertex.class));
188 String componentName = "componentName";
189 String componentId = UniqueIdBuilder.buildResourceUniqueId();
190 String policyTypeName = "org.openecomp.policies.placement.valet.Affinity";
191 componentV.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
192 componentV.setUniqueId(componentId);
193 PolicyDefinition policy = new PolicyDefinition();
194 policy.setPolicyTypeName(policyTypeName);
196 Either<GraphVertex, JanusGraphOperationStatus> toscaDataVertexRes = Either.right(
197 JanusGraphOperationStatus.NOT_FOUND);
198 when(janusGraphDao.getChildVertex(eq(componentV), eq(EdgeLabelEnum.POLICIES), eq(JsonParseFlagEnum.ParseJson))).thenReturn(toscaDataVertexRes);
199 Either<GraphVertex, JanusGraphOperationStatus> createVertex = Either.left(dataV);
200 when(janusGraphDao.createVertex(any(GraphVertex.class))).thenReturn(createVertex);
201 when(janusGraphDao.createEdge(any(JanusGraphVertex.class), any(JanusGraphVertex.class), any(EdgeLabelEnum.class), any(HashMap.class))).thenReturn(status);
202 return topologyTemplateOperation.addPolicyToToscaElement(componentV, policy, counter);