851800def8010c96c2729a1dc6fd4f8765e55fb1
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / jsontitan / operations / ToscaOperationFacadeTest.java
1 package org.openecomp.sdc.be.model.jsontitan.operations;
2
3 import fj.data.Either;
4 import org.junit.Before;
5 import org.junit.Test;
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.junit.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;
26
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.stream.Collectors;
31 import java.util.stream.IntStream;
32
33 import static org.junit.Assert.assertEquals;
34 import static org.junit.Assert.assertSame;
35 import static org.junit.Assert.assertTrue;
36 import static org.mockito.ArgumentMatchers.*;
37 import static org.mockito.Mockito.when;
38
39 @RunWith(MockitoJUnitRunner.class)
40 public class ToscaOperationFacadeTest {
41
42     @InjectMocks
43     private ToscaOperationFacade testInstance;
44
45     @Mock
46     private TitanDao titanDaoMock;
47
48     @Mock
49     private TopologyTemplateOperation topologyTemplateOperationMock;
50
51     @Before
52     public void setUp() throws Exception {
53         testInstance = new ToscaOperationFacade();
54         MockitoAnnotations.initMocks(this);
55     }
56
57
58     @SuppressWarnings("unchecked")
59     @Test
60     public void fetchMetaDataByResourceType() throws Exception {
61         ArgumentCaptor<Map> criteriaCapture = ArgumentCaptor.forClass(Map.class);
62         ArgumentCaptor<Map> criteriaNotCapture = ArgumentCaptor.forClass(Map.class);
63         ComponentParametersView dataFilter = new ComponentParametersView();
64         List<GraphVertex> mockVertices = getMockVertices(2);
65         Either<List<GraphVertex>, TitanOperationStatus> returnedVertices = Either.left(mockVertices);
66
67         when(titanDaoMock.getByCriteria(eq(null), criteriaCapture.capture(), criteriaNotCapture.capture(), eq(JsonParseFlagEnum.ParseMetadata))).thenReturn(returnedVertices);
68         when(topologyTemplateOperationMock.getToscaElement(mockVertices.get(0), dataFilter)).thenReturn(Either.left(getResourceToscaElement("0")));
69         when(topologyTemplateOperationMock.getToscaElement(mockVertices.get(1), dataFilter)).thenReturn(Either.left(getResourceToscaElement("1")));
70         Either<List<Component>, StorageOperationStatus> fetchedComponents = testInstance.fetchMetaDataByResourceType(ResourceTypeEnum.VF.getValue(), dataFilter);
71
72         verifyCriteriaForHighestVersionAndVfResourceType(criteriaCapture);
73         verifyCriteriaNotIsDeleted(criteriaNotCapture);
74
75         assertTrue(fetchedComponents.isLeft());
76         List<Component> cmpts = fetchedComponents.left().value();
77         assertEquals(2, cmpts.size());
78         assertEquals("0", cmpts.get(0).getUniqueId());
79         assertEquals("1", cmpts.get(1).getUniqueId());
80     }
81
82     private void verifyCriteriaForHighestVersionAndVfResourceType(ArgumentCaptor<Map> criteriaCapture) {
83         Map<GraphPropertyEnum, Object> criteria = (Map<GraphPropertyEnum, Object>)criteriaCapture.getValue();
84         assertEquals(2, criteria.size());
85         assertEquals(criteria.get(GraphPropertyEnum.RESOURCE_TYPE), "VF");
86         assertEquals(criteria.get(GraphPropertyEnum.IS_HIGHEST_VERSION), true);
87     }
88
89     private void verifyCriteriaNotIsDeleted(ArgumentCaptor<Map> criteriaNotCapture) {
90         Map<GraphPropertyEnum, Object> notCriteria = (Map<GraphPropertyEnum, Object>)criteriaNotCapture.getValue();
91         assertEquals(1, notCriteria.size());
92         assertEquals(notCriteria.get(GraphPropertyEnum.IS_DELETED), true);
93     }
94
95     @SuppressWarnings("unchecked")
96     @Test
97     public void fetchMetaDataByResourceType_failedToGetData() throws Exception {
98         when(titanDaoMock.getByCriteria(eq(null), anyMap(), anyMap(), eq(JsonParseFlagEnum.ParseMetadata))).thenReturn(Either.right(TitanOperationStatus.GENERAL_ERROR));
99         Either<List<Component>, StorageOperationStatus> fetchedComponents = testInstance.fetchMetaDataByResourceType(ResourceTypeEnum.VF.getValue(), new ComponentParametersView());
100         assertTrue(fetchedComponents.isRight());
101         assertEquals(StorageOperationStatus.GENERAL_ERROR, fetchedComponents.right().value());
102     }
103     
104     @Test
105     public void associatePolicyToComponentSuccessTest(){
106         Either<PolicyDefinition, StorageOperationStatus> result = associatePolicyToComponentWithStatus(StorageOperationStatus.OK);
107         assertTrue(result.isLeft());
108     }
109
110     @Test
111     public void associatePolicyToComponentFailureTest(){
112         Either<PolicyDefinition, StorageOperationStatus> result = associatePolicyToComponentWithStatus(StorageOperationStatus.BAD_REQUEST);
113         assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.BAD_REQUEST);
114     }
115
116     @Test
117     public void updatePolicyOfComponentSuccessTest(){
118         Either<PolicyDefinition, StorageOperationStatus> result = updatePolicyOfComponentWithStatus(StorageOperationStatus.OK);
119         assertTrue(result.isLeft());
120     }
121
122     @Test
123     public void updatePolicyOfComponentFailureTest(){
124         Either<PolicyDefinition, StorageOperationStatus> result = updatePolicyOfComponentWithStatus(StorageOperationStatus.NOT_FOUND);
125         assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.NOT_FOUND);
126     }
127     
128     @Test
129     public void removePolicyFromComponentSuccessTest(){
130         removePolicyFromComponentWithStatus(StorageOperationStatus.OK);
131     }
132     
133     @Test
134     public void removePolicyFromComponentFailureTest(){
135         removePolicyFromComponentWithStatus(StorageOperationStatus.NOT_FOUND);
136     }
137     
138     private Either<PolicyDefinition, StorageOperationStatus> associatePolicyToComponentWithStatus(StorageOperationStatus status) {
139         PolicyDefinition policy = new PolicyDefinition();
140         String componentId = "componentId";
141         int counter = 0;
142         GraphVertex vertex;
143         if(status == StorageOperationStatus.OK){
144             vertex = getTopologyTemplateVertex();
145         } else {
146             vertex = getNodeTypeVertex();
147         }
148         Either<GraphVertex, TitanOperationStatus> getVertexEither = Either.left(vertex);
149         when(titanDaoMock.getVertexById(eq(componentId), eq(JsonParseFlagEnum.ParseMetadata))).thenReturn(getVertexEither);
150         when(topologyTemplateOperationMock.addPolicyToToscaElement(eq(vertex), any(PolicyDefinition.class), anyInt())).thenReturn(status);
151         return testInstance.associatePolicyToComponent(componentId, policy, counter);
152     }
153     
154     private Either<PolicyDefinition, StorageOperationStatus> updatePolicyOfComponentWithStatus(StorageOperationStatus status) {
155         PolicyDefinition policy = new PolicyDefinition();
156         String componentId = "componentId";
157         GraphVertex vertex = getTopologyTemplateVertex();
158         when(titanDaoMock.getVertexById(eq(componentId), eq(JsonParseFlagEnum.NoParse))).thenReturn(Either.left(vertex));
159         when(topologyTemplateOperationMock.updatePolicyOfToscaElement(eq(vertex), any(PolicyDefinition.class))).thenReturn(status);
160         return testInstance.updatePolicyOfComponent(componentId, policy);
161     }
162
163     private void removePolicyFromComponentWithStatus(StorageOperationStatus status) {
164         String componentId = "componentId";
165         String policyId = "policyId";
166         GraphVertex vertex = getTopologyTemplateVertex();
167         Either<GraphVertex, TitanOperationStatus> getVertexEither = Either.left(vertex);
168         when(titanDaoMock.getVertexById(eq(componentId), eq(JsonParseFlagEnum.NoParse))).thenReturn(getVertexEither);
169         when(topologyTemplateOperationMock.removePolicyFromToscaElement(eq(vertex), eq(policyId))).thenReturn(status);
170         StorageOperationStatus result = testInstance.removePolicyFromComponent(componentId, policyId);
171         assertSame(result, status);
172     }
173     
174     private List<GraphVertex> getMockVertices(int numOfVertices) {
175         return IntStream.range(0, numOfVertices).mapToObj(i -> getTopologyTemplateVertex()).collect(Collectors.toList());
176     }
177
178     private ToscaElement getResourceToscaElement(String id) {
179         ToscaElement toscaElement = new TopologyTemplate();
180         toscaElement.setMetadata(new HashMap<>());
181         toscaElement.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(), "RESOURCE");
182         toscaElement.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), id);
183         return toscaElement;
184     }
185
186     private GraphVertex getTopologyTemplateVertex() {
187         GraphVertex graphVertex = new GraphVertex();
188         graphVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
189         return graphVertex;
190     }
191     
192     private GraphVertex getNodeTypeVertex() {
193         GraphVertex graphVertex = new GraphVertex();
194         graphVertex.setLabel(VertexTypeEnum.NODE_TYPE);
195         return graphVertex;
196     }
197 }