3 * Copyright (c) 2018 AT&T Intellectual Property.
7 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
15 * http://www.apache.org/licenses/LICENSE-2.0
19 * Unless required by applicable law or agreed to in writing, software
21 * distributed under the License is distributed on an "AS IS" BASIS,
23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 * See the License for the specific language governing permissions and
27 * limitations under the License.
30 package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
32 import static org.assertj.core.api.Assertions.assertThat;
33 import static org.junit.Assert.assertEquals;
34 import static org.junit.Assert.assertFalse;
35 import static org.junit.Assert.assertNotNull;
36 import static org.junit.Assert.assertNull;
37 import static org.junit.Assert.assertSame;
38 import static org.junit.Assert.assertTrue;
39 import static org.junit.jupiter.api.Assertions.assertThrows;
40 import static org.mockito.ArgumentMatchers.any;
41 import static org.mockito.ArgumentMatchers.anyInt;
42 import static org.mockito.ArgumentMatchers.anyMap;
43 import static org.mockito.ArgumentMatchers.anyString;
44 import static org.mockito.ArgumentMatchers.eq;
45 import static org.mockito.Mockito.doReturn;
46 import static org.mockito.Mockito.times;
47 import static org.mockito.Mockito.verify;
48 import static org.mockito.Mockito.when;
50 import fj.data.Either;
51 import java.util.ArrayList;
52 import java.util.Arrays;
53 import java.util.Collections;
54 import java.util.EnumMap;
55 import java.util.HashMap;
56 import java.util.HashSet;
57 import java.util.List;
60 import java.util.stream.Collectors;
61 import java.util.stream.IntStream;
62 import org.apache.commons.collections.map.HashedMap;
63 import org.apache.commons.lang3.tuple.ImmutablePair;
64 import org.junit.Before;
65 import org.junit.Test;
66 import org.junit.runner.RunWith;
67 import org.mockito.ArgumentCaptor;
68 import org.mockito.ArgumentMatchers;
69 import org.mockito.InjectMocks;
70 import org.mockito.Mock;
71 import org.mockito.Mockito;
72 import org.mockito.MockitoAnnotations;
73 import org.mockito.junit.MockitoJUnitRunner;
74 import org.openecomp.sdc.be.config.ComponentType;
75 import org.openecomp.sdc.be.dao.api.ActionStatus;
76 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
77 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
78 import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphDao;
79 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
80 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
81 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
82 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
83 import org.openecomp.sdc.be.datatypes.elements.DataTypeDataDefinition;
84 import org.openecomp.sdc.be.datatypes.elements.ListCapabilityDataDefinition;
85 import org.openecomp.sdc.be.datatypes.elements.ListRequirementDataDefinition;
86 import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
87 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
88 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
89 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
90 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
91 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
92 import org.openecomp.sdc.be.datatypes.enums.PromoteVersionEnum;
93 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
94 import org.openecomp.sdc.be.model.AttributeDefinition;
95 import org.openecomp.sdc.be.model.Component;
96 import org.openecomp.sdc.be.model.ComponentInstance;
97 import org.openecomp.sdc.be.model.ComponentInstanceAttribute;
98 import org.openecomp.sdc.be.model.ComponentInstanceOutput;
99 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
100 import org.openecomp.sdc.be.model.ComponentParametersView;
101 import org.openecomp.sdc.be.model.DataTypeDefinition;
102 import org.openecomp.sdc.be.model.LifecycleStateEnum;
103 import org.openecomp.sdc.be.model.OutputDefinition;
104 import org.openecomp.sdc.be.model.PolicyDefinition;
105 import org.openecomp.sdc.be.model.PropertyDefinition;
106 import org.openecomp.sdc.be.model.Resource;
107 import org.openecomp.sdc.be.model.Service;
108 import org.openecomp.sdc.be.model.User;
109 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.NodeType;
110 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.TopologyTemplate;
111 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElement;
112 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElementTypeEnum;
113 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception.OperationException;
114 import org.openecomp.sdc.be.model.jsonjanusgraph.utils.ModelConverter;
115 import org.openecomp.sdc.be.model.operations.StorageException;
116 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
117 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
119 @RunWith(MockitoJUnitRunner.class)
120 public class ToscaOperationFacadeTest {
122 private static final String COMPONENT_ID = "componentId";
123 private static final String PROPERTY1_NAME = "prop1";
124 private static final String PROPERTY1_TYPE = "string";
125 private static final String PROPERTY2_NAME = "prop2";
126 private static final String PROPERTY2_TYPE = "integer";
127 private static final String ICON_NAME = "icon";
128 private static final String SERVICE_MODEL_NAME = "Test_Service";
129 private static final String SERVICE_PROXY_INSTANCE0_NAME = "testservice_proxy0";
130 private static final String SERVICE_SUBSTITUTION_INSTANCE0_NAME = "testservice0";
133 private ToscaOperationFacade testInstance;
136 private HealingJanusGraphDao janusGraphDaoMock;
139 private TopologyTemplateOperation topologyTemplateOperationMock;
142 private NodeTypeOperation nodeTypeOperationMock;
145 private NodeTemplateOperation nodeTemplateOperationMock;
148 private IGraphLockOperation graphLockOperationMock;
151 public void setUp() throws Exception {
152 testInstance = new ToscaOperationFacade();
153 MockitoAnnotations.openMocks(this);
156 @SuppressWarnings("unchecked")
158 public void fetchMetaDataByResourceType() throws Exception {
159 ArgumentCaptor<Map> criteriaCapture = ArgumentCaptor.forClass(Map.class);
160 ArgumentCaptor<Map> criteriaNotCapture = ArgumentCaptor.forClass(Map.class);
161 ComponentParametersView dataFilter = new ComponentParametersView();
162 List<GraphVertex> mockVertices = getMockVertices(2);
163 Either<List<GraphVertex>, JanusGraphOperationStatus> returnedVertices = Either.left(mockVertices);
165 when(janusGraphDaoMock.getByCriteria(eq(null), criteriaCapture.capture(), criteriaNotCapture.capture(), eq(JsonParseFlagEnum.ParseMetadata)))
166 .thenReturn(returnedVertices);
167 when(topologyTemplateOperationMock.getToscaElement(mockVertices.get(0), dataFilter)).thenReturn(Either.left(getResourceToscaElement("0")));
168 when(topologyTemplateOperationMock.getToscaElement(mockVertices.get(1), dataFilter)).thenReturn(Either.left(getResourceToscaElement("1")));
169 Either<List<Component>, StorageOperationStatus> fetchedComponents = testInstance
170 .fetchMetaDataByResourceType(ResourceTypeEnum.VF.getValue(), dataFilter);
172 verifyCriteriaForHighestVersionAndVfResourceType(criteriaCapture);
173 verifyCriteriaNotIsDeleted(criteriaNotCapture);
175 assertTrue(fetchedComponents.isLeft());
176 List<Component> cmpts = fetchedComponents.left().value();
177 assertEquals(2, cmpts.size());
178 assertEquals("0", cmpts.get(0).getUniqueId());
179 assertEquals("1", cmpts.get(1).getUniqueId());
182 private void verifyCriteriaForHighestVersionAndVfResourceType(ArgumentCaptor<Map> criteriaCapture) {
183 Map<GraphPropertyEnum, Object> criteria = (Map<GraphPropertyEnum, Object>) criteriaCapture.getValue();
184 assertEquals(2, criteria.size());
185 assertEquals("VF", criteria.get(GraphPropertyEnum.RESOURCE_TYPE));
186 assertEquals(true, criteria.get(GraphPropertyEnum.IS_HIGHEST_VERSION));
189 private void verifyCriteriaNotIsDeleted(ArgumentCaptor<Map> criteriaNotCapture) {
190 Map<GraphPropertyEnum, Object> notCriteria = (Map<GraphPropertyEnum, Object>) criteriaNotCapture.getValue();
191 assertEquals(1, notCriteria.size());
192 assertEquals(true, notCriteria.get(GraphPropertyEnum.IS_DELETED));
195 @SuppressWarnings("unchecked")
197 public void fetchMetaDataByResourceType_failedToGetData() throws Exception {
198 when(janusGraphDaoMock.getByCriteria(eq(null), anyMap(), anyMap(), eq(JsonParseFlagEnum.ParseMetadata))).thenReturn(Either.right(
199 JanusGraphOperationStatus.GENERAL_ERROR));
200 Either<List<Component>, StorageOperationStatus> fetchedComponents = testInstance
201 .fetchMetaDataByResourceType(ResourceTypeEnum.VF.getValue(), new ComponentParametersView());
202 assertTrue(fetchedComponents.isRight());
203 assertEquals(StorageOperationStatus.GENERAL_ERROR, fetchedComponents.right().value());
207 public void associatePolicyToComponentSuccessTest() {
208 Either<PolicyDefinition, StorageOperationStatus> result = associatePolicyToComponentWithStatus(StorageOperationStatus.OK);
209 assertTrue(result.isLeft());
213 public void associatePolicyToComponentFailureTest() {
214 Either<PolicyDefinition, StorageOperationStatus> result = associatePolicyToComponentWithStatus(StorageOperationStatus.BAD_REQUEST);
215 assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.BAD_REQUEST);
219 public void updatePolicyOfComponentSuccessTest() {
220 Either<PolicyDefinition, StorageOperationStatus> result = updatePolicyOfComponentWithStatus(StorageOperationStatus.OK);
221 assertTrue(result.isLeft());
225 public void updatePolicyOfComponentFailureTest() {
226 Either<PolicyDefinition, StorageOperationStatus> result = updatePolicyOfComponentWithStatus(StorageOperationStatus.NOT_FOUND);
227 assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.NOT_FOUND);
231 public void removePolicyFromComponentSuccessTest() {
232 removePolicyFromComponentWithStatus(StorageOperationStatus.OK);
236 public void removePolicyFromComponentFailureTest() {
237 removePolicyFromComponentWithStatus(StorageOperationStatus.NOT_FOUND);
241 public void testFindLastCertifiedToscaElementByUUID() {
242 Either<Component, StorageOperationStatus> result;
243 Component component = new Resource();
244 List<GraphVertex> list = new ArrayList<>();
245 GraphVertex graphVertex = getTopologyTemplateVertex();
246 list.add(graphVertex);
247 Map<GraphPropertyEnum, Object> props = new EnumMap<>(GraphPropertyEnum.class);
248 props.put(GraphPropertyEnum.UUID, component.getUUID());
249 props.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
250 props.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
251 ToscaElement toscaElement = getToscaElementForTest();
252 when(topologyTemplateOperationMock.getToscaElement(ArgumentMatchers.eq(graphVertex), any(ComponentParametersView.class)))
253 .thenReturn(Either.left(toscaElement));
254 when(janusGraphDaoMock.getByCriteria(ModelConverter.getVertexType(component), props)).thenReturn(Either.left(list));
255 result = testInstance.findLastCertifiedToscaElementByUUID(component);
256 Component resultComp = result.left().value();
257 assertEquals(resultComp.getToscaType(), ToscaElementTypeEnum.TOPOLOGY_TEMPLATE.getValue());
261 public void testLatestComponentByToscaResourceName() {
262 Either<Component, StorageOperationStatus> result;
263 TopologyTemplate toscaElement = new TopologyTemplate();
264 toscaElement.setComponentType(ComponentTypeEnum.SERVICE);
265 List<GraphVertex> list = new ArrayList<>();
266 GraphVertex graphVertex = getTopologyTemplateVertex();
267 Map<GraphPropertyEnum, Object> props = new HashMap<>();
268 props.put(GraphPropertyEnum.VERSION, "1.0");
269 graphVertex.setMetadataProperties(props);
270 list.add(graphVertex);
272 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
273 Map<GraphPropertyEnum, Object> propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class);
274 propertiesToMatch.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, "toscaResourceName");
275 propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
276 propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true);
278 when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll, null))
279 .thenReturn(Either.left(list));
280 when(topologyTemplateOperationMock.getToscaElement(ArgumentMatchers.eq(graphVertex), any(ComponentParametersView.class)))
281 .thenReturn(Either.left(toscaElement));
283 result = testInstance.getFullLatestComponentByToscaResourceName("toscaResourceName");
284 assertTrue(result.isLeft());
288 public void testValidateCsarUuidUniqueness() {
289 StorageOperationStatus result;
290 String csarUUID = "csarUUID";
291 Map<GraphPropertyEnum, Object> properties = new EnumMap<>(GraphPropertyEnum.class);
292 properties.put(GraphPropertyEnum.CSAR_UUID, csarUUID);
293 List<GraphVertex> vertexList = new ArrayList<>();
294 when(janusGraphDaoMock.getByCriteria(null, properties, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.left(vertexList));
295 result = testInstance.validateCsarUuidUniqueness(csarUUID);
296 assertEquals(StorageOperationStatus.ENTITY_ALREADY_EXISTS, result);
300 public void testValidateCsarUuidUnique_true() {
301 StorageOperationStatus result;
302 String csarUUID = "csarUUID";
303 Map<GraphPropertyEnum, Object> properties = new EnumMap<>(GraphPropertyEnum.class);
304 properties.put(GraphPropertyEnum.CSAR_UUID, csarUUID);
305 when(janusGraphDaoMock.getByCriteria(null, properties, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.right(
306 JanusGraphOperationStatus.NOT_FOUND));
307 result = testInstance.validateCsarUuidUniqueness(csarUUID);
308 assertEquals(StorageOperationStatus.OK, result);
312 public void testGetLatestCertiNodeTypeByToscaResourceName() {
313 Either<Resource, StorageOperationStatus> result;
314 String toscaResourceName = "resourceName";
315 String uniqueId = "uniqueId";
316 GraphVertex graphVertex = getTopologyTemplateVertex();
317 graphVertex.setJsonMetadataField(JsonPresentationFields.VERSION, "1.0");
318 graphVertex.setUniqueId(uniqueId);
319 List<GraphVertex> vertexList = new ArrayList<>();
320 vertexList.add(graphVertex);
321 Map<GraphPropertyEnum, Object> props = new EnumMap<>(GraphPropertyEnum.class);
322 props.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, toscaResourceName);
323 props.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
324 props.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
325 ToscaElement topologyTemplate = new TopologyTemplate();
326 topologyTemplate.setComponentType(ComponentTypeEnum.SERVICE);
327 when(janusGraphDaoMock.getByCriteria(VertexTypeEnum.NODE_TYPE, props, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.left(vertexList));
328 when(janusGraphDaoMock.getVertexById(uniqueId, JsonParseFlagEnum.ParseAll)).thenReturn(Either.left(graphVertex));
329 when(topologyTemplateOperationMock.getToscaElement(any(GraphVertex.class), any(ComponentParametersView.class)))
330 .thenReturn(Either.left(topologyTemplate));
331 result = testInstance.getLatestCertifiedNodeTypeByToscaResourceName(toscaResourceName);
332 assertTrue(result.isLeft());
336 public void testValidateCompExists() {
337 Either<Boolean, StorageOperationStatus> result;
338 String componentId = "componentId";
339 GraphVertex graphVertex = getTopologyTemplateVertex();
340 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
341 result = testInstance.validateComponentExists(componentId);
342 assertEquals(true, result.left().value());
346 public void testValidateCompExists_NotFound() {
347 Either<Boolean, StorageOperationStatus> result;
348 String componentId = "componentId";
349 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(
350 JanusGraphOperationStatus.NOT_FOUND));
351 result = testInstance.validateComponentExists(componentId);
352 assertEquals(false, result.left().value());
356 public void testValidateToscaResourceNameExists() {
357 Either<Boolean, StorageOperationStatus> result;
358 String templateName = "templateName";
359 Map<GraphPropertyEnum, Object> properties = new EnumMap<>(GraphPropertyEnum.class);
360 properties.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, templateName);
361 List<GraphVertex> graphVertexList = new ArrayList<>();
362 GraphVertex graphVertex = getTopologyTemplateVertex();
363 graphVertexList.add(graphVertex);
364 when(janusGraphDaoMock.getByCriteria(null, properties, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.left(graphVertexList));
365 result = testInstance.validateToscaResourceNameExists(templateName);
366 assertEquals(true, result.left().value());
370 public void testValidateToscaResourceNameExists_false() {
371 Either<Boolean, StorageOperationStatus> result;
372 String templateName = "templateName";
373 Map<GraphPropertyEnum, Object> properties = new EnumMap<>(GraphPropertyEnum.class);
374 properties.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, templateName);
375 List<GraphVertex> graphVertexList = new ArrayList<>();
376 GraphVertex graphVertex = getTopologyTemplateVertex();
377 graphVertexList.add(graphVertex);
378 when(janusGraphDaoMock.getByCriteria(null, properties, JsonParseFlagEnum.ParseMetadata)).thenReturn(Either.right(
379 JanusGraphOperationStatus.NOT_FOUND));
380 result = testInstance.validateToscaResourceNameExists(templateName);
381 assertEquals(false, result.left().value());
385 public void testOverrideComponent() {
386 Either<Resource, StorageOperationStatus> result;
387 Resource resource = new Resource();
389 resource.setUniqueId(id);
390 GraphVertex graphVertex = getTopologyTemplateVertex();
391 graphVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
392 NodeType nodeType = new NodeType();
393 nodeType.setComponentType(ComponentTypeEnum.RESOURCE);
394 ToscaElement toscaElement = new TopologyTemplate();
395 toscaElement.setComponentType(ComponentTypeEnum.SERVICE);
396 when(janusGraphDaoMock.getVertexById(id, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
397 when(janusGraphDaoMock.getParentVertex(graphVertex, EdgeLabelEnum.VERSION, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
398 when(topologyTemplateOperationMock.deleteToscaElement(graphVertex)).thenReturn(Either.left(toscaElement));
399 when(nodeTypeOperationMock.createToscaElement(any(ToscaElement.class))).thenReturn(Either.left(nodeType));
400 when(janusGraphDaoMock.getVertexById(null, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(graphVertex));
401 when(janusGraphDaoMock.createEdge(graphVertex, graphVertex, EdgeLabelEnum.VERSION, null)).thenReturn(
402 JanusGraphOperationStatus.OK);
403 result = testInstance.overrideComponent(resource, resource);
404 assertTrue(result.isLeft());
408 public void testGetToscaElement() {
409 Either<Component, StorageOperationStatus> result;
411 GraphVertex graphVertex = getTopologyTemplateVertex();
412 ToscaElement toscaElement = getToscaElementForTest();
413 when(janusGraphDaoMock.getVertexById(id, JsonParseFlagEnum.ParseAll)).thenReturn(Either.left(graphVertex));
414 when(topologyTemplateOperationMock.getToscaElement(any(GraphVertex.class), any(ComponentParametersView.class)))
415 .thenReturn(Either.left(toscaElement));
416 result = testInstance.getToscaElement(id, JsonParseFlagEnum.ParseAll);
417 assertTrue(result.isLeft());
421 public void testDeleteService_ServiceInUse() {
422 String invariantUUID = "12345";
423 String serviceUid = "1";
424 GraphVertex service1 = getTopologyTemplateVertex();
425 service1.setUniqueId(serviceUid);
426 List<GraphVertex> allResourcesToDelete = new ArrayList<>();
427 allResourcesToDelete.add(service1);
428 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
429 propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID);
430 ToscaElement toscaElement = getToscaElementForTest();
431 toscaElement.setUniqueId(serviceUid);
432 String service2Name = "service2Name";
433 Map<String, Object> service2MetadataJson = new HashMap<>();
434 service2MetadataJson.put(GraphPropertyEnum.COMPONENT_TYPE.getProperty(), ComponentType.SERVICE);
435 service2MetadataJson.put(GraphPropertyEnum.NAME.getProperty(), service2Name);
436 String service2Uid = "2";
437 GraphVertex usingService = getTopologyTemplateVertex();
438 usingService.setUniqueId(service2Uid);
439 usingService.setMetadataJson(service2MetadataJson);
440 List<GraphVertex> inUseBy = new ArrayList<>();
441 inUseBy.add(usingService);
443 when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)).
444 thenReturn(Either.left(allResourcesToDelete));
445 doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock).getToscaElement(eq(service1), any(ComponentParametersView.class));
446 when(topologyTemplateOperationMock.
447 getComponentByLabelAndId(serviceUid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)).
448 thenReturn(Either.left(service1));
449 when(janusGraphDaoMock.getParentVertices(any(GraphVertex.class), any(), eq(JsonParseFlagEnum.ParseAll))).
450 thenReturn(Either.left(inUseBy)).thenReturn(Either.left(inUseBy));
451 final OperationException actualException = assertThrows(OperationException.class, () -> testInstance.deleteService(invariantUUID, true));
452 assertEquals(actualException.getActionStatus(), ActionStatus.COMPONENT_IN_USE_BY_ANOTHER_COMPONENT);
453 assertEquals(actualException.getParams()[0], ComponentType.SERVICE + " " + service2Name);
457 public void testDeleteService_WithOneVersion() {
458 String invariantUUID = "12345";
459 String serviceUid = "1";
460 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
461 propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID);
462 GraphVertex service1 = getTopologyTemplateVertex();
463 service1.setUniqueId(serviceUid);
464 List<GraphVertex> allResourcesToDelete = new ArrayList<>();
465 allResourcesToDelete.add(service1);
466 ToscaElement toscaElement = getToscaElementForTest();
467 toscaElement.setUniqueId(serviceUid);
468 List<String> affectedComponentIds = new ArrayList<>();
469 affectedComponentIds.add(service1.getUniqueId());
471 when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)).
472 thenReturn(Either.left(allResourcesToDelete));
473 doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock).getToscaElement(eq(service1), any(ComponentParametersView.class));
474 when(topologyTemplateOperationMock.
475 getComponentByLabelAndId(serviceUid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)).
476 thenReturn(Either.left(service1));
477 when(janusGraphDaoMock.getParentVertices(eq(service1), any(), eq(JsonParseFlagEnum.ParseAll))).
478 thenReturn(Either.right(JanusGraphOperationStatus.OK));
479 when(graphLockOperationMock.lockComponent(service1.getUniqueId(), NodeTypeEnum.Service)).
480 thenReturn(StorageOperationStatus.OK);
481 when(topologyTemplateOperationMock.deleteToscaElement(service1)).thenReturn(Either.left(toscaElement));
482 assertEquals(affectedComponentIds, testInstance.deleteService(invariantUUID, true));
486 public void testDeleteService_WithTwoVersions() {
487 String invariantUUID = "12345";
488 String serviceUid = "1";
489 String service2Uid = "2";
490 GraphVertex service = getTopologyTemplateVertex();
491 service.setUniqueId(serviceUid);
492 GraphVertex serviceV2 = getTopologyTemplateVertex();
493 serviceV2.setUniqueId(service2Uid);
494 ToscaElement toscaElement = getToscaElementForTest();
495 toscaElement.setUniqueId(serviceUid);
496 ToscaElement toscaElement2 = getToscaElementForTest();
497 toscaElement2.setUniqueId(service2Uid);
498 List<String> affectedComponentIds = new ArrayList<>();
499 affectedComponentIds.add(service.getUniqueId());
500 affectedComponentIds.add(serviceV2.getUniqueId());
501 List<GraphVertex> allResourcesToDelete = new ArrayList<>();
502 allResourcesToDelete.add(service);
503 allResourcesToDelete.add(serviceV2);
504 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
505 propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID);
507 when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)).
508 thenReturn(Either.left(allResourcesToDelete));
509 doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock).
510 getToscaElement(eq(service), any(ComponentParametersView.class));
511 doReturn(Either.left(toscaElement2)).when(topologyTemplateOperationMock).
512 getToscaElement(eq(serviceV2), any(ComponentParametersView.class));
513 when(topologyTemplateOperationMock.
514 getComponentByLabelAndId(serviceUid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)).
515 thenReturn(Either.left(service));
516 when(topologyTemplateOperationMock.
517 getComponentByLabelAndId(service2Uid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)).
518 thenReturn(Either.left(serviceV2));
519 when(janusGraphDaoMock.getParentVertices(any(GraphVertex.class), any(), eq(JsonParseFlagEnum.ParseAll))).
520 thenReturn(Either.right(JanusGraphOperationStatus.OK));
521 when(graphLockOperationMock.lockComponent(service.getUniqueId(), NodeTypeEnum.Service)).
522 thenReturn(StorageOperationStatus.OK);
523 when(graphLockOperationMock.lockComponent(serviceV2.getUniqueId(), NodeTypeEnum.Service)).
524 thenReturn(StorageOperationStatus.OK);
525 when(topologyTemplateOperationMock.deleteToscaElement(service)).thenReturn(Either.left(toscaElement));
526 when(topologyTemplateOperationMock.deleteToscaElement(serviceV2)).thenReturn(Either.left(toscaElement));
527 assertEquals(affectedComponentIds, testInstance.deleteService(invariantUUID, true));
531 public void testDeleteService_FailDelete() {
532 String invariantUUID = "12345";
533 String serviceUid = "1";
534 GraphVertex service = getTopologyTemplateVertex();
535 service.setUniqueId(serviceUid);
536 ToscaElement toscaElement = getToscaElementForTest();
537 toscaElement.setUniqueId(serviceUid);
538 List<GraphVertex> allResourcesToDelete = new ArrayList<>();
539 allResourcesToDelete.add(service);
540 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
541 propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID);
543 when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)).
544 thenReturn(Either.left(allResourcesToDelete));
545 doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock).getToscaElement(eq(service), any(ComponentParametersView.class));
546 when(topologyTemplateOperationMock.getComponentByLabelAndId(serviceUid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)).
547 thenReturn(Either.left(service));
548 when(janusGraphDaoMock.getParentVertices(eq(service), any(), eq(JsonParseFlagEnum.ParseAll))).
549 thenReturn(Either.right(JanusGraphOperationStatus.OK));
550 when(graphLockOperationMock.lockComponent(service.getUniqueId(), NodeTypeEnum.Service)).
551 thenReturn(StorageOperationStatus.OK);
552 when(topologyTemplateOperationMock.deleteToscaElement(service))
553 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
554 assertThrows(StorageException.class, () -> testInstance.deleteService(invariantUUID, true));
558 public void testDeleteService_NotFound() {
559 String invariantUUID = "12345";
560 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
561 propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID);
562 when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)).
563 thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
564 assertThrows(StorageException.class, () -> testInstance.deleteService(invariantUUID, true));
568 public void testMarkComponentToDelete() {
569 StorageOperationStatus result;
570 Component component = new Resource();
572 component.setUniqueId(id);
573 GraphVertex graphVertex = getTopologyTemplateVertex();
574 when(janusGraphDaoMock.getVertexById(id, JsonParseFlagEnum.ParseAll)).thenReturn(Either.left(graphVertex));
575 when(nodeTypeOperationMock.markComponentToDelete(graphVertex)).thenReturn(Either.left(graphVertex));
576 result = testInstance.markComponentToDelete(component);
577 assertEquals(StorageOperationStatus.OK, result);
581 public void testDelToscaComponent() {
582 Either<Component, StorageOperationStatus> result;
583 String componentId = "compId";
584 GraphVertex graphVertex = getTopologyTemplateVertex();
585 ToscaElement toscaElement = getToscaElementForTest();
586 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.ParseAll)).thenReturn(Either.left(graphVertex));
587 when(topologyTemplateOperationMock.deleteToscaElement(graphVertex)).thenReturn(Either.left(toscaElement));
588 result = testInstance.deleteToscaComponent(componentId);
589 assertTrue(result.isLeft());
593 public void testGetLatestByToscaResourceName() {
594 Either<Component, StorageOperationStatus> result;
595 String toscaResourceName = "name";
596 String model = "testModel";
597 ToscaElement toscaElement = getToscaElementForTest();
599 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
600 propertiesToMatch.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, toscaResourceName);
601 propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
602 Map<GraphPropertyEnum, Object> propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class);
603 propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true);
605 List<GraphVertex> graphVertexList = new ArrayList<>();
606 GraphVertex graphVertex = getTopologyTemplateVertex();
607 graphVertex.setUniqueId(toscaResourceName);
608 Map<GraphPropertyEnum, Object> props = new HashMap<>();
609 props.put(GraphPropertyEnum.VERSION, "1.0");
610 graphVertex.setMetadataProperties(props);
611 graphVertexList.add(graphVertex);
613 when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseMetadata, model))
614 .thenReturn(Either.left(graphVertexList));
615 when(topologyTemplateOperationMock.getToscaElement(any(GraphVertex.class), any(ComponentParametersView.class)))
616 .thenReturn(Either.left(toscaElement));
617 result = testInstance.getLatestByToscaResourceName(toscaResourceName, model);
618 assertTrue(result.isLeft());
623 public void testGetLatestResourceByToscaResourceName() {
624 Either<Resource, StorageOperationStatus> result;
625 String toscaResourceName = "org.openecomp.resource.vf";
626 ToscaElement toscaElement = getToscaElementForTest();
628 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
629 propertiesToMatch.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, toscaResourceName);
630 propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true);
631 if (!toscaResourceName.contains("org.openecomp.resource.vf")) {
632 propertiesToMatch.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
635 List<GraphVertex> graphVertexList = new ArrayList<>();
636 GraphVertex graphVertex = getTopologyTemplateVertex();
637 graphVertex.setUniqueId(toscaResourceName);
638 Map<JsonPresentationFields, Object> props = new HashMap<>();
639 props.put(JsonPresentationFields.VERSION, "1.0");
640 graphVertex.setJsonMetadataField(JsonPresentationFields.VERSION, props.get(JsonPresentationFields.VERSION));
641 graphVertexList.add(graphVertex);
643 when(janusGraphDaoMock.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, propertiesToMatch, JsonParseFlagEnum.ParseMetadata))
644 .thenReturn(Either.left(graphVertexList));
645 when(topologyTemplateOperationMock.getToscaElement(any(GraphVertex.class), any(ComponentParametersView.class)))
646 .thenReturn(Either.left(toscaElement));
648 when(janusGraphDaoMock.getVertexById(toscaResourceName, JsonParseFlagEnum.ParseAll)).thenReturn(Either.left(graphVertex));
650 result = testInstance.getLatestResourceByToscaResourceName(toscaResourceName);
651 assertTrue(result.isLeft());
655 public void testGetFollowed() {
656 Either<Set<Component>, StorageOperationStatus> result;
657 String userId = "id";
658 Set<LifecycleStateEnum> lifecycleStates = new HashSet<>();
659 Set<LifecycleStateEnum> lastStateStates = new HashSet<>();
660 lifecycleStates.add(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
661 lifecycleStates.add(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
662 lifecycleStates.add(LifecycleStateEnum.CERTIFIED);
663 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
664 List<ToscaElement> toscaEleList = new ArrayList<>();
665 ToscaElement toscaElement = getToscaElementForTest();
666 toscaEleList.add(toscaElement);
667 when(nodeTypeOperationMock.getFollowedComponent(userId, lifecycleStates, lastStateStates, componentType))
668 .thenReturn(Either.left(toscaEleList));
669 result = testInstance.getFollowed(userId, lifecycleStates, lastStateStates, componentType);
670 assertTrue(result.isLeft());
671 assertEquals(1, result.left().value().size());
675 public void testGetBySystemName() {
676 Either<List<Component>, StorageOperationStatus> result;
677 String sysName = "sysName";
678 ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE;
679 ToscaElement toscaElement = getToscaElementForTest();
680 List<GraphVertex> componentVertices = new ArrayList<>();
681 GraphVertex graphVertex = getTopologyTemplateVertex();
682 componentVertices.add(graphVertex);
683 Map<GraphPropertyEnum, Object> propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class);
684 Map<GraphPropertyEnum, Object> propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class);
686 propertiesToMatch.put(GraphPropertyEnum.SYSTEM_NAME, sysName);
687 propertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, componentTypeEnum.name());
689 propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true);
691 when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll))
692 .thenReturn(Either.left(componentVertices));
693 when(topologyTemplateOperationMock.getToscaElement(any(GraphVertex.class), any(ComponentParametersView.class)))
694 .thenReturn(Either.left(toscaElement));
695 result = testInstance.getBySystemName(componentTypeEnum, sysName);
696 assertTrue(result.isLeft());
697 assertEquals(1, result.left().value().size());
701 public void testGetCompByNameAndVersion() {
702 Either<Component, StorageOperationStatus> result;
703 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
704 String name = "name";
705 String version = "1.0";
706 JsonParseFlagEnum parseFlag = JsonParseFlagEnum.ParseAll;
707 List<GraphVertex> graphVertexList = new ArrayList<>();
708 GraphVertex graphVertex = getTopologyTemplateVertex();
709 graphVertexList.add(graphVertex);
710 ToscaElement toscaElement = getToscaElementForTest();
711 Map<GraphPropertyEnum, Object> hasProperties = new EnumMap<>(GraphPropertyEnum.class);
712 Map<GraphPropertyEnum, Object> hasNotProperties = new EnumMap<>(GraphPropertyEnum.class);
714 hasProperties.put(GraphPropertyEnum.NAME, name);
715 hasProperties.put(GraphPropertyEnum.VERSION, version);
716 hasNotProperties.put(GraphPropertyEnum.IS_DELETED, true);
717 hasProperties.put(GraphPropertyEnum.COMPONENT_TYPE, componentType.name());
718 when(janusGraphDaoMock.getByCriteria(null, hasProperties, hasNotProperties, parseFlag)).thenReturn(Either.left(graphVertexList));
719 when(topologyTemplateOperationMock.getToscaElement(any(GraphVertex.class), any(ComponentParametersView.class)))
720 .thenReturn(Either.left(toscaElement));
721 result = testInstance.getComponentByNameAndVersion(componentType, name, version, parseFlag);
722 assertTrue(result.isLeft());
725 private ToscaElement getToscaElementForTest() {
726 ToscaElement toscaElement = new TopologyTemplate();
727 toscaElement.setComponentType(ComponentTypeEnum.RESOURCE);
732 public void addDataTypesToComponentSuccessTest() {
733 Either<List<DataTypeDefinition>, StorageOperationStatus> result = addDataTypesToComponentWithStatus(StorageOperationStatus.OK);
734 assertTrue(result.isLeft());
738 public void addDataTypesToComponentFailureTest_BadRequest() {
739 Either<List<DataTypeDefinition>, StorageOperationStatus> result = addDataTypesToComponentWithStatus(StorageOperationStatus.BAD_REQUEST);
740 assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.BAD_REQUEST);
743 private Either<List<DataTypeDefinition>, StorageOperationStatus> addDataTypesToComponentWithStatus(StorageOperationStatus status) {
744 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
745 String componentId = "componentid";
748 PropertyDefinition noDefaultProp = new PropertyDefinition();
749 noDefaultProp.setName("noDefaultProp");
750 PropertyDefinition prop1 = new PropertyDefinition();
751 prop1.setDefaultValue("def1");
752 prop1.setName("prop1");
753 PropertyDefinition prop2 = new PropertyDefinition();
754 prop2.setType("dataType1");
755 prop2.setName("prop2");
756 PropertyDefinition prop3 = new PropertyDefinition();
757 prop3.setDefaultValue("def3");
758 prop3.setName("prop3");
760 DataTypeDefinition noDefaultValue = new DataTypeDefinition();
761 noDefaultValue.setProperties(Collections.singletonList(noDefaultProp));
762 noDefaultValue.setDerivedFromName("name0");
764 DataTypeDefinition dataType1 = new DataTypeDefinition();
765 dataType1.setProperties(Arrays.asList(prop1, prop3));
766 dataType1.setName("name1");
767 dataType1.setDerivedFromName("derivedfromname1");
769 DataTypeDefinition dataType2 = new DataTypeDefinition();
770 dataType2.setDerivedFrom(dataType1);
771 dataType2.setName("name2");
772 dataType2.setDerivedFromName("derivedfromname2");
774 DataTypeDefinition dataType3 = new DataTypeDefinition();
775 dataType3.setProperties(Collections.singletonList(prop2));
776 dataType3.setDerivedFrom(noDefaultValue);
777 dataType3.setName("name3");
778 dataType3.setDerivedFromName("derivedfromname3");
780 dataTypes.put("noDefault", noDefaultValue);
781 dataTypes.put("dataType1", dataType1);
782 dataTypes.put("dataType2", dataType2);
783 dataTypes.put("dataType3", dataType3);
786 if (status == StorageOperationStatus.OK) {
787 vertex = getTopologyTemplateVertex();
789 vertex = getNodeTypeVertex();
791 Either<GraphVertex, JanusGraphOperationStatus> getVertexEither = Either.left(vertex);
792 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(getVertexEither);
793 when(topologyTemplateOperationMock.addToscaDataToToscaElement(eq(vertex),
794 eq(EdgeLabelEnum.DATA_TYPES), eq(VertexTypeEnum.DATA_TYPES), anyMap(), eq(JsonPresentationFields.NAME))).thenReturn(status);
795 return testInstance.addDataTypesToComponent(dataTypes, componentId);
799 public void testDataTypesToComponentFailureTest_NotFound() {
800 Either<List<DataTypeDefinition>, StorageOperationStatus> result;
801 String componentId = "componentId";
802 GraphVertex vertex = getNodeTypeVertex();
803 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
804 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(Either.right(
805 JanusGraphOperationStatus.NOT_FOUND));
806 result = testInstance.addDataTypesToComponent(dataTypes, componentId);
807 assertTrue(result.isRight() && result.right().value() == StorageOperationStatus.NOT_FOUND);
811 public void testDeleteDataTypeOfComponent() {
812 Component component = new Resource();
814 component.setUniqueId(id);
816 DataTypeDefinition dataType1 = new DataTypeDefinition();
817 dataType1.setName("name1");
818 Map<String, DataTypeDataDefinition> dataTypeDataMap = new HashMap<>();
819 dataTypeDataMap.put("datatype1", dataType1);
820 List<DataTypeDefinition> dataTypeMap = dataTypeDataMap.values().stream().map(e -> {
821 return new DataTypeDefinition(e);
822 }).collect(Collectors.toList());
823 component.setDataTypes(dataTypeMap);
824 GraphVertex graphVertex = getTopologyTemplateVertex();
825 assertNull(testInstance.deleteDataTypeOfComponent(component, "datatype1"));
829 public void testAddComponentInstancePropertiesToComponent() {
830 // set up component object
831 Component component = new Resource();
832 component.setUniqueId(COMPONENT_ID);
833 List<ComponentInstanceProperty> instanceProps = new ArrayList<>();
834 ComponentInstanceProperty instanceProp = new ComponentInstanceProperty();
835 instanceProp.setName(PROPERTY1_NAME);
836 instanceProp.setType(PROPERTY1_TYPE);
837 instanceProps.add(instanceProp);
838 instanceProp = new ComponentInstanceProperty();
839 instanceProp.setName(PROPERTY2_NAME);
840 instanceProp.setType(PROPERTY2_TYPE);
841 instanceProps.add(instanceProp);
842 Map<String, List<ComponentInstanceProperty>> instancePropsMap =
843 Collections.singletonMap(COMPONENT_ID, instanceProps);
844 component.setComponentInstancesProperties(Collections.singletonMap(COMPONENT_ID, new ArrayList<>()));
846 when(nodeTemplateOperationMock.addComponentInstanceProperty(any(), any(), any()))
847 .thenReturn(StorageOperationStatus.OK);
849 Either<Map<String, List<ComponentInstanceProperty>>, StorageOperationStatus> result =
850 testInstance.addComponentInstancePropertiesToComponent(component, instancePropsMap);
851 assertTrue(result.isLeft());
852 verify(nodeTemplateOperationMock, times(2)).addComponentInstanceProperty(any(), any(), any());
853 List<ComponentInstanceProperty> resultProps = result.left().value().get(COMPONENT_ID);
854 assertTrue(resultProps.stream().anyMatch(e -> e.getName().equals(PROPERTY1_NAME)));
855 assertTrue(resultProps.stream().anyMatch(e -> e.getName().equals(PROPERTY2_NAME)));
859 public void testAddComponentInstanceToTopologyTemplate_ServiceProxy() {
860 Component containerComponent = new Service();
861 Component originalComponent = new Service();
862 ComponentInstance componentInstance = new ComponentInstance();
863 ComponentInstance existingComponentInstance = new ComponentInstance();
864 User user = new User();
866 containerComponent.setComponentType(ComponentTypeEnum.SERVICE);
868 originalComponent.setComponentType(ComponentTypeEnum.SERVICE);
869 originalComponent.setIcon(ICON_NAME);
871 componentInstance.setOriginType(OriginTypeEnum.ServiceProxy);
872 componentInstance.setSourceModelName(SERVICE_MODEL_NAME);
874 List<ComponentInstance> existingInstances = new ArrayList<>();
875 existingComponentInstance.setNormalizedName(SERVICE_PROXY_INSTANCE0_NAME);
876 existingInstances.add(existingComponentInstance);
877 containerComponent.setComponentInstances(existingInstances);
879 when(nodeTemplateOperationMock
880 .addComponentInstanceToTopologyTemplate(any(), any(), eq("1"), eq(componentInstance), eq(false), eq(user)))
881 .thenReturn(Either.left(new ImmutablePair<>(new TopologyTemplate(), COMPONENT_ID)));
882 TopologyTemplate topologyTemplate = new TopologyTemplate();
883 // preset COMPONENT_TYPE field for internal ModelConverter call
884 topologyTemplate.setMetadataValue(JsonPresentationFields.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
885 when(topologyTemplateOperationMock.getToscaElement(containerComponent.getUniqueId()))
886 .thenReturn(Either.left(topologyTemplate));
888 Either<ImmutablePair<Component, String>, StorageOperationStatus> result =
889 testInstance.addComponentInstanceToTopologyTemplate(
890 containerComponent, originalComponent, componentInstance, false, user);
892 assertTrue(result.isLeft());
893 assertEquals(ICON_NAME, componentInstance.getIcon());
894 assertEquals(COMPONENT_ID, result.left().value().getRight());
895 // the instance counter must be 1 because the service proxy instance with suffix 0 already exists.
896 verify(nodeTemplateOperationMock, times(1))
897 .addComponentInstanceToTopologyTemplate(any(), any(), eq("1"), eq(componentInstance), eq(false), eq(user));
901 public void testAddComponentInstanceToTopologyTemplate_ServiceSubstitution() {
902 Component containerComponent = new Service();
903 Component originalComponent = new Service();
904 ComponentInstance componentInstance = new ComponentInstance();
905 ComponentInstance existingComponentInstance = new ComponentInstance();
906 User user = new User();
908 containerComponent.setComponentType(ComponentTypeEnum.SERVICE);
910 originalComponent.setComponentType(ComponentTypeEnum.SERVICE);
911 originalComponent.setIcon(ICON_NAME);
913 componentInstance.setOriginType(OriginTypeEnum.ServiceSubstitution);
914 componentInstance.setSourceModelName(SERVICE_MODEL_NAME);
916 List<ComponentInstance> existingInstances = new ArrayList<>();
917 existingComponentInstance.setNormalizedName(SERVICE_SUBSTITUTION_INSTANCE0_NAME);
918 existingInstances.add(existingComponentInstance);
919 containerComponent.setComponentInstances(existingInstances);
921 when(nodeTemplateOperationMock
922 .addComponentInstanceToTopologyTemplate(any(), any(), eq("1"), eq(componentInstance), eq(false), eq(user)))
923 .thenReturn(Either.left(new ImmutablePair<>(new TopologyTemplate(), COMPONENT_ID)));
924 TopologyTemplate topologyTemplate = new TopologyTemplate();
925 topologyTemplate.setMetadataValue(JsonPresentationFields.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
926 when(topologyTemplateOperationMock.getToscaElement(containerComponent.getUniqueId()))
927 .thenReturn(Either.left(topologyTemplate));
929 Either<ImmutablePair<Component, String>, StorageOperationStatus> result =
930 testInstance.addComponentInstanceToTopologyTemplate(
931 containerComponent, originalComponent, componentInstance, false, user);
933 assertTrue(result.isLeft());
934 assertEquals(ICON_NAME, componentInstance.getIcon());
935 assertEquals(COMPONENT_ID, result.left().value().getRight());
936 verify(nodeTemplateOperationMock, times(1))
937 .addComponentInstanceToTopologyTemplate(any(), any(), eq("1"), eq(componentInstance), eq(false), eq(user));
941 public void testUpdateComponentInstanceRequirement() {
942 String containerComponentId = "containerComponentId";
943 String componentInstanceUniqueId = "componentInstanceUniqueId";
944 RequirementDataDefinition requirementDataDefinition = Mockito.mock(RequirementDataDefinition.class);
946 when(nodeTemplateOperationMock.updateComponentInstanceRequirement(containerComponentId, componentInstanceUniqueId, requirementDataDefinition))
947 .thenReturn(StorageOperationStatus.OK);
948 StorageOperationStatus result = testInstance
949 .updateComponentInstanceRequirement(containerComponentId, componentInstanceUniqueId, requirementDataDefinition);
950 assertEquals(StorageOperationStatus.OK, result);
951 verify(nodeTemplateOperationMock, times(1))
952 .updateComponentInstanceRequirement(containerComponentId, componentInstanceUniqueId, requirementDataDefinition);
957 public void associateCapabilitiesToServiceFailureTest() {
958 StorageOperationStatus result = associateCapabilitiesToServiceWithStatus(StorageOperationStatus.BAD_REQUEST);
959 assertSame(StorageOperationStatus.BAD_REQUEST, result);
963 public void associateCapabilitiesToServiceSuccessTest() {
964 StorageOperationStatus result = associateCapabilitiesToServiceWithStatus(StorageOperationStatus.OK);
965 assertSame(StorageOperationStatus.OK, result);
968 private StorageOperationStatus associateCapabilitiesToServiceWithStatus(StorageOperationStatus status) {
969 Map<String, ListCapabilityDataDefinition> capabilitiesMap = new HashedMap();
970 String componentId = "componentid";
972 ListCapabilityDataDefinition listCapabilityDataDefinition1 = new ListCapabilityDataDefinition();
973 capabilitiesMap.put("capabilities1", listCapabilityDataDefinition1);
976 if (status == StorageOperationStatus.OK) {
977 vertex = getTopologyTemplateVertex();
979 vertex = getNodeTypeVertex();
982 Either<GraphVertex, JanusGraphOperationStatus> getVertexEither = Either.left(vertex);
983 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(getVertexEither);
984 when(topologyTemplateOperationMock.associateElementToData(eq(vertex),
985 eq(VertexTypeEnum.CAPABILITIES), eq(EdgeLabelEnum.CAPABILITIES), anyMap())).thenReturn(Either.right(status));
986 return testInstance.associateCapabilitiesToService(capabilitiesMap, componentId);
990 public void associateRequirementsToServiceFailureTest() {
991 StorageOperationStatus result = associateRequirementsToServiceWithStatus(StorageOperationStatus.BAD_REQUEST);
992 assertSame(StorageOperationStatus.BAD_REQUEST, result);
996 public void associateRequirementsToServiceSuccessTest() {
997 StorageOperationStatus result = associateRequirementsToServiceWithStatus(StorageOperationStatus.OK);
998 assertSame(StorageOperationStatus.OK, result);
1002 public void test_addOutputsToComponent() {
1003 final GraphVertex graphVertex = getTopologyTemplateVertex();
1004 final String componentId = "componentId";
1006 doReturn(Either.left(graphVertex)).when(janusGraphDaoMock).getVertexById(componentId, JsonParseFlagEnum.NoParse);
1007 doReturn(StorageOperationStatus.OK).when(topologyTemplateOperationMock)
1008 .addToscaDataToToscaElement(
1009 any(GraphVertex.class), eq(EdgeLabelEnum.OUTPUTS), eq(VertexTypeEnum.OUTPUTS), anyMap(), eq(JsonPresentationFields.NAME));
1011 final Map<String, OutputDefinition> outputs = new HashMap<>();
1012 final OutputDefinition outputDefinition = new OutputDefinition();
1013 outputs.put("mock", outputDefinition);
1014 final Either<List<OutputDefinition>, StorageOperationStatus> result = testInstance.addOutputsToComponent(outputs, componentId);
1015 assertNotNull(result);
1016 assertTrue(result.isLeft());
1017 assertFalse(result.left().value().isEmpty());
1018 assertThat(result.left().value().get(0)).isInstanceOf(OutputDefinition.class);
1019 verify(janusGraphDaoMock, times(1)).getVertexById(componentId, JsonParseFlagEnum.NoParse);
1020 verify(topologyTemplateOperationMock, times(1)).addToscaDataToToscaElement(
1021 any(GraphVertex.class), eq(EdgeLabelEnum.OUTPUTS), eq(VertexTypeEnum.OUTPUTS), anyMap(), eq(JsonPresentationFields.NAME));
1025 public void test_addComponentInstanceOutputsToComponent_updateComponentInstanceOutput() {
1026 final Component component = new Resource();
1027 component.setUniqueId(COMPONENT_ID);
1028 final Map<String, List<ComponentInstanceOutput>> map = new HashMap<>();
1029 final List<ComponentInstanceOutput> componentInstanceOutputList = new ArrayList<>();
1030 final ComponentInstanceOutput componentInstanceOutput = new ComponentInstanceOutput();
1031 componentInstanceOutput.setComponentInstanceId(COMPONENT_ID);
1032 componentInstanceOutput.setComponentInstanceName(COMPONENT_ID);
1033 componentInstanceOutput.setName(COMPONENT_ID);
1034 componentInstanceOutputList.add(componentInstanceOutput);
1035 map.put("mock", componentInstanceOutputList);
1036 component.setComponentInstancesOutputs(map);
1038 doReturn(StorageOperationStatus.OK).when(nodeTemplateOperationMock)
1039 .updateComponentInstanceOutput(any(Component.class), anyString(), any(ComponentInstanceOutput.class));
1041 final Either<Map<String, List<ComponentInstanceOutput>>, StorageOperationStatus> result
1042 = testInstance.addComponentInstanceOutputsToComponent(component, map);
1043 assertNotNull(result);
1044 assertTrue(result.isLeft());
1045 assertFalse(result.left().value().isEmpty());
1046 assertSame(result.left().value(), map);
1047 verify(nodeTemplateOperationMock, times(1))
1048 .updateComponentInstanceOutput(any(Component.class), anyString(), any(ComponentInstanceOutput.class));
1053 public void test_addComponentInstanceOutputsToComponent_addComponentInstanceOutput() {
1054 final Component component = new Resource();
1055 component.setUniqueId(COMPONENT_ID);
1056 Map<String, List<ComponentInstanceOutput>> map = new HashMap<>();
1057 List<ComponentInstanceOutput> componentInstanceOutputList = new ArrayList<>();
1058 ComponentInstanceOutput componentInstanceOutput = new ComponentInstanceOutput();
1059 componentInstanceOutput.setComponentInstanceId(COMPONENT_ID);
1060 componentInstanceOutput.setComponentInstanceName(COMPONENT_ID);
1061 componentInstanceOutput.setName(COMPONENT_ID);
1062 componentInstanceOutputList.add(componentInstanceOutput);
1063 map.put("mock", componentInstanceOutputList);
1064 component.setComponentInstancesOutputs(map);
1066 map = new HashMap<>();
1067 componentInstanceOutputList = new ArrayList<>();
1068 componentInstanceOutput = new ComponentInstanceOutput();
1069 componentInstanceOutput.setComponentInstanceId("mock");
1070 componentInstanceOutput.setComponentInstanceName("mock");
1071 componentInstanceOutput.setName("mock");
1072 componentInstanceOutputList.add(componentInstanceOutput);
1073 map.put("mock", componentInstanceOutputList);
1075 final Either<Map<String, List<ComponentInstanceOutput>>, StorageOperationStatus> result = testInstance
1076 .addComponentInstanceOutputsToComponent(component, map);
1077 assertNotNull(result);
1078 assertTrue(result.isRight());
1082 public void test_addComponentInstanceAttributesToComponent() {
1083 final Component component = new Resource();
1084 component.setUniqueId(COMPONENT_ID);
1085 Map<String, List<ComponentInstanceAttribute>> map = new HashMap<>();
1086 List<ComponentInstanceAttribute> componentInstanceOutputList = new ArrayList<>();
1087 ComponentInstanceAttribute componentInstanceAttribute = new ComponentInstanceAttribute();
1088 componentInstanceAttribute.setComponentInstanceId(COMPONENT_ID);
1089 componentInstanceAttribute.setUniqueId(COMPONENT_ID);
1090 componentInstanceOutputList.add(componentInstanceAttribute);
1091 map.put("mock", componentInstanceOutputList);
1092 component.setComponentInstancesAttributes(map);
1094 doReturn(StorageOperationStatus.OK).when(nodeTemplateOperationMock)
1095 .updateComponentInstanceAttribute(any(Component.class), anyString(), any(ComponentInstanceAttribute.class));
1097 final Either<Map<String, List<ComponentInstanceAttribute>>, StorageOperationStatus> result
1098 = testInstance.addComponentInstanceAttributesToComponent(component, map);
1100 assertNotNull(result);
1101 assertTrue(result.isLeft());
1102 assertFalse(result.left().value().isEmpty());
1103 assertSame(result.left().value(), map);
1104 verify(nodeTemplateOperationMock, times(1))
1105 .updateComponentInstanceAttribute(any(Component.class), anyString(), any(ComponentInstanceAttribute.class));
1109 public void test_updateAttributeOfComponent_success() {
1110 final GraphVertex graphVertex = getTopologyTemplateVertex();
1111 final String componentId = "componentId";
1112 final Component component = new Resource();
1113 component.setUniqueId(COMPONENT_ID);
1114 doReturn(StorageOperationStatus.OK).when(nodeTypeOperationMock).updateToscaDataOfToscaElement(
1115 anyString(), eq(EdgeLabelEnum.ATTRIBUTES), eq(VertexTypeEnum.ATTRIBUTES), any(AttributeDefinition.class),
1116 eq(JsonPresentationFields.NAME));
1117 doReturn(Either.left(graphVertex)).when(janusGraphDaoMock).getVertexById(eq(componentId), any(JsonParseFlagEnum.class));
1119 final ToscaElement toscaElement = getToscaElementForTest();
1120 final Map<String, AttributeDataDefinition> attributes = new HashMap<>();
1121 final AttributeDefinition attributeDefinition = new AttributeDefinition();
1122 attributeDefinition.setName("mock");
1123 attributes.put("mock", attributeDefinition);
1124 toscaElement.setAttributes(attributes);
1125 doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock)
1126 .getToscaElement(ArgumentMatchers.eq(graphVertex), any(ComponentParametersView.class));
1128 final Either<AttributeDefinition, StorageOperationStatus> result
1129 = testInstance.updateAttributeOfComponent(component, attributeDefinition);
1130 assertNotNull(result);
1134 public void test_updateAttributeOfComponent_isNotPresent() {
1135 final GraphVertex graphVertex = getTopologyTemplateVertex();
1136 final String componentId = "componentId";
1137 final Component component = new Resource();
1138 component.setUniqueId(COMPONENT_ID);
1139 doReturn(StorageOperationStatus.OK).when(nodeTypeOperationMock).updateToscaDataOfToscaElement(
1140 anyString(), eq(EdgeLabelEnum.ATTRIBUTES), eq(VertexTypeEnum.ATTRIBUTES), any(AttributeDefinition.class),
1141 eq(JsonPresentationFields.NAME));
1142 doReturn(Either.left(graphVertex)).when(janusGraphDaoMock).getVertexById(eq(componentId), any(JsonParseFlagEnum.class));
1144 final ToscaElement toscaElement = getToscaElementForTest();
1145 final Map<String, AttributeDataDefinition> attributes = new HashMap<>();
1146 final AttributeDefinition attributeDefinition = new AttributeDefinition();
1147 attributeDefinition.setName("mock");
1148 attributes.put("mock", attributeDefinition);
1149 toscaElement.setAttributes(attributes);
1150 doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock)
1151 .getToscaElement(ArgumentMatchers.eq(graphVertex), any(ComponentParametersView.class));
1153 final AttributeDefinition attributeDefinitionOneMore = new AttributeDefinition();
1154 attributeDefinitionOneMore.setName("Anothermock");
1156 final Either<AttributeDefinition, StorageOperationStatus> result
1157 = testInstance.updateAttributeOfComponent(component, attributeDefinitionOneMore);
1158 assertNotNull(result);
1162 public void test_updateComponentInstanceAttributes() {
1163 final GraphVertex graphVertex = getTopologyTemplateVertex();
1164 final String componentId = "componentId";
1165 final Component component = new Resource();
1166 component.setUniqueId(COMPONENT_ID);
1168 final List<ComponentInstanceAttribute> attributes = new ArrayList<>();
1169 final ComponentInstanceAttribute attributeDefinition = new ComponentInstanceAttribute();
1170 attributeDefinition.setName("mock");
1171 attributes.add(attributeDefinition);
1173 doReturn(StorageOperationStatus.OK).when(nodeTemplateOperationMock).updateComponentInstanceAttributes(component, componentId, attributes);
1175 final StorageOperationStatus result = testInstance.updateComponentInstanceAttributes(component, componentId, attributes);
1176 assertNotNull(result);
1177 assertEquals(StorageOperationStatus.OK, result);
1178 verify(nodeTemplateOperationMock, times(1)).updateComponentInstanceAttributes(component, componentId, attributes);
1182 public void test_updateComponentInstanceOutputs() {
1183 final GraphVertex graphVertex = getTopologyTemplateVertex();
1184 final String componentId = "componentId";
1185 final Component component = new Resource();
1186 component.setUniqueId(COMPONENT_ID);
1188 final List<ComponentInstanceOutput> list = new ArrayList<>();
1189 final ComponentInstanceOutput output = new ComponentInstanceOutput();
1190 output.setName("mock");
1193 doReturn(StorageOperationStatus.OK).when(nodeTemplateOperationMock).updateComponentInstanceOutputs(component, componentId, list);
1195 final StorageOperationStatus result = testInstance.updateComponentInstanceOutputs(component, componentId, list);
1196 assertNotNull(result);
1197 assertEquals(StorageOperationStatus.OK, result);
1198 verify(nodeTemplateOperationMock, times(1)).updateComponentInstanceOutputs(component, componentId, list);
1202 public void test_deleteOutputOfResource() {
1203 final Component component = new Resource();
1204 component.setUniqueId(COMPONENT_ID);
1206 doReturn(StorageOperationStatus.OK).when(nodeTypeOperationMock)
1207 .deleteToscaDataElement(anyString(), eq(EdgeLabelEnum.OUTPUTS), eq(VertexTypeEnum.OUTPUTS), anyString(), eq(JsonPresentationFields.NAME));
1209 final StorageOperationStatus result = testInstance.deleteOutputOfResource(component, "mock");
1210 assertNotNull(result);
1211 assertEquals(StorageOperationStatus.OK, result);
1212 verify(nodeTypeOperationMock, times(1))
1213 .deleteToscaDataElement(anyString(), eq(EdgeLabelEnum.OUTPUTS), eq(VertexTypeEnum.OUTPUTS), anyString(), eq(JsonPresentationFields.NAME));
1216 private StorageOperationStatus associateRequirementsToServiceWithStatus(StorageOperationStatus status) {
1217 Map<String, ListRequirementDataDefinition> requirementsMap = new HashedMap();
1218 String componentId = "componentid";
1220 ListRequirementDataDefinition listRequirementDataDefinition1 = new ListRequirementDataDefinition();
1221 requirementsMap.put("requirements1", listRequirementDataDefinition1);
1224 if (status == StorageOperationStatus.OK) {
1225 vertex = getTopologyTemplateVertex();
1227 vertex = getNodeTypeVertex();
1230 Either<GraphVertex, JanusGraphOperationStatus> getVertexEither = Either.left(vertex);
1231 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(getVertexEither);
1232 when(topologyTemplateOperationMock.associateElementToData(eq(vertex),
1233 eq(VertexTypeEnum.REQUIREMENTS), eq(EdgeLabelEnum.REQUIREMENTS), anyMap())).thenReturn(Either.right(status));
1234 return testInstance.associateRequirementsToService(requirementsMap, componentId);
1237 private Either<PolicyDefinition, StorageOperationStatus> associatePolicyToComponentWithStatus(StorageOperationStatus status) {
1238 PolicyDefinition policy = new PolicyDefinition();
1239 String componentId = "componentId";
1242 if (status == StorageOperationStatus.OK) {
1243 vertex = getTopologyTemplateVertex();
1245 vertex = getNodeTypeVertex();
1247 Either<GraphVertex, JanusGraphOperationStatus> getVertexEither = Either.left(vertex);
1248 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.ParseMetadata)).thenReturn(getVertexEither);
1249 when(topologyTemplateOperationMock.addPolicyToToscaElement(eq(vertex), any(PolicyDefinition.class), anyInt())).thenReturn(status);
1250 return testInstance.associatePolicyToComponent(componentId, policy, counter);
1253 private Either<PolicyDefinition, StorageOperationStatus> updatePolicyOfComponentWithStatus(StorageOperationStatus status) {
1254 PolicyDefinition policy = new PolicyDefinition();
1255 String componentId = "componentId";
1256 GraphVertex vertex = getTopologyTemplateVertex();
1257 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(Either.left(vertex));
1258 when(topologyTemplateOperationMock.updatePolicyOfToscaElement(eq(vertex), any(PolicyDefinition.class))).thenReturn(status);
1259 return testInstance.updatePolicyOfComponent(componentId, policy, PromoteVersionEnum.NONE);
1262 private void removePolicyFromComponentWithStatus(StorageOperationStatus status) {
1263 String componentId = "componentId";
1264 String policyId = "policyId";
1265 GraphVertex vertex = getTopologyTemplateVertex();
1266 Either<GraphVertex, JanusGraphOperationStatus> getVertexEither = Either.left(vertex);
1267 when(janusGraphDaoMock.getVertexById(componentId, JsonParseFlagEnum.NoParse)).thenReturn(getVertexEither);
1268 when(topologyTemplateOperationMock.removePolicyFromToscaElement(vertex, policyId)).thenReturn(status);
1269 StorageOperationStatus result = testInstance.removePolicyFromComponent(componentId, policyId);
1270 assertSame(result, status);
1273 private List<GraphVertex> getMockVertices(int numOfVertices) {
1274 return IntStream.range(0, numOfVertices).mapToObj(i -> getTopologyTemplateVertex()).collect(Collectors.toList());
1277 private ToscaElement getResourceToscaElement(String id) {
1278 ToscaElement toscaElement = new TopologyTemplate();
1279 toscaElement.setMetadata(new HashMap<>());
1280 toscaElement.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(), "RESOURCE");
1281 toscaElement.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), id);
1282 return toscaElement;
1285 private GraphVertex getTopologyTemplateVertex() {
1286 GraphVertex graphVertex = new GraphVertex();
1287 graphVertex.setLabel(VertexTypeEnum.TOPOLOGY_TEMPLATE);
1291 private GraphVertex getNodeTypeVertex() {
1292 GraphVertex graphVertex = new GraphVertex();
1293 graphVertex.setLabel(VertexTypeEnum.NODE_TYPE);