Change to enable SDC list type input
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / jsontitan / operations / TopologyTemplateOperationTest.java
1 package org.openecomp.sdc.be.model.jsontitan.operations;
2
3 import com.thinkaurelius.titan.core.TitanVertex;
4 import fj.data.Either;
5 import org.apache.tinkerpop.gremlin.structure.Direction;
6 import org.apache.tinkerpop.gremlin.structure.Edge;
7 import org.junit.Test;
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;
31
32 import java.util.*;
33
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;
39
40 @RunWith(MockitoJUnitRunner.class)
41 //error scenarios
42 public class TopologyTemplateOperationTest {
43
44     private static final String CONTAINER_ID = "containerId";
45     @InjectMocks
46     private TopologyTemplateOperation topologyTemplateOperation;
47     @Mock
48     private TitanDao titanDao;
49
50     @Test
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);
55     }
56
57     @Test
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);
64     }
65
66     @Test
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);
71     }
72
73     @Test
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);
80     }
81
82     @Test
83     public void addPolicyToToscaElementSuccessTest(){
84         TitanOperationStatus status = TitanOperationStatus.OK;
85         StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
86         assertThat(result).isEqualTo(StorageOperationStatus.OK);
87     }
88
89     @Test
90     public void addPolicyToToscaElementFailureTest(){
91         TitanOperationStatus status = TitanOperationStatus.ALREADY_EXIST;
92         StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
93         assertThat(result).isEqualTo(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
94     }
95
96     @Test
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);
106     }
107
108     @Test
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));
123     }
124
125     @Test
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>() {
133             @Override
134             public boolean hasNext() {
135                 return false;
136             }
137
138             @Override
139             public Edge next() {
140                 return null;
141             }
142         };
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());
153     }
154
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);
168         int counter = 0;
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);
175     }
176
177 }