UT-TopologyTemplateOperation
[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
30 import java.util.Collections;
31 import java.util.HashMap;
32 import java.util.Iterator;
33 import java.util.Map;
34
35 import static org.assertj.core.api.Assertions.assertThat;
36 import static org.junit.Assert.assertEquals;
37 import static org.mockito.ArgumentMatchers.any;
38 import static org.mockito.ArgumentMatchers.eq;
39 import static org.mockito.Mockito.when;
40
41 @RunWith(MockitoJUnitRunner.class)
42 //error scenarios
43 public class TopologyTemplateOperationTest {
44
45     private static final String CONTAINER_ID = "containerId";
46     @InjectMocks
47     private TopologyTemplateOperation topologyTemplateOperation;
48     @Mock
49     private TitanDao titanDao;
50
51     @Test
52     public void overrideToscaDataOfToscaElement_failedToFetchContainerVertex() {
53         when(titanDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(TitanOperationStatus.INVALID_ID));
54         StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
55         assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
56     }
57
58     @Test
59     public void overrideToscaDataOfToscaElement_failedToFetchDataVertex() {
60         GraphVertex containerVertex = new GraphVertex();
61         when(titanDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
62         when(titanDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
63         StorageOperationStatus storageOperationStatus = topologyTemplateOperation.overrideToscaDataOfToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, Collections.emptyMap());
64         assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
65     }
66
67     @Test
68     public void updateToscaDataDeepElements_failedToFetchContainerVertex() {
69         when(titanDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(TitanOperationStatus.INVALID_ID));
70         StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
71         assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.INVALID_ID);
72     }
73
74     @Test
75     public void updateToscaDataDeepElements_failedToFetchDataVertex() {
76         GraphVertex containerVertex = new GraphVertex();
77         when(titanDao.getVertexById(CONTAINER_ID, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(containerVertex));
78         when(titanDao.getChildVertex(containerVertex, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, JsonParseFlagEnum.ParseJson)).thenReturn(Either.right(TitanOperationStatus.NOT_FOUND));
79         StorageOperationStatus storageOperationStatus = topologyTemplateOperation.updateToscaDataDeepElementsBlockToToscaElement(CONTAINER_ID, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, new MapCapabilityProperty(), "");
80         assertThat(storageOperationStatus).isEqualTo(StorageOperationStatus.NOT_FOUND);
81     }
82
83     @Test
84     public void addPolicyToToscaElementSuccessTest(){
85         TitanOperationStatus status = TitanOperationStatus.OK;
86         StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
87         assertThat(result).isEqualTo(StorageOperationStatus.OK);
88     }
89
90     @Test
91     public void addPolicyToToscaElementFailureTest(){
92         TitanOperationStatus status = TitanOperationStatus.ALREADY_EXIST;
93         StorageOperationStatus result = addPolicyToToscaElementWithStatus(status);
94         assertThat(result).isEqualTo(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
95     }
96
97     @Test
98     public void testAssociateOrAddCalcCapReqToComponent() {
99         StorageOperationStatus result;
100         GraphVertex graphVertex = new GraphVertex();
101         Map<String, MapListRequirementDataDefinition> calcRequirements = new HashMap<>();
102         Map<String, MapListCapabilityDataDefinition> calcCapabilty = new HashMap<>();
103         Map<String, MapCapabilityProperty> calCapabilitiesProps = new HashMap<>();
104         addPolicyToToscaElementWithStatus(TitanOperationStatus.OK);
105         result = topologyTemplateOperation.associateOrAddCalcCapReqToComponent(graphVertex, calcRequirements, calcCapabilty, calCapabilitiesProps);
106         assertEquals(StorageOperationStatus.OK, result);
107     }
108
109     @Test
110     public void testUpdateDistributionStatus() {
111         Either<GraphVertex, StorageOperationStatus> result;
112         String uniqueId = "uniqueId";
113         User user = new User();
114         String userId = "userId";
115         user.setUserId(userId);
116         Iterator<Edge> edgeIterator = new Iterator<Edge>() {
117             @Override
118             public boolean hasNext() {
119                 return false;
120             }
121
122             @Override
123             public Edge next() {
124                 return null;
125             }
126         };
127         GraphVertex graphVertex = Mockito.mock(GraphVertex.class);
128         TitanVertex titanVertex = Mockito.mock(TitanVertex.class);
129         when(graphVertex.getVertex()).thenReturn(titanVertex);
130         when(titanVertex.edges(Direction.IN, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER.name())).thenReturn(edgeIterator);
131         when(titanDao.getVertexByPropertyAndLabel(GraphPropertyEnum.USERID, userId, VertexTypeEnum.USER, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
132         when(titanDao.getVertexById(uniqueId, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.left(graphVertex));
133         when(titanDao.createEdge(graphVertex, graphVertex, EdgeLabelEnum.LAST_DISTRIBUTION_STATE_MODIFIER, null)).thenReturn(TitanOperationStatus.OK);
134         when(titanDao.updateVertex(graphVertex)).thenReturn(Either.left(graphVertex));
135         result = topologyTemplateOperation.updateDistributionStatus(uniqueId, user, DistributionStatusEnum.DISTRIBUTED);
136         assertThat(result.isLeft());
137     }
138
139     @SuppressWarnings("unchecked")
140     private StorageOperationStatus addPolicyToToscaElementWithStatus(TitanOperationStatus status) {
141         GraphVertex componentV = new GraphVertex();
142         componentV.setVertex(Mockito.mock(TitanVertex.class));
143         GraphVertex dataV = new GraphVertex();
144         dataV.setVertex(Mockito.mock(TitanVertex.class));
145         String componentName = "componentName";
146         String componentId = UniqueIdBuilder.buildResourceUniqueId();
147         String policyTypeName = "org.openecomp.policies.placement.valet.Affinity";
148         componentV.setJsonMetadataField(JsonPresentationFields.NAME, componentName);
149         componentV.setUniqueId(componentId);
150         PolicyDefinition policy = new PolicyDefinition();
151         policy.setPolicyTypeName(policyTypeName);
152         int counter = 0;
153         Either<GraphVertex, TitanOperationStatus> toscaDataVertexRes = Either.right(TitanOperationStatus.NOT_FOUND);
154         when(titanDao.getChildVertex(eq(componentV), eq(EdgeLabelEnum.POLICIES), eq(JsonParseFlagEnum.ParseJson))).thenReturn(toscaDataVertexRes);
155         Either<GraphVertex, TitanOperationStatus> createVertex = Either.left(dataV);
156         when(titanDao.createVertex(any(GraphVertex.class))).thenReturn(createVertex);
157         when(titanDao.createEdge(any(TitanVertex.class), any(TitanVertex.class), any(EdgeLabelEnum.class), any(HashMap.class))).thenReturn(status);
158         return topologyTemplateOperation.addPolicyToToscaElement(componentV, policy, counter);
159     }
160
161 }