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