1 package org.openecomp.sdc.be.model.jsontitan.operations;
4 import org.junit.Before;
6 import org.junit.runner.RunWith;
7 import org.mockito.ArgumentCaptor;
8 import org.mockito.InjectMocks;
9 import org.mockito.Mock;
10 import org.mockito.MockitoAnnotations;
11 import org.mockito.runners.MockitoJUnitRunner;
12 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
13 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
14 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
15 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
16 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
17 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
18 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
19 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
20 import org.openecomp.sdc.be.model.Component;
21 import org.openecomp.sdc.be.model.ComponentParametersView;
22 import org.openecomp.sdc.be.model.PolicyDefinition;
23 import org.openecomp.sdc.be.model.jsontitan.datamodel.TopologyTemplate;
24 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
25 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
27 import java.util.HashMap;
28 import java.util.List;
30 import java.util.stream.Collectors;
31 import java.util.stream.IntStream;
33 import static org.junit.Assert.assertEquals;
34 import static org.junit.Assert.assertTrue;
35 import static org.mockito.ArgumentMatchers.any;
36 import static org.mockito.ArgumentMatchers.anyInt;
37 import static org.mockito.ArgumentMatchers.anyMap;
38 import static org.mockito.ArgumentMatchers.eq;
39 import static org.mockito.Mockito.when;
41 @RunWith(MockitoJUnitRunner.class)
42 public class ToscaOperationFacadeTest {
45 private ToscaOperationFacade testInstance;
48 private TitanDao titanDaoMock;
51 private TopologyTemplateOperation topologyTemplateOperationMock;
54 public void setUp() throws Exception {
55 testInstance = new ToscaOperationFacade();
56 MockitoAnnotations.initMocks(this);
60 @SuppressWarnings("unchecked")
62 public void fetchMetaDataByResourceType() throws Exception {
63 ArgumentCaptor<Map> criteriaCapture = ArgumentCaptor.forClass(Map.class);
64 ArgumentCaptor<Map> criteriaNotCapture = ArgumentCaptor.forClass(Map.class);
65 ComponentParametersView dataFilter = new ComponentParametersView();
66 List<GraphVertex> mockVertices = getMockVertices(2);
67 Either<List<GraphVertex>, TitanOperationStatus> returnedVertices = Either.left(mockVertices);
69 when(titanDaoMock.getByCriteria(eq(null), criteriaCapture.capture(), criteriaNotCapture.capture(), eq(JsonParseFlagEnum.ParseMetadata))).thenReturn(returnedVertices);
70 when(topologyTemplateOperationMock.getToscaElement(mockVertices.get(0), dataFilter)).thenReturn(Either.left(getResourceToscaElement("0")));
71 when(topologyTemplateOperationMock.getToscaElement(mockVertices.get(1), dataFilter)).thenReturn(Either.left(getResourceToscaElement("1")));
72 Either<List<Component>, StorageOperationStatus> fetchedComponents = testInstance.fetchMetaDataByResourceType(ResourceTypeEnum.VF.getValue(), dataFilter);
74 verifyCriteriaForHighestVersionAndVfResourceType(criteriaCapture);
75 verifyCriteriaNotIsDeleted(criteriaNotCapture);
77 assertTrue(fetchedComponents.isLeft());
78 List<Component> cmpts = fetchedComponents.left().value();
79 assertEquals(2, cmpts.size());
80 assertEquals("0", cmpts.get(0).getUniqueId());
81 assertEquals("1", cmpts.get(1).getUniqueId());
84 private void verifyCriteriaForHighestVersionAndVfResourceType(ArgumentCaptor<Map> criteriaCapture) {
85 Map<GraphPropertyEnum, Object> criteria = (Map<GraphPropertyEnum, Object>)criteriaCapture.getValue();
86 assertEquals(2, criteria.size());
87 assertEquals(criteria.get(GraphPropertyEnum.RESOURCE_TYPE), "VF");
88 assertEquals(criteria.get(GraphPropertyEnum.IS_HIGHEST_VERSION), true);
91 private void verifyCriteriaNotIsDeleted(ArgumentCaptor<Map> criteriaNotCapture) {
92 Map<GraphPropertyEnum, Object> notCriteria = (Map<GraphPropertyEnum, Object>)criteriaNotCapture.getValue();
93 assertEquals(1, notCriteria.size());
94 assertEquals(notCriteria.get(GraphPropertyEnum.IS_DELETED), true);
97 @SuppressWarnings("unchecked")
99 public void fetchMetaDataByResourceType_failedToGetData() throws Exception {
100 when(titanDaoMock.getByCriteria(eq(null), anyMap(), anyMap(), eq(JsonParseFlagEnum.ParseMetadata))).thenReturn(Either.right(TitanOperationStatus.GENERAL_ERROR));
101 Either<List<Component>, StorageOperationStatus> fetchedComponents = testInstance.fetchMetaDataByResourceType(ResourceTypeEnum.VF.getValue(), new ComponentParametersView());
102 assertTrue(fetchedComponents.isRight());
103 assertEquals(StorageOperationStatus.GENERAL_ERROR, fetchedComponents.right().value());
107 public void associatePolicyToComponentSuccessTest(){
108 Either<PolicyDefinition, StorageOperationStatus> result = associatePolicyToComponentWithStatus(StorageOperationStatus.OK);
109 assertTrue(result.isLeft());
113 public void associatePolicyToComponentFailureTest(){
114 Either<PolicyDefinition, StorageOperationStatus> result = associatePolicyToComponentWithStatus(StorageOperationStatus.BAD_REQUEST);
115 assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.BAD_REQUEST);
119 public void updatePolicyOfComponentSuccessTest(){
120 Either<PolicyDefinition, StorageOperationStatus> result = updatePolicyOfComponentWithStatus(StorageOperationStatus.OK);
121 assertTrue(result.isLeft());
125 public void updatePolicyOfComponentFailureTest(){
126 Either<PolicyDefinition, StorageOperationStatus> result = updatePolicyOfComponentWithStatus(StorageOperationStatus.NOT_FOUND);
127 assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.NOT_FOUND);
131 public void removePolicyFromComponentSuccessTest(){
132 removePolicyFromComponentWithStatus(StorageOperationStatus.OK);
136 public void removePolicyFromComponentFailureTest(){
137 removePolicyFromComponentWithStatus(StorageOperationStatus.NOT_FOUND);
140 private Either<PolicyDefinition, StorageOperationStatus> associatePolicyToComponentWithStatus(StorageOperationStatus status) {
141 PolicyDefinition policy = new PolicyDefinition();
142 String componentId = "componentId";
145 if(status == StorageOperationStatus.OK){
146 vertex = getTopologyTemplateVertex();
148 vertex = getNodeTypeVertex();
150 Either<GraphVertex, TitanOperationStatus> getVertexEither = Either.left(vertex);
151 when(titanDaoMock.getVertexById(eq(componentId), eq(JsonParseFlagEnum.ParseMetadata))).thenReturn(getVertexEither);
152 when(topologyTemplateOperationMock.addPolicyToToscaElement(eq(vertex), any(PolicyDefinition.class), anyInt())).thenReturn(status);
153 return testInstance.associatePolicyToComponent(componentId, policy, counter);
156 private Either<PolicyDefinition, StorageOperationStatus> updatePolicyOfComponentWithStatus(StorageOperationStatus status) {
157 PolicyDefinition policy = new PolicyDefinition();
158 String componentId = "componentId";
159 GraphVertex vertex = getTopologyTemplateVertex();
160 when(titanDaoMock.getVertexById(eq(componentId), eq(JsonParseFlagEnum.NoParse))).thenReturn(Either.left(vertex));
161 when(topologyTemplateOperationMock.updatePolicyOfToscaElement(eq(vertex), any(PolicyDefinition.class))).thenReturn(status);
162 return testInstance.updatePolicyOfComponent(componentId, policy);
165 private void removePolicyFromComponentWithStatus(StorageOperationStatus status) {
166 String componentId = "componentId";
167 String policyId = "policyId";
168 GraphVertex vertex = getTopologyTemplateVertex();
169 Either<GraphVertex, TitanOperationStatus> getVertexEither = Either.left(vertex);
170 when(titanDaoMock.getVertexById(eq(componentId), eq(JsonParseFlagEnum.NoParse))).thenReturn(getVertexEither);
171 when(topologyTemplateOperationMock.removePolicyFromToscaElement(eq(vertex), eq(policyId))).thenReturn(status);
172 StorageOperationStatus result = testInstance.removePolicyFromComponent(componentId, policyId);
173 assertTrue(result == status);
176 private List<GraphVertex> getMockVertices(int numOfVertices) {
177 return IntStream.range(0, numOfVertices).mapToObj(i -> getTopologyTemplateVertex()).collect(Collectors.toList());
180 private ToscaElement getResourceToscaElement(String id) {
181 ToscaElement toscaElement = new TopologyTemplate();
182 toscaElement.setMetadata(new HashMap<>());
183 toscaElement.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(), "RESOURCE");
184 toscaElement.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), id);
188 private GraphVertex getTopologyTemplateVertex() {
189 GraphVertex graphVertex = new GraphVertex();
190 graphVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
194 private GraphVertex getNodeTypeVertex() {
195 GraphVertex graphVertex = new GraphVertex();
196 graphVertex.setLabel(VertexTypeEnum.NODE_TYPE);