658165c126ab5b8e950510ebc06b3f4e93f9ffd5
[sdc.git] /
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.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;
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.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;
40
41 @RunWith(MockitoJUnitRunner.class)
42 public class ToscaOperationFacadeTest {
43
44     @InjectMocks
45     private ToscaOperationFacade testInstance;
46
47     @Mock
48     private TitanDao titanDaoMock;
49
50     @Mock
51     private TopologyTemplateOperation topologyTemplateOperationMock;
52
53     @Before
54     public void setUp() throws Exception {
55         testInstance = new ToscaOperationFacade();
56         MockitoAnnotations.initMocks(this);
57     }
58
59
60     @SuppressWarnings("unchecked")
61     @Test
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);
68
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);
73
74         verifyCriteriaForHighestVersionAndVfResourceType(criteriaCapture);
75         verifyCriteriaNotIsDeleted(criteriaNotCapture);
76
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());
82     }
83
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);
89     }
90
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);
95     }
96
97     @SuppressWarnings("unchecked")
98     @Test
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());
104     }
105     
106     @Test
107     public void associatePolicyToComponentSuccessTest(){
108         Either<PolicyDefinition, StorageOperationStatus> result = associatePolicyToComponentWithStatus(StorageOperationStatus.OK);
109         assertTrue(result.isLeft());
110     }
111
112         @Test
113     public void associatePolicyToComponentFailureTest(){
114                 Either<PolicyDefinition, StorageOperationStatus> result = associatePolicyToComponentWithStatus(StorageOperationStatus.BAD_REQUEST);
115         assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.BAD_REQUEST);
116     }
117
118     @Test
119     public void updatePolicyOfComponentSuccessTest(){
120         Either<PolicyDefinition, StorageOperationStatus> result = updatePolicyOfComponentWithStatus(StorageOperationStatus.OK);
121         assertTrue(result.isLeft());
122     }
123
124         @Test
125     public void updatePolicyOfComponentFailureTest(){
126                 Either<PolicyDefinition, StorageOperationStatus> result = updatePolicyOfComponentWithStatus(StorageOperationStatus.NOT_FOUND);
127         assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.NOT_FOUND);
128     }
129     
130     @Test
131     public void removePolicyFromComponentSuccessTest(){
132         removePolicyFromComponentWithStatus(StorageOperationStatus.OK);
133     }
134     
135     @Test
136     public void removePolicyFromComponentFailureTest(){
137         removePolicyFromComponentWithStatus(StorageOperationStatus.NOT_FOUND);
138     }
139     
140     private Either<PolicyDefinition, StorageOperationStatus> associatePolicyToComponentWithStatus(StorageOperationStatus status) {
141         PolicyDefinition policy = new PolicyDefinition();
142         String componentId = "componentId";
143         int counter = 0;
144         GraphVertex vertex;
145         if(status == StorageOperationStatus.OK){
146                 vertex = getTopologyTemplateVertex();
147         } else {
148                 vertex = getNodeTypeVertex();
149         }
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);
154     }
155     
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);
163     }
164
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);
174         }
175     
176     private List<GraphVertex> getMockVertices(int numOfVertices) {
177         return IntStream.range(0, numOfVertices).mapToObj(i -> getTopologyTemplateVertex()).collect(Collectors.toList());
178     }
179
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);
185         return toscaElement;
186     }
187
188     private GraphVertex getTopologyTemplateVertex() {
189         GraphVertex graphVertex = new GraphVertex();
190         graphVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
191         return graphVertex;
192     }
193     
194     private GraphVertex getNodeTypeVertex() {
195         GraphVertex graphVertex = new GraphVertex();
196         graphVertex.setLabel(VertexTypeEnum.NODE_TYPE);
197         return graphVertex;
198     }
199 }