Implement Attributes/Outputs BE (part 3)
[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.doReturn;
59 import static org.mockito.Mockito.times;
60 import static org.mockito.Mockito.verify;
61 import static org.mockito.Mockito.when;
62
63 @RunWith(MockitoJUnitRunner.class)
64 //error scenarios
65 public class TopologyTemplateOperationTest {
66
67     private static final String CONTAINER_ID = "containerId";
68     @InjectMocks
69     private TopologyTemplateOperation topologyTemplateOperation;
70     @Mock
71     private JanusGraphDao janusGraphDao;
72
73     @Test
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);
79     }
80
81     @Test
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);
89     }
90
91     @Test
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);
97     }
98
99     @Test
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);
107     }
108
109     @Test
110     public void addPolicyToToscaElementSuccessTest(){
111         JanusGraphOperationStatus status = JanusGraphOperationStatus.OK;
112         StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
113         assertThat(result).isEqualTo(StorageOperationStatus.OK);
114     }
115
116     @Test
117     public void addPolicyToToscaElementFailureTest(){
118         JanusGraphOperationStatus status = JanusGraphOperationStatus.ALREADY_EXIST;
119         StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
120         assertThat(result).isEqualTo(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
121     }
122
123     @Test
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);
133     }
134
135     @Test
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));
151     }
152
153     @Test
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));
170     }
171
172     @Test
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>() {
180             @Override
181             public boolean hasNext() {
182                 return false;
183             }
184
185             @Override
186             public Edge next() {
187                 return null;
188             }
189         };
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);
194         when(janusGraphDao
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();
202     }
203
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);
217         int counter = 0;
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);
225     }
226
227 }