Added oparent to sdc main
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / jsonjanusgraph / operations / TopologyTemplateOperationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
22
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;
51
52 import java.util.*;
53
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;
59
60 @RunWith(MockitoJUnitRunner.class)
61 //error scenarios
62 public class TopologyTemplateOperationTest {
63
64     private static final String CONTAINER_ID = "containerId";
65     @InjectMocks
66     private TopologyTemplateOperation topologyTemplateOperation;
67     @Mock
68     private JanusGraphDao janusGraphDao;
69
70     @Test
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);
76     }
77
78     @Test
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);
86     }
87
88     @Test
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);
94     }
95
96     @Test
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);
104     }
105
106     @Test
107     public void addPolicyToToscaElementSuccessTest(){
108         JanusGraphOperationStatus status = JanusGraphOperationStatus.OK;
109         StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
110         assertThat(result).isEqualTo(StorageOperationStatus.OK);
111     }
112
113     @Test
114     public void addPolicyToToscaElementFailureTest(){
115         JanusGraphOperationStatus status = JanusGraphOperationStatus.ALREADY_EXIST;
116         StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
117         assertThat(result).isEqualTo(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
118     }
119
120     @Test
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);
130     }
131
132     @Test
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));
148     }
149
150     @Test
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>() {
158             @Override
159             public boolean hasNext() {
160                 return false;
161             }
162
163             @Override
164             public Edge next() {
165                 return null;
166             }
167         };
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);
172         when(janusGraphDao
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());
180     }
181
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);
195         int counter = 0;
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);
203     }
204
205 }