2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.tosca;
23 import static org.hamcrest.CoreMatchers.is;
24 import static org.junit.Assert.assertThat;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.anyBoolean;
27 import static org.mockito.ArgumentMatchers.anyList;
28 import static org.mockito.ArgumentMatchers.anyMap;
29 import static org.mockito.ArgumentMatchers.anyString;
30 import static org.mockito.ArgumentMatchers.eq;
31 import static org.mockito.ArgumentMatchers.isNull;
32 import static org.mockito.Mockito.doReturn;
33 import static org.openecomp.sdc.be.tosca.PropertyConvertor.PropertyType.PROPERTY;
35 import fj.data.Either;
36 import java.util.ArrayList;
37 import java.util.Arrays;
38 import java.util.Collections;
39 import java.util.HashMap;
40 import java.util.List;
42 import java.util.Optional;
43 import java.util.stream.Collectors;
44 import mockit.Deencapsulation;
45 import org.apache.commons.collections.MapUtils;
46 import org.apache.commons.lang3.tuple.ImmutablePair;
47 import org.apache.commons.lang3.tuple.Triple;
48 import org.junit.Assert;
49 import org.junit.Before;
50 import org.junit.Test;
51 import org.mockito.InjectMocks;
52 import org.mockito.Mock;
53 import org.mockito.Mockito;
54 import org.mockito.MockitoAnnotations;
55 import org.openecomp.sdc.be.components.BeConfDependentTest;
56 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
57 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
58 import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
59 import org.openecomp.sdc.be.datatypes.elements.ForwardingPathDataDefinition;
60 import org.openecomp.sdc.be.datatypes.elements.ForwardingPathElementDataDefinition;
61 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
62 import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
63 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
64 import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
65 import org.openecomp.sdc.be.datatypes.elements.ToscaArtifactDataDefinition;
66 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
67 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
68 import org.openecomp.sdc.be.model.ArtifactDefinition;
69 import org.openecomp.sdc.be.model.CapabilityDefinition;
70 import org.openecomp.sdc.be.model.CapabilityRequirementRelationship;
71 import org.openecomp.sdc.be.model.Component;
72 import org.openecomp.sdc.be.model.ComponentInstance;
73 import org.openecomp.sdc.be.model.ComponentInstanceInput;
74 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
75 import org.openecomp.sdc.be.model.ComponentParametersView;
76 import org.openecomp.sdc.be.model.DataTypeDefinition;
77 import org.openecomp.sdc.be.model.GroupDefinition;
78 import org.openecomp.sdc.be.model.GroupInstance;
79 import org.openecomp.sdc.be.model.InputDefinition;
80 import org.openecomp.sdc.be.model.InterfaceDefinition;
81 import org.openecomp.sdc.be.model.PropertyDefinition;
82 import org.openecomp.sdc.be.model.RelationshipInfo;
83 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
84 import org.openecomp.sdc.be.model.RequirementDefinition;
85 import org.openecomp.sdc.be.model.Resource;
86 import org.openecomp.sdc.be.model.Service;
87 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
88 import org.openecomp.sdc.be.model.category.CategoryDefinition;
89 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
90 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
91 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
92 import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
93 import org.openecomp.sdc.be.tosca.model.SubstitutionMapping;
94 import org.openecomp.sdc.be.tosca.model.ToscaCapability;
95 import org.openecomp.sdc.be.tosca.model.ToscaMetadata;
96 import org.openecomp.sdc.be.tosca.model.ToscaNodeTemplate;
97 import org.openecomp.sdc.be.tosca.model.ToscaNodeType;
98 import org.openecomp.sdc.be.tosca.model.ToscaProperty;
99 import org.openecomp.sdc.be.tosca.model.ToscaTemplate;
100 import org.openecomp.sdc.be.tosca.model.ToscaTemplateArtifact;
101 import org.openecomp.sdc.be.tosca.model.ToscaTemplateRequirement;
102 import org.openecomp.sdc.be.tosca.model.ToscaTopolgyTemplate;
103 import org.openecomp.sdc.be.tosca.utils.InputConverter;
105 public class ToscaExportHandlerTest extends BeConfDependentTest {
107 private static final String COMPONENT_PROPERTY_NAME = "prop1";
108 private static final String COMPONENT_PROPERTY_TYPE = "string";
109 private static final String COMPONENT_INPUT_NAME = "input1";
110 private static final String COMPONENT_INPUT_TYPE = "integer";
111 private static final String RESOURCE_NAME = "resource";
112 private static final String TOSCA_VERSION = "tosca_simple_yaml_1_1";
113 private static final Map<String, DataTypeDefinition> DATA_TYPES = new HashMap<>();
116 private ToscaExportHandler testSubject;
119 private ApplicationDataTypeCache dataTypeCache;
122 private ToscaOperationFacade toscaOperationFacade;
125 private CapabilityRequirementConverter capabiltyRequirementConvertor;
128 private InputConverter inputConverter;
131 private GroupExportParser groupExportParser;
134 private PropertyConvertor propertyConvertor;
137 private GroupExportParserImpl groupExportParserImpl;
140 private InterfaceLifecycleOperation interfaceLifecycleOperation;
143 private InterfacesOperationsConverter interfacesOperationsConverter;
146 private PolicyExportParser policyExportParser;
149 public void setUpMock() throws Exception {
150 MockitoAnnotations.initMocks(this);
151 doReturn(new ToscaProperty()).when(propertyConvertor).convertProperty(any(), any(), eq(PROPERTY));
152 doReturn(new HashMap<String, Object>()).when(interfacesOperationsConverter)
153 .getInterfacesMap(any(), isNull(), anyMap(), anyMap(), anyBoolean(), anyBoolean());
156 private Resource getNewResource() {
157 Resource resource = new Resource();
158 List<CategoryDefinition> categories = new ArrayList<>();
159 CategoryDefinition category = new CategoryDefinition();
160 List<SubCategoryDefinition> subcategories = new ArrayList<>();
161 SubCategoryDefinition subcategory = new SubCategoryDefinition();
162 List<DataTypeDefinition> dataTypes = new ArrayList<>();
163 DataTypeDefinition dataType = new DataTypeDefinition();
164 dataType.setName("dataTypeName");
165 dataType.setDerivedFromName("tosca.datatypes.Root");
166 PropertyDataDefinition propData = new PropertyDataDefinitionBuilder()
170 List<PropertyDataDefinition> propDataList = Arrays.asList(propData);
171 dataType.setPropertiesData(propDataList);
172 List<PropertyDefinition> propList = propDataList.stream().map(PropertyDefinition::new)
173 .collect(Collectors.toList());
174 dataType.setProperties(propList);
175 dataTypes.add(dataType);
177 subcategory.setName("name");
178 subcategories.add(subcategory);
179 category.setName("name");
180 category.setSubcategories(subcategories);
181 categories.add(category);
183 resource.setCategories(categories);
184 resource.setVersion("version");
185 resource.setVendorName("vendorName");
186 resource.setVendorRelease("vendorRelease");
187 resource.setResourceVendorModelNumber("resourceVendorModelNumber");
188 resource.setDataTypes(dataTypes);
193 private Service getNewService() {
194 Service service = new Service();
195 List<CategoryDefinition> categories = new ArrayList<>();
196 CategoryDefinition category = new CategoryDefinition();
197 List<SubCategoryDefinition> subcategories = new ArrayList<>();
198 SubCategoryDefinition subcategory = new SubCategoryDefinition();
200 subcategory.setName("name");
201 subcategories.add(subcategory);
202 category.setName("name");
203 category.setSubcategories(subcategories);
204 categories.add(category);
206 service.setCategories(categories);
207 service.setComponentType(ComponentTypeEnum.SERVICE);
208 service.setServiceType("serviceType");
209 service.setServiceRole("serviceRole");
210 service.setEnvironmentContext("environmentContext");
216 public void testExportComponent() throws Exception {
217 Component component = getNewResource();
218 Either<ToscaRepresentation, ToscaError> result;
220 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
222 .when(capabiltyRequirementConvertor.convertRequirements(any(Map.class), any(Resource.class),
223 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
224 Mockito.when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
225 .thenReturn(Either.left(Collections.emptyMap()));
227 // default test when component is Resource
228 result = testSubject.exportComponent(component);
229 Assert.assertNotNull(result);
231 component = getNewService();
233 .when(capabiltyRequirementConvertor.convertRequirements(any(Map.class), any(Service.class),
234 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
235 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
237 // default test when component is Service
238 result = testSubject.exportComponent(component);
239 Assert.assertNotNull(result);
243 public void testExportComponentInterface() throws Exception {
244 Component component = getNewResource();
245 Either<ToscaRepresentation, ToscaError> result;
247 ((Resource) component).setInterfaces(new HashMap<>());
249 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
250 Mockito.when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
251 .thenReturn(Either.left(Collections.emptyMap()));
252 // default test when convertInterfaceNodeType is right
253 result = testSubject.exportComponentInterface(component, false);
254 Assert.assertNotNull(result);
256 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
258 .when(capabiltyRequirementConvertor.convertRequirements(any(Map.class), any(Resource.class),
259 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
261 // default test when convertInterfaceNodeType is left
262 result = testSubject.exportComponentInterface(component, false);
263 Assert.assertNotNull(result);
267 public void testConvertInterfaceNodeTypeProperties() throws Exception {
269 Resource component = getNewResource();
271 component.setInterfaces(new HashMap<>());
272 InputDefinition input = new InputDefinition();
273 input.setName(COMPONENT_INPUT_NAME);
274 input.setType(COMPONENT_INPUT_TYPE);
275 component.setInputs(Collections.singletonList(input));
276 PropertyDefinition property = new PropertyDefinition();
277 property.setName(COMPONENT_PROPERTY_NAME);
278 property.setType(COMPONENT_PROPERTY_TYPE);
279 component.setProperties(Collections.singletonList(property));
280 component.setName(RESOURCE_NAME);
281 component.setToscaResourceName(RESOURCE_NAME);
283 Mockito.when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
284 .thenReturn(Either.left(Collections.emptyMap()));
285 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
286 // when convertRequirements is called, make it return the same value as 3rd (index=2) argument.
288 .when(capabiltyRequirementConvertor.convertRequirements(any(Map.class), any(Resource.class),
289 any(ToscaNodeType.class))).thenAnswer(i -> Either.left(i.getArgument(2)));
291 Either<ToscaTemplate, ToscaError> result = (Either<ToscaTemplate, ToscaError>) Deencapsulation
292 .invoke(testSubject, "convertInterfaceNodeType", new HashMap<String, Component>(), component,
293 new ToscaTemplate(TOSCA_VERSION), new HashMap<String, ToscaNodeType>(), false);
294 Assert.assertNotNull(result);
295 assertThat(result.isLeft(), is(true));
296 Map<String, ToscaNodeType> nodeTypeMap = result.left().value().getNode_types();
297 assertThat(nodeTypeMap.size(), is(1));
298 ToscaNodeType toscaNodeType = nodeTypeMap.values().iterator().next();
299 Map<String, ToscaProperty> propertyMap = toscaNodeType.getProperties();
300 // Check if inputs and properties in component are merged properly
301 assertThat(propertyMap.size(), is(2));
302 assertThat(propertyMap.containsKey(COMPONENT_INPUT_NAME), is(true));
303 assertThat(propertyMap.containsKey(COMPONENT_PROPERTY_NAME), is(true));
307 public void testCreateToscaRepresentation() throws Exception {
308 ToscaTemplate toscaTemplate = new ToscaTemplate("");
309 ToscaRepresentation result;
312 result = testSubject.createToscaRepresentation(toscaTemplate);
313 Assert.assertNotNull(result);
317 public void testGetDependencies() throws Exception {
319 Component component = new Resource();
320 Either<ToscaTemplate, ToscaError> result;
323 result = testSubject.getDependencies(component);
324 Assert.assertNotNull(result);
328 public void testConvertToscaTemplate() throws Exception {
330 Component component = getNewResource();
331 ToscaTemplate toscaNode = new ToscaTemplate("");
332 Either<ToscaTemplate, ToscaError> result;
333 List<ComponentInstance> resourceInstances = new ArrayList<>();
334 ComponentInstance instance = new ComponentInstance();
336 instance.setOriginType(OriginTypeEnum.SERVICE);
337 instance.setSourceModelUid("targetModelUid");
338 resourceInstances.add(instance);
340 component.setComponentInstances(resourceInstances);
342 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
343 Mockito.when(capabiltyRequirementConvertor.getOriginComponent(any(Map.class),
344 any(ComponentInstance.class))).thenReturn(Either.right(false));
347 result = Deencapsulation.invoke(testSubject, "convertToscaTemplate", component, toscaNode);
348 Assert.assertNotNull(result);
352 public void testConvertToscaTemplateWhenComponentContainsGroup() {
353 Component component = getNewResource();
354 ToscaTemplate toscaNode = new ToscaTemplate("");
355 Either<ToscaTemplate, ToscaError> result;
356 component.setComponentInstances(new ArrayList<>());
358 List<GroupDefinition> groups = new ArrayList<>();
359 GroupDefinition group = new GroupDefinition();
360 List<String> artifacts = new ArrayList<>();
361 artifacts.add("artifact");
362 group.setType("org.openecomp.groups.VfModule");
363 group.setArtifacts(artifacts);
365 component.setGroups(groups);
367 Map<String, String[]> substitutionMappingMap = new HashMap<>();
368 String[] array = {"value1", "value2"};
369 substitutionMappingMap.put("key", array);
371 Mockito.when(capabiltyRequirementConvertor.convertSubstitutionMappingCapabilities(any(Map.class),
372 any(Component.class))).thenReturn(Either.left(substitutionMappingMap));
374 Mockito.when(capabiltyRequirementConvertor.convertSubstitutionMappingRequirements(any(Map.class),
375 any(Component.class), any(SubstitutionMapping.class)))
376 .thenReturn(Either.left(new SubstitutionMapping()));
378 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
380 Mockito.when(inputConverter.convertInputs(any(List.class), any(Map.class)))
381 .thenReturn(new HashMap<>());
383 Mockito.when(groupExportParser.getGroups(component))
386 // test component contains group
387 result = Deencapsulation.invoke(testSubject, "convertToscaTemplate", component, toscaNode);
388 Assert.assertNotNull(result);
392 public void testConvertToscaTemplateWhenComponentIsService() throws Exception {
393 Component component = getNewService();
394 ToscaTemplate toscaNode = new ToscaTemplate("");
395 Either<ToscaTemplate, ToscaError> result;
396 component.setComponentInstances(new ArrayList<>());
398 List<GroupDefinition> groups = new ArrayList<>();
399 GroupDefinition group = new GroupDefinition();
400 List<String> artifacts = new ArrayList<>();
401 artifacts.add("artifact");
402 group.setType("org.openecomp.groups.VfModule");
403 group.setArtifacts(artifacts);
405 component.setGroups(groups);
407 Map<String, String[]> substitutionMappingMap = new HashMap<>();
408 String[] array = {"value1", "value2"};
409 substitutionMappingMap.put("key", array);
412 .when(capabiltyRequirementConvertor.convertSubstitutionMappingCapabilities(anyMap(), any(Component.class)))
413 .thenReturn(Either.left(substitutionMappingMap));
415 Mockito.when(capabiltyRequirementConvertor
416 .convertSubstitutionMappingRequirements(anyMap(), any(Component.class), any(SubstitutionMapping.class)))
417 .thenReturn(Either.left(new SubstitutionMapping()));
419 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
421 Mockito.when(inputConverter.convertInputs(anyList(), anyMap())).thenReturn(new HashMap<>());
422 // test component contains group
423 result = Deencapsulation.invoke(testSubject, "convertToscaTemplate", component, toscaNode);
424 Assert.assertNotNull(result);
428 public void testConvertMetadata_1() throws Exception {
430 Component component = getNewResource();
431 boolean isInstance = true;
432 ComponentInstance componentInstance = new ComponentInstance();
433 componentInstance.setOriginType(OriginTypeEnum.ServiceProxy);
434 componentInstance.setSourceModelInvariant("targetModelInvariant");
437 Map<String, String> result = Deencapsulation.invoke(testSubject, "convertMetadata", component, isInstance, componentInstance);
438 Assert.assertNotNull(result);
442 public void testFillImports() throws Exception {
444 Component component = getNewService();
445 ToscaTemplate toscaTemplate = new ToscaTemplate("");
446 Either<ImmutablePair<ToscaTemplate, Map<String, Component>>, ToscaError> result;
448 ComponentInstance instance = new ComponentInstance();
449 List<ComponentInstance> resourceInstances = new ArrayList<>();
450 instance.setComponentUid("name");
451 resourceInstances.add(instance);
452 component.setComponentInstances(resourceInstances);
453 Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
454 ArtifactDefinition artifact = new ArtifactDefinition();
455 artifact.setArtifactName("name.name2");
456 toscaArtifacts.put("assettoscatemplate", artifact);
457 component.setToscaArtifacts(toscaArtifacts);
459 Mockito.when(toscaOperationFacade.getToscaFullElement(any(String.class)))
460 .thenReturn(Either.left(component));
463 result = Deencapsulation.invoke(testSubject, "fillImports", component, toscaTemplate);
464 Assert.assertNotNull(result);
468 public void testCreateDependency() throws Exception {
470 Map<String, Component> componentCache = new HashMap<>();
471 List<Map<String, Map<String, String>>> imports = new ArrayList<>();
472 List<Triple<String, String, Component>> dependecies = new ArrayList<>();
473 ComponentInstance ci = new ComponentInstance();
474 Component component = getNewResource();
476 Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
477 ArtifactDefinition artifact = new ArtifactDefinition();
478 artifact.setArtifactName("name.name2");
479 toscaArtifacts.put("assettoscatemplate", artifact);
480 component.setToscaArtifacts(toscaArtifacts);
481 ci.setComponentUid("name");
482 ci.setOriginType(OriginTypeEnum.ServiceProxy);
483 ci.setSourceModelUid("modelName");
485 Mockito.when(toscaOperationFacade.getToscaFullElement(eq("name"))).thenReturn(Either.left(component));
487 Mockito.when(toscaOperationFacade.getToscaFullElement(eq("modelName")))
488 .thenReturn(Either.left(new Service()));
491 Deencapsulation.invoke(testSubject, "createDependency", componentCache, imports, dependecies, ci);
495 public void testGetInterfaceFilename() throws Exception {
496 String artifactName = "artifact.name";
500 result = ToscaExportHandler.getInterfaceFilename(artifactName);
501 Assert.assertNotNull(result);
505 public void testConvertNodeType() throws Exception {
506 Component component = new Resource();
507 ToscaTemplate toscaNode = new ToscaTemplate("");
508 Map<String, ToscaNodeType> nodeTypes = new HashMap<>();
509 Either<ToscaTemplate, ToscaError> result;
511 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.right(JanusGraphOperationStatus.ALREADY_EXIST));
512 Mockito.when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
513 .thenReturn(Either.left(Collections.emptyMap()));
515 result = Deencapsulation
516 .invoke(testSubject, "convertNodeType", new HashMap<>(), component, toscaNode, nodeTypes);
517 Assert.assertNotNull(result);
521 public void testConvertInterfaceNodeType() throws Exception {
522 Component component = getNewResource();
523 ToscaTemplate toscaNode = new ToscaTemplate("");
524 Map<String, ToscaNodeType> nodeTypes = new HashMap<>();
525 Either<ToscaTemplate, ToscaError> result;
526 List<InputDefinition> inputs = new ArrayList<>();
527 inputs.add(new InputDefinition());
528 component.setInputs(inputs);
530 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
531 Mockito.when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
532 .thenReturn(Either.left(Collections.emptyMap()));
535 .when(capabiltyRequirementConvertor.convertRequirements(any(Map.class), any(Resource.class),
536 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
539 result = Deencapsulation.invoke(testSubject, "convertInterfaceNodeType", new HashMap<>(), component, toscaNode
541 Assert.assertNotNull(result);
545 public void testConvertReqCapAndTypeName() throws Exception {
546 Component component = new Resource();
547 ToscaTemplate toscaNode = new ToscaTemplate("");
548 Map<String, ToscaNodeType> nodeTypes = new HashMap();
549 ToscaNodeType toscaNodeType = new ToscaNodeType();
550 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
551 Either<ToscaTemplate, ToscaError> result;
554 capabiltyRequirementConvertor
555 .convertCapabilities(any(Map.class), any(Resource.class), any(Map.class)))
556 .thenReturn(new HashMap<>());
559 .when(capabiltyRequirementConvertor.convertRequirements(any(Map.class), any(Resource.class),
560 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
563 result = Deencapsulation
564 .invoke(testSubject, "convertReqCapAndTypeName", new HashMap<>(), component, toscaNode, nodeTypes,
565 toscaNodeType, dataTypes);
566 Assert.assertNotNull(result);
568 component = new Service();
571 .when(capabiltyRequirementConvertor.convertRequirements(any(Map.class), any(Service.class),
572 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
574 // test when component is service
575 result = Deencapsulation
576 .invoke(testSubject, "convertReqCapAndTypeName", new HashMap<>(), component, toscaNode, nodeTypes,
577 toscaNodeType, dataTypes);
578 Assert.assertNotNull(result);
582 public void testConvertNodeTemplates() throws Exception {
583 Component component = getNewResource();
584 List<ComponentInstance> componentInstances = new ArrayList<>();
585 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
586 Map<String, Component> componentCache = new HashMap<>();
587 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
588 ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
589 Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
590 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
591 List<ComponentInstanceInput> inputs = new ArrayList<>();
592 inputs.add(new ComponentInstanceInput());
593 componentInstancesInputs.put("key", inputs);
594 List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
595 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
596 reldef.setFromNode("node");
597 resourceInstancesRelations.add(reldef);
598 component.setComponentInstancesRelations(resourceInstancesRelations);
600 ComponentInstance instance = new ComponentInstance();
601 instance.setUniqueId("id");
602 instance.setComponentUid("uid");
603 instance.setOriginType(OriginTypeEnum.ServiceProxy);
604 List<GroupInstance> groupInstances = new ArrayList<>();
605 GroupInstance groupInst = new GroupInstance();
606 List<String> artifacts = new ArrayList<>();
607 artifacts.add("artifact");
608 groupInst.setArtifacts(artifacts);
609 groupInst.setType("type");
610 groupInstances.add(groupInst);
611 instance.setGroupInstances(groupInstances);
612 componentInstances.add(instance);
614 component.setComponentInstancesInputs(componentInstancesInputs);
615 component.setInvariantUUID("uuid");
616 component.setUUID("uuid");
617 component.setDescription("desc");
619 componentCache.put("uid", component);
621 componentInstancesProperties.put("id", new ArrayList<>());
622 componentInstancesInputs.put("id", new ArrayList<>());
624 Mockito.when(capabiltyRequirementConvertor.getOriginComponent(any(Map.class),
625 any(ComponentInstance.class))).thenReturn(Either.left(component));
627 Mockito.when(capabiltyRequirementConvertor.convertComponentInstanceCapabilities(
628 any(ComponentInstance.class), any(Map.class), any(ToscaNodeTemplate.class)))
629 .thenReturn(Either.left(new ToscaNodeTemplate()));
632 result = Deencapsulation.invoke(testSubject, "convertNodeTemplates", component, componentInstances,
633 componentInstancesProperties, new HashMap<>(), componentCache, dataTypes, topologyTemplate);
634 Assert.assertNotNull(result);
638 public void testConvertNodeTemplatesWhenComponentIsService() throws Exception {
639 Component component = getNewService();
640 List<ComponentInstance> componentInstances = new ArrayList<>();
641 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
642 Map<String, List<ComponentInstanceProperty>> componentInstancesInterfaces = new HashMap<>();
643 Map<String, Component> componentCache = new HashMap<>();
644 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
645 ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
646 Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
647 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
648 List<ComponentInstanceInput> inputs = new ArrayList<>();
649 inputs.add(new ComponentInstanceInput());
650 componentInstancesInputs.put("key", inputs);
651 List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
652 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
653 reldef.setFromNode("node");
654 resourceInstancesRelations.add(reldef);
655 component.setComponentInstancesRelations(resourceInstancesRelations);
657 ComponentInstance instance = new ComponentInstance();
658 instance.setUniqueId("id");
659 instance.setComponentUid("uid");
660 instance.setOriginType(OriginTypeEnum.ServiceProxy);
661 List<GroupInstance> groupInstances = new ArrayList<>();
662 GroupInstance groupInst = new GroupInstance();
663 List<String> artifacts = new ArrayList<>();
664 artifacts.add("artifact");
665 groupInst.setArtifacts(artifacts);
666 groupInst.setType("type");
667 groupInstances.add(groupInst);
668 instance.setGroupInstances(groupInstances);
669 componentInstances.add(instance);
671 component.setComponentInstancesInputs(componentInstancesInputs);
672 component.setInvariantUUID("uuid");
673 component.setUUID("uuid");
674 component.setDescription("desc");
676 Map<String, ForwardingPathDataDefinition> forwardingPaths = new HashMap<>();
677 ForwardingPathDataDefinition path = new ForwardingPathDataDefinition();
678 ListDataDefinition<ForwardingPathElementDataDefinition> list = new ListDataDefinition<>();
679 path.setPathElements(list);
680 forwardingPaths.put("key", path);
682 ((Service) component).setForwardingPaths(forwardingPaths);
684 componentCache.put("uid", component);
686 componentInstancesProperties.put("id", new ArrayList<>());
687 componentInstancesInterfaces.put("id", new ArrayList<>());
688 componentInstancesInputs.put("id", new ArrayList<>());
690 Mockito.when(capabiltyRequirementConvertor.getOriginComponent(any(Map.class),
691 any(ComponentInstance.class))).thenReturn(Either.left(component));
693 Mockito.when(capabiltyRequirementConvertor.convertComponentInstanceCapabilities(
694 any(ComponentInstance.class), any(Map.class), any(ToscaNodeTemplate.class)))
695 .thenReturn(Either.left(new ToscaNodeTemplate()));
698 result = Deencapsulation.invoke(testSubject, "convertNodeTemplates", component, componentInstances,
699 componentInstancesProperties, componentInstancesInterfaces, componentCache, dataTypes, topologyTemplate);
700 Assert.assertNotNull(result);
704 public void testConvertNodeTemplatesWhenConvertComponentInstanceCapabilitiesIsRight() throws Exception {
705 Component component = getNewResource();
706 List<ComponentInstance> componentInstances = new ArrayList<>();
707 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
708 Map<String, List<ComponentInstanceProperty>> componentInstancesInterfaces = new HashMap<>();
709 Map<String, Component> componentCache = new HashMap<>();
710 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
711 ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
712 Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
713 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
714 List<ComponentInstanceInput> inputs = new ArrayList<>();
715 inputs.add(new ComponentInstanceInput());
716 componentInstancesInputs.put("key", inputs);
717 List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
718 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
719 reldef.setFromNode("node");
720 resourceInstancesRelations.add(reldef);
721 component.setComponentInstancesRelations(resourceInstancesRelations);
723 ComponentInstance instance = new ComponentInstance();
724 instance.setUniqueId("id");
725 instance.setComponentUid("uid");
726 instance.setOriginType(OriginTypeEnum.ServiceProxy);
727 componentInstances.add(instance);
729 component.setComponentInstancesInputs(componentInstancesInputs);
730 component.setInvariantUUID("uuid");
731 component.setUUID("uuid");
732 component.setDescription("desc");
734 componentCache.put("uid", component);
736 Mockito.when(capabiltyRequirementConvertor.getOriginComponent(any(Map.class),
737 any(ComponentInstance.class))).thenReturn(Either.left(component));
739 Mockito.when(capabiltyRequirementConvertor.convertComponentInstanceCapabilities(
740 any(ComponentInstance.class), any(Map.class), any(ToscaNodeTemplate.class)))
741 .thenReturn(Either.right(ToscaError.GENERAL_ERROR));
744 result = Deencapsulation.invoke(testSubject, "convertNodeTemplates", component, componentInstances,
745 componentInstancesProperties, componentInstancesInterfaces, componentCache, dataTypes, topologyTemplate);
746 Assert.assertNotNull(result);
750 public void testConvetNodeTemplateWhenGetOriginComponentIsRight() throws Exception {
751 Component component = getNewResource();
752 List<ComponentInstance> componentInstances = new ArrayList<>();
753 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
754 Map<String, List<ComponentInstanceProperty>> componentInstancesInterfaces = new HashMap<>();
755 Map<String, Component> componentCache = new HashMap<>();
756 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
757 ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
758 Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
759 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
760 List<ComponentInstanceInput> inputs = new ArrayList<>();
761 inputs.add(new ComponentInstanceInput());
762 componentInstancesInputs.put("key", inputs);
763 List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
764 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
765 reldef.setFromNode("id");
766 resourceInstancesRelations.add(reldef);
767 component.setComponentInstancesRelations(resourceInstancesRelations);
769 ComponentInstance instance = new ComponentInstance();
770 instance.setUniqueId("id");
771 instance.setComponentUid("uid");
772 instance.setOriginType(OriginTypeEnum.ServiceProxy);
773 componentInstances.add(instance);
775 component.setComponentInstancesInputs(componentInstancesInputs);
776 component.setInvariantUUID("uuid");
777 component.setUUID("uuid");
778 component.setDescription("desc");
780 componentCache.put("uid", component);
782 Mockito.when(capabiltyRequirementConvertor.getOriginComponent(any(Map.class),
783 any(ComponentInstance.class))).thenReturn(Either.right(false));
786 result = Deencapsulation.invoke(testSubject, "convertNodeTemplates", component, componentInstances,
787 componentInstancesProperties, componentInstancesInterfaces, componentCache, dataTypes, topologyTemplate);
788 Assert.assertNotNull(result);
792 public void testConvertNodeTemplatesWhenConvertComponentInstanceRequirmentsIsRight() {
793 Component component = new Resource();
794 List<ComponentInstance> componentInstances = new ArrayList<>();
795 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
796 Map<String, List<ComponentInstanceProperty>> componentInstancesInterfaces = new HashMap<>();
797 Map<String, Component> componentCache = new HashMap<>();
798 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
799 ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
800 Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
801 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
802 List<ComponentInstanceInput> inputs = new ArrayList<>();
803 inputs.add(new ComponentInstanceInput());
804 componentInstancesInputs.put("key", inputs);
805 List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
806 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
807 reldef.setFromNode("id");
808 reldef.setToNode("node");
809 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
810 CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
811 relationship.setRelation(new RelationshipInfo());
812 relationships.add(relationship);
813 reldef.setRelationships(relationships);
814 resourceInstancesRelations.add(reldef);
815 component.setComponentInstancesRelations(resourceInstancesRelations);
817 ComponentInstance instance = new ComponentInstance();
818 instance.setUniqueId("id");
819 componentInstances.add(instance);
821 component.setComponentInstancesInputs(componentInstancesInputs);
822 component.setComponentInstances(componentInstances);
824 Mockito.when(capabiltyRequirementConvertor.getOriginComponent(any(Map.class),
825 any(ComponentInstance.class))).thenReturn(Either.left(component));
828 result = Deencapsulation.invoke(testSubject, "convertNodeTemplates", component, componentInstances,
829 componentInstancesProperties, componentInstancesInterfaces, componentCache, dataTypes, topologyTemplate);
830 Assert.assertNotNull(result);
834 public void testAddComponentInstanceInputs() throws Exception {
836 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
837 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
838 ComponentInstance componentInstance = new ComponentInstance();
839 String instanceUniqueId = "id";
840 Map<String, Object> props = new HashMap<>();
842 List<ComponentInstanceInput> componentInstanceInputs = new ArrayList<>();
843 componentInstanceInputs.add(new ComponentInstanceInput());
845 componentInstancesInputs.put(instanceUniqueId, componentInstanceInputs);
848 Deencapsulation.invoke(testSubject, "addComponentInstanceInputs", dataTypes, componentInstancesInputs,
849 instanceUniqueId, props);
853 public void testAddPropertiesOfComponentInstance() throws Exception {
854 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
855 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
856 ComponentInstance componentInstance = new ComponentInstance();
857 String instanceUniqueId = "id";
858 Map<String, Object> props = new HashMap<>();
860 ComponentInstanceProperty cip = new ComponentInstanceProperty();
861 cip.setInstanceUniqueId("id");
863 List<ComponentInstanceProperty> list = new ArrayList<>();
866 componentInstancesProperties.put("id", list);
869 Deencapsulation.invoke(testSubject, "addPropertiesOfComponentInstance", componentInstancesProperties, dataTypes,
870 instanceUniqueId, props);
874 public void testAddPropertiesOfParentComponent() throws Exception {
875 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
876 ComponentInstance componentInstance = new ComponentInstance();
877 Component componentOfInstance = new Resource();
878 Map<String, Object> props = new HashMap<>();
880 List<PropertyDefinition> properties = new ArrayList<>();
881 properties.add(new PropertyDefinition());
883 ((Resource) componentOfInstance).setProperties(properties);
886 Deencapsulation.invoke(testSubject, "addPropertiesOfParentComponent", dataTypes,
887 componentOfInstance, props);
891 public void testCreateNodeType() throws Exception {
893 Component component = new Resource();
894 List<String> array = new ArrayList<>();
896 ((Resource) component).setDerivedFrom(array);
897 ToscaNodeType result;
899 // test when component is resource
900 result = Deencapsulation.invoke(testSubject, "createNodeType", component);
901 Assert.assertNotNull(result);
903 component = new Service();
904 // test when component is service
905 result = Deencapsulation.invoke(testSubject, "createNodeType", component);
906 Assert.assertNotNull(result);
910 public void testCreateProxyInterfaceTypesComponentNotFound() throws Exception {
911 Component container = new Service();
912 Either<Map<String, ToscaNodeType>, ToscaError> result;
913 List<ComponentInstance> componentInstances = new ArrayList<>();
914 ComponentInstance instance = new ComponentInstance();
915 instance.setOriginType(OriginTypeEnum.ServiceProxy);
916 instance.setSourceModelUid("targetModelUid");
917 instance.setToscaComponentName("toscaComponentName");
919 componentInstances.add(instance);
920 container.setComponentInstances(componentInstances);
921 Mockito.when(toscaOperationFacade.getToscaElement(any(String.class),
922 any(ComponentParametersView.class)))
923 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
924 result = Deencapsulation.invoke(testSubject, "createProxyInterfaceTypes", container);
925 Assert.assertTrue(result.isRight());
929 public void testCreateProxyInterfaceTypesWhenInterfaceLifecycleFetchFailed() {
930 Component container = new Service();
931 Either<Map<String, ToscaNodeType>, ToscaError> result;
932 List<ComponentInstance> componentInstances = new ArrayList<>();
933 ComponentInstance instance = new ComponentInstance();
934 instance.setOriginType(OriginTypeEnum.ServiceProxy);
935 instance.setSourceModelUid("targetModelUid");
936 instance.setToscaComponentName("toscaComponentName");
937 componentInstances.add(instance);
938 container.setComponentInstances(componentInstances);
940 Mockito.when(toscaOperationFacade.getToscaElement(any(String.class),
941 any(ComponentParametersView.class)))
942 .thenReturn(Either.left(new Resource()));
943 Mockito.when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
944 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
945 result = Deencapsulation.invoke(testSubject, "createProxyInterfaceTypes", container);
946 Assert.assertTrue(result.isRight());
950 public void testCreateProxyInterfaceTypesPositive() {
951 Component container = new Service();
952 Either<Map<String, ToscaNodeType>, ToscaError> result;
953 List<ComponentInstance> componentInstances = new ArrayList<>();
954 ComponentInstance instance = new ComponentInstance();
955 instance.setOriginType(OriginTypeEnum.ServiceProxy);
956 instance.setSourceModelUid("targetModelUid");
957 instance.setToscaComponentName("toscaComponentName");
958 componentInstances.add(instance);
959 container.setComponentInstances(componentInstances);
961 Mockito.when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
962 .thenReturn(Either.left(Collections.emptyMap()));
964 Component proxyResource = new Resource();
965 Map<String, InterfaceDefinition> proxyInterfaces = new HashMap<>();
966 proxyInterfaces.put("Local", new InterfaceDefinition("Local", "desc", new HashMap<>()));
967 proxyResource.setInterfaces(proxyInterfaces);
968 Mockito.when(toscaOperationFacade.getToscaElement(any(String.class),
969 any(ComponentParametersView.class)))
970 .thenReturn(Either.left(proxyResource));
972 result = Deencapsulation.invoke(testSubject, "createProxyInterfaceTypes", container);
973 Assert.assertNotNull(result);
974 Assert.assertTrue(result.isLeft());
975 Assert.assertEquals(1, result.left().value().size());
979 public void testCreateProxyNodeTypes() throws Exception {
980 Map<String, Component> componentCache = new HashMap<>();
981 Component container = new Resource();
982 Either<Map<String, ToscaNodeType>, ToscaError> result;
983 List<ComponentInstance> componentInstances = new ArrayList<>();
984 ComponentInstance instance = new ComponentInstance();
985 instance.setOriginType(OriginTypeEnum.ServiceProxy);
986 instance.setSourceModelUid("targetModelUid");
988 componentInstances.add(instance);
989 container.setComponentInstances(componentInstances);
991 Mockito.when(toscaOperationFacade.getLatestByName("serviceProxy"))
992 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
994 // test when getLatestByName return is right
995 result = Deencapsulation.invoke(testSubject, "createProxyNodeTypes", componentCache, container);
996 Assert.assertNotNull(result);
1000 public void testCreateServiceSubstitutionNodeTypes() throws Exception {
1001 Map<String, Component> componentCache = new HashMap<>();
1003 Component referencedService = getNewService();
1004 referencedService.setInvariantUUID("uuid");
1005 referencedService.setUUID("uuid");
1006 referencedService.setUniqueId("targetModelUid");
1007 referencedService.setDescription("desc");
1008 componentCache.put("targetModelUid", referencedService);
1010 Component containerService = new Service();
1011 List<ComponentInstance> componentInstances = new ArrayList<>();
1012 ComponentInstance instance = new ComponentInstance();
1013 instance.setOriginType(OriginTypeEnum.ServiceSubstitution);
1014 instance.setSourceModelUid("targetModelUid");
1016 componentInstances.add(instance);
1017 containerService.setComponentInstances(componentInstances);
1019 Mockito.when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
1020 .thenReturn(Either.left(Collections.emptyMap()));
1021 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
1022 Mockito.when(capabiltyRequirementConvertor.convertRequirements(any(Map.class), any(Service.class),
1023 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
1025 ToscaTemplate toscaNode = new ToscaTemplate("1_1");
1027 Deencapsulation.invoke(testSubject, "createServiceSubstitutionNodeTypes", componentCache, containerService, toscaNode);
1028 Assert.assertNotNull(toscaNode.getNode_types());
1032 public void testCreateProxyNodeTypesWhenGetLatestByNameReturnValue() {
1033 Map<String, Component> componentCache = new HashMap<>();
1034 Component container = new Resource();
1035 Either<Map<String, ToscaNodeType>, ToscaError> result;
1036 List<ComponentInstance> componentInstances = new ArrayList<>();
1037 ComponentInstance instance = new ComponentInstance();
1038 instance.setOriginType(OriginTypeEnum.ServiceProxy);
1039 instance.setSourceModelUid("targetModelUid");
1041 componentInstances.add(instance);
1042 container.setComponentInstances(componentInstances);
1044 Mockito.when(toscaOperationFacade.getLatestByName("serviceProxy")).thenReturn(Either.left(new Resource()));
1046 ComponentParametersView parameterView = new ComponentParametersView();
1047 parameterView.disableAll();
1048 parameterView.setIgnoreCategories(false);
1050 Mockito.when(toscaOperationFacade.getToscaElement(any(String.class),
1051 any(ComponentParametersView.class)))
1052 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
1054 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
1056 // test when getLatestByName is left
1057 result = Deencapsulation.invoke(testSubject, "createProxyNodeTypes", componentCache, container);
1058 Assert.assertNotNull(result);
1062 public void testCreateProxyNodeType() throws Exception {
1063 Map<String, Component> componentCache = new HashMap<>();
1064 Component origComponent = new Resource();
1065 Component proxyComponent = new Resource();
1066 ComponentInstance instance = new ComponentInstance();
1067 ToscaNodeType result;
1069 Mockito.when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
1072 result = Deencapsulation.invoke(testSubject, "createProxyNodeType", componentCache, origComponent,
1073 proxyComponent, instance);
1074 Assert.assertNotNull(result);
1078 public void testConvertComponentInstanceRequirements() throws Exception {
1079 Component component = new Resource();
1080 ComponentInstance componentInstance = new ComponentInstance();
1081 List<RequirementCapabilityRelDef> relations = new ArrayList<>();
1082 ToscaNodeTemplate nodeTypeTemplate = new ToscaNodeTemplate();
1083 Component originComponent = new Resource();
1084 Map<String, Component> componentCache = new HashMap<>();
1085 Either<ToscaNodeTemplate, ToscaError> result;
1088 result = Deencapsulation.invoke(testSubject, "convertComponentInstanceRequirements", component,
1089 componentInstance, relations, nodeTypeTemplate, originComponent, componentCache);
1090 Assert.assertNotNull(result);
1092 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
1093 reldef.setFromNode("name");
1094 reldef.setToNode("name1");
1095 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
1096 CapabilityRequirementRelationship cap = new CapabilityRequirementRelationship();
1097 cap.setRelation(new RelationshipInfo());
1098 relationships.add(cap);
1099 reldef.setRelationships(relationships);
1100 relations.add(reldef);
1101 componentInstance.setUniqueId("name");
1103 List<ComponentInstance> instances = new ArrayList<>();
1104 instances.add(componentInstance);
1105 component.setComponentInstances(instances);
1107 // test when filteredRElations ins't empty
1108 result = Deencapsulation.invoke(testSubject, "convertComponentInstanceRequirements", component,
1109 componentInstance, relations, nodeTypeTemplate, originComponent, componentCache);
1110 Assert.assertNotNull(result);
1114 public void testAddRequirement() throws Exception {
1115 ComponentInstance fromInstance = new ComponentInstance();
1116 Component fromOriginComponent = new Resource();
1117 List<ComponentInstance> instancesList = new ArrayList<>();
1118 RequirementCapabilityRelDef rel = new RequirementCapabilityRelDef();
1119 List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>();
1120 Map<String, Component> componentCache = new HashMap<>();
1123 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
1124 CapabilityRequirementRelationship cap = new CapabilityRequirementRelationship();
1125 cap.setRequirement(new RequirementDataDefinition());
1126 RelationshipInfo relation = new RelationshipInfo();
1127 relation.setRequirementUid("Uid");
1128 relation.setRequirement("requirment");
1129 relation.setCapability("cap");
1130 relation.setCapabilityOwnerId("id1");
1131 cap.setRelation(relation);
1132 relationships.add(cap);
1133 rel.setRelationships(relationships);
1134 rel.setToNode("name");
1135 fromInstance.setUniqueId("name");
1136 fromInstance.setComponentUid("string");
1137 instancesList.add(fromInstance);
1138 Map<String, List<RequirementDefinition>> requirements = new HashMap<>();
1139 fromOriginComponent.setRequirements(requirements);
1142 result = Deencapsulation.invoke(testSubject, "addRequirement", fromInstance, fromOriginComponent, instancesList,
1143 rel, toscaRequirements, componentCache);
1144 Assert.assertNotNull(result);
1148 public void testAddRequirmentsWhenFindRequirmentsReturnsValue() {
1150 ComponentInstance fromInstance = new ComponentInstance();
1151 Component fromOriginComponent = new Resource();
1152 List<ComponentInstance> instancesList = new ArrayList<>();
1153 RequirementCapabilityRelDef rel = new RequirementCapabilityRelDef();
1154 List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>();
1155 Map<String, Component> componentCache = new HashMap<>();
1158 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
1159 CapabilityRequirementRelationship cap = new CapabilityRequirementRelationship();
1160 cap.setRequirement(new RequirementDataDefinition());
1161 RelationshipInfo relation = new RelationshipInfo();
1162 relation.setRequirementUid("Uid");
1163 relation.setRequirement("requirment");
1164 relation.setCapability("cap");
1165 relation.setCapabilityOwnerId("id1");
1166 cap.setRelation(relation);
1167 relationships.add(cap);
1168 rel.setRelationships(relationships);
1169 rel.setToNode("name");
1170 fromInstance.setUniqueId("name");
1171 fromInstance.setComponentUid("string");
1172 instancesList.add(fromInstance);
1173 Map<String, List<RequirementDefinition>> requirements = new HashMap<>();
1175 List<RequirementDefinition> defs = new ArrayList<>();
1176 RequirementDefinition def = new RequirementDefinition();
1177 def.setName("requirment");
1178 def.setCapability("cap");
1180 requirements.put("key", defs);
1181 fromOriginComponent.setRequirements(requirements);
1183 Mockito.when(toscaOperationFacade.getToscaElement(any(String.class),
1184 any(ComponentParametersView.class)))
1185 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
1188 result = Deencapsulation.invoke(testSubject, "addRequirement", fromInstance, fromOriginComponent, instancesList,
1189 rel, toscaRequirements, componentCache);
1190 Assert.assertNotNull(result);
1194 public void testAddRequirmentsWhenCapabilityBelongsToRelation() {
1195 ComponentInstance fromInstance = new ComponentInstance();
1196 Component fromOriginComponent = new Resource();
1197 List<ComponentInstance> instancesList = new ArrayList<>();
1198 RequirementCapabilityRelDef rel = new RequirementCapabilityRelDef();
1199 List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>();
1200 Map<String, Component> componentCache = new HashMap<>();
1203 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
1204 CapabilityRequirementRelationship cap = new CapabilityRequirementRelationship();
1205 cap.setRequirement(new RequirementDataDefinition());
1206 RelationshipInfo relation = new RelationshipInfo();
1207 relation.setRequirementUid("Uid");
1208 relation.setRequirement("requirment");
1209 relation.setCapability("cap");
1210 relation.setCapabilityOwnerId("id1");
1211 cap.setRelation(relation);
1212 relationships.add(cap);
1213 rel.setRelationships(relationships);
1214 rel.setToNode("name");
1215 fromInstance.setUniqueId("name");
1216 fromInstance.setComponentUid("string");
1217 instancesList.add(fromInstance);
1218 Map<String, List<RequirementDefinition>> requirements = new HashMap<>();
1220 List<RequirementDefinition> defs = new ArrayList<>();
1221 RequirementDefinition def = new RequirementDefinition();
1222 def.setName("requirment");
1223 def.setCapability("cap");
1225 requirements.put("key", defs);
1226 fromOriginComponent.setRequirements(requirements);
1228 Map<String, List<CapabilityDefinition>> capabilities = new HashMap<>();
1229 List<CapabilityDefinition> caps = new ArrayList<>();
1230 CapabilityDefinition capdef = new CapabilityDefinition();
1231 capdef.setOwnerId("id");
1232 capdef.setName("name");
1233 capdef.setType("type");
1235 capabilities.put("cap", caps);
1237 fromOriginComponent.setCapabilities(capabilities);
1239 Mockito.when(toscaOperationFacade.getToscaElement(any(String.class),
1240 any(ComponentParametersView.class))).thenReturn(Either.left(fromOriginComponent));
1243 result = Deencapsulation.invoke(testSubject, "addRequirement", fromInstance, fromOriginComponent, instancesList,
1244 rel, toscaRequirements, componentCache);
1245 Assert.assertNotNull(result);
1249 public void testAddRequirmentsWithBuildAndAddRequirements() {
1250 ComponentInstance fromInstance = new ComponentInstance();
1251 Component fromOriginComponent = new Resource();
1252 List<ComponentInstance> instancesList = new ArrayList<>();
1253 RequirementCapabilityRelDef rel = new RequirementCapabilityRelDef();
1254 List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>();
1255 Map<String, Component> componentCache = new HashMap<>();
1258 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
1259 CapabilityRequirementRelationship cap = new CapabilityRequirementRelationship();
1260 cap.setRequirement(new RequirementDataDefinition());
1261 RelationshipInfo relation = new RelationshipInfo();
1262 relation.setRequirementUid("Uid");
1263 relation.setRequirement("requirment");
1264 relation.setCapability("cap");
1265 relation.setCapabilityOwnerId("id");
1266 cap.setRelation(relation);
1267 relationships.add(cap);
1268 rel.setRelationships(relationships);
1269 rel.setToNode("name");
1270 fromInstance.setUniqueId("name");
1271 fromInstance.setComponentUid("string");
1272 instancesList.add(fromInstance);
1273 Map<String, List<RequirementDefinition>> requirements = new HashMap<>();
1275 List<RequirementDefinition> defs = new ArrayList<>();
1276 RequirementDefinition def = new RequirementDefinition();
1277 def.setName("requirment");
1278 def.setCapability("cap");
1280 requirements.put("key", defs);
1281 fromOriginComponent.setRequirements(requirements);
1283 Map<String, List<CapabilityDefinition>> capabilities = new HashMap<>();
1284 List<CapabilityDefinition> caps = new ArrayList<>();
1285 CapabilityDefinition capdef = new CapabilityDefinition();
1286 capdef.setOwnerId("id");
1287 capdef.setName("cap");
1288 capdef.setPreviousName("before cap");
1289 capdef.setType("type");
1291 capabilities.put("cap", caps);
1292 fromOriginComponent.setCapabilities(capabilities);
1294 Mockito.when(toscaOperationFacade.getToscaElement(any(String.class),
1295 any(ComponentParametersView.class))).thenReturn(Either.left(fromOriginComponent));
1298 capabiltyRequirementConvertor
1299 .buildSubstitutedName(anyMap(), any(Component.class), anyList(), anyString(), anyString()))
1300 .thenReturn(Either.right(false));
1303 result = Deencapsulation.invoke(testSubject, "addRequirement", fromInstance, fromOriginComponent, instancesList,
1304 rel, toscaRequirements, componentCache);
1305 Assert.assertNotNull(result);
1309 public void testBuildAndAddRequirement() throws Exception {
1310 List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>();
1311 Component fromOriginComponent = new Resource();
1312 Component toOriginComponent = new Resource();
1313 CapabilityDefinition capability = new CapabilityDefinition();
1314 RequirementDefinition requirement = new RequirementDefinition();
1315 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1316 ComponentInstance toInstance = new ComponentInstance();
1317 Map<String, Component> componentCache = new HashMap<>();
1319 capability.setPath(new ArrayList<>());
1320 capability.setPreviousName("before cap");
1321 reqAndRelationshipPair.setCapability("cap");
1322 requirement.setPath(new ArrayList<>());
1323 requirement.setPreviousName("before req");
1324 reqAndRelationshipPair.setRequirement("req");
1327 capabiltyRequirementConvertor
1328 .buildSubstitutedName(anyMap(), eq(toOriginComponent), anyList(), eq("cap"), anyString()))
1329 .thenReturn(Either.left("buildCapNameRes"));
1332 capabiltyRequirementConvertor
1333 .buildSubstitutedName(anyMap(), eq(fromOriginComponent), anyList(), eq("req"), anyString()))
1334 .thenReturn(Either.right(false));
1337 result = Deencapsulation.invoke(testSubject, "buildAndAddRequirement", toscaRequirements, fromOriginComponent,
1338 toOriginComponent, capability, requirement, reqAndRelationshipPair, toInstance, componentCache);
1339 Assert.assertNotNull(result);
1343 public void testBuildAndAddRequirementBuildSubtitutedNameReturnsValueTwice() {
1344 List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>();
1345 Component fromOriginComponent = new Resource();
1346 Component toOriginComponent = new Resource();
1347 CapabilityDefinition capability = new CapabilityDefinition();
1348 RequirementDefinition requirement = new RequirementDefinition();
1349 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1350 ComponentInstance toInstance = new ComponentInstance();
1351 Map<String, Component> componentCache = new HashMap<>();
1353 capability.setPath(new ArrayList<>());
1354 reqAndRelationshipPair.setCapability("cap");
1355 requirement.setPath(new ArrayList<>());
1356 reqAndRelationshipPair.setRequirement("req");
1358 Mockito.when(capabiltyRequirementConvertor.buildSubstitutedName(any(), any(), any(), any(), any()))
1359 .thenReturn(Either.left("buildCapNameRes"));
1362 result = Deencapsulation.invoke(testSubject, "buildAndAddRequirement", toscaRequirements, fromOriginComponent,
1363 toOriginComponent, capability, requirement, reqAndRelationshipPair, toInstance, componentCache);
1364 Assert.assertNotNull(result);
1365 Assert.assertTrue(result);
1369 public void testIsRequirementBelongToRelation() throws Exception {
1371 Component originComponent = new Resource();
1372 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1373 RequirementDefinition requirement = new RequirementDefinition();
1374 String fromInstanceId = "";
1377 requirement.setName("name");
1378 reqAndRelationshipPair.setRequirement("name1");
1380 // test return false
1381 result = Deencapsulation.invoke(testSubject, "isRequirementBelongToRelation", originComponent,
1382 reqAndRelationshipPair, requirement, fromInstanceId);
1383 Assert.assertNotNull(result);
1387 public void testIsRequirementBelongToRelationWithNonAtomicComponent() {
1389 Component originComponent = new Service();
1390 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1391 RequirementDefinition requirement = new RequirementDefinition();
1392 String fromInstanceId = "";
1395 // default test return true
1396 result = Deencapsulation.invoke(testSubject, "isRequirementBelongToRelation", originComponent,
1397 reqAndRelationshipPair, requirement, fromInstanceId);
1398 Assert.assertNotNull(result);
1402 public void testIsRequirementBelongToOwner() throws Exception {
1404 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1405 RequirementDefinition requirement = new RequirementDefinition();
1406 String fromInstanceId = "";
1407 Component originComponent = new Resource();
1410 requirement.setOwnerId("owner1");
1411 reqAndRelationshipPair.setRequirementOwnerId("owner");
1414 result = Deencapsulation.invoke(testSubject, "isRequirementBelongToOwner", reqAndRelationshipPair, requirement,
1415 fromInstanceId, originComponent);
1416 Assert.assertNotNull(result);
1420 public void testIsCvfc() throws Exception {
1422 Component component = new Resource();
1425 component = new Service();
1427 result = Deencapsulation.invoke(testSubject, "isCvfc", component);
1428 Assert.assertNotNull(result);
1432 public void testConvertCapabilities() throws Exception {
1433 Component component = new Resource();
1434 SubstitutionMapping substitutionMappings = new SubstitutionMapping();
1435 Map<String, Component> componentCache = new HashMap<>();
1436 Either<SubstitutionMapping, ToscaError> result;
1438 Mockito.when(capabiltyRequirementConvertor.convertSubstitutionMappingCapabilities(componentCache, component))
1439 .thenReturn(Either.right(ToscaError.NODE_TYPE_CAPABILITY_ERROR));
1441 // default test return isRight
1442 result = Deencapsulation.invoke(testSubject, "convertCapabilities", component, substitutionMappings,
1444 Assert.assertNotNull(result);
1448 public void testConvertCapabilities_1() throws Exception {
1449 Component component = new Resource();
1450 ToscaNodeType nodeType = new ToscaNodeType();
1451 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
1452 Either<ToscaNodeType, ToscaError> result;
1454 Map<String, ToscaCapability> capabilities = new HashMap<>();
1455 capabilities.put("key", new ToscaCapability());
1458 result = Deencapsulation
1459 .invoke(testSubject, "convertCapabilities", new HashMap<>(), component, nodeType, dataTypes);
1460 Assert.assertNotNull(result);
1464 public void testConvertToNodeTemplateArtifacts() throws Exception {
1465 Map<String, ToscaArtifactDataDefinition> container = new HashMap<>();
1466 ToscaArtifactDataDefinition art = new ToscaArtifactDataDefinition();
1467 art.setFile("test_file");
1468 art.setType("test_type");
1469 Map<String, ToscaTemplateArtifact> result;
1470 container.put("test_art", art);
1471 result = Deencapsulation.invoke(testSubject, "convertToNodeTemplateArtifacts", container);
1472 Assert.assertNotNull(result);
1473 Assert.assertTrue(MapUtils.isNotEmpty(result));
1474 Assert.assertTrue(result.get("test_art").getFile().equals("test_file"));
1475 Assert.assertTrue(result.get("test_art").getType().equals("test_type"));
1479 public void testGetProxyNodeTypeInterfacesNoInterfaces() {
1480 Component service = new Service();
1481 Optional<Map<String, Object>> proxyNodeTypeInterfaces =
1482 testSubject.getProxyNodeTypeInterfaces(service, DATA_TYPES);
1483 Assert.assertFalse(proxyNodeTypeInterfaces.isPresent());
1487 public void testGetProxyNodeTypeInterfaces() {
1488 Component service = getTestComponent();
1489 Optional<Map<String, Object>> proxyNodeTypeInterfaces =
1490 testSubject.getProxyNodeTypeInterfaces(service, DATA_TYPES);
1491 Assert.assertTrue(proxyNodeTypeInterfaces.isPresent());
1492 Map<String, Object> componentInterfaces = proxyNodeTypeInterfaces.get();
1493 Assert.assertNotNull(componentInterfaces);
1498 public void testGetProxyNodeTypePropertiesComponentNull() {
1499 Optional<Map<String, ToscaProperty>> proxyNodeTypeProperties =
1500 testSubject.getProxyNodeTypeProperties(null, DATA_TYPES);
1501 Assert.assertFalse(proxyNodeTypeProperties.isPresent());
1505 public void testGetProxyNodeTypePropertiesNoProperties() {
1506 Component service = new Service();
1507 Optional<Map<String, ToscaProperty>> proxyNodeTypeProperties =
1508 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1509 Assert.assertFalse(proxyNodeTypeProperties.isPresent());
1513 public void testGetProxyNodeTypeProperties() {
1514 Component service = getTestComponent();
1515 service.setProperties(Arrays.asList(createMockProperty("componentPropStr", "Default String Prop"),
1516 createMockProperty("componentPropInt", null)));
1517 Optional<Map<String, ToscaProperty>> proxyNodeTypeProperties =
1518 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1519 Assert.assertTrue(proxyNodeTypeProperties.isPresent());
1520 Map<String, ToscaProperty> componentProperties = proxyNodeTypeProperties.get();
1521 Assert.assertNotNull(componentProperties);
1522 Assert.assertEquals(2, componentProperties.size());
1526 public void testAddInputsToPropertiesNoInputs() {
1527 Component service = getTestComponent();
1528 service.setProperties(Arrays.asList(createMockProperty("componentPropStr", "Default String Prop"),
1529 createMockProperty("componentPropInt", null)));
1530 Optional<Map<String, ToscaProperty>> proxyNodeTypePropertiesResult =
1531 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1533 Assert.assertTrue(proxyNodeTypePropertiesResult.isPresent());
1534 Map<String, ToscaProperty> proxyNodeTypeProperties = proxyNodeTypePropertiesResult.get();
1535 testSubject.addInputsToProperties(DATA_TYPES, null, proxyNodeTypeProperties);
1536 Assert.assertNotNull(proxyNodeTypeProperties);
1537 Assert.assertEquals(2, proxyNodeTypeProperties.size());
1538 testSubject.addInputsToProperties(DATA_TYPES, new ArrayList<>(), proxyNodeTypeProperties);
1539 Assert.assertEquals(2, proxyNodeTypeProperties.size());
1543 public void testAddInputsToPropertiesWithInputs() {
1544 Component service = getTestComponent();
1545 service.setProperties(Arrays.asList(createMockProperty("componentPropStr", "Default String Prop"),
1546 createMockProperty("componentPropInt", null)));
1547 service.setInputs(Arrays.asList(createMockInput("componentInputStr1",
1548 "Default String Input1"), createMockInput("componentInputStr2", "Default String Input2")));
1549 Optional<Map<String, ToscaProperty>> proxyNodeTypePropertiesResult =
1550 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1552 Assert.assertTrue(proxyNodeTypePropertiesResult.isPresent());
1553 Map<String, ToscaProperty> proxyNodeTypeProperties = proxyNodeTypePropertiesResult.get();
1554 testSubject.addInputsToProperties(DATA_TYPES, service.getInputs(), proxyNodeTypeProperties);
1555 Assert.assertNotNull(proxyNodeTypeProperties);
1556 Assert.assertEquals(4, proxyNodeTypeProperties.size());
1560 public void testAddInputsToPropertiesOnlyInputs() {
1561 Component service = getTestComponent();
1562 service.setInputs(Arrays.asList(createMockInput("componentInputStr1",
1563 "Default String Input1"), createMockInput("componentInputStr2", "Default String Input2")));
1564 Optional<Map<String, ToscaProperty>> proxyNodeTypePropertiesResult =
1565 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1567 Assert.assertTrue(proxyNodeTypePropertiesResult.isPresent());
1568 Map<String, ToscaProperty> proxyNodeTypeProperties = proxyNodeTypePropertiesResult.get();
1569 testSubject.addInputsToProperties(DATA_TYPES, service.getInputs(), proxyNodeTypeProperties);
1570 Assert.assertNotNull(proxyNodeTypeProperties);
1571 Assert.assertEquals(2, proxyNodeTypeProperties.size());
1575 public void testOperationImplementationInProxyNodeTypeNotPresent() {
1576 Component service = getTestComponent();
1577 InterfaceDefinition interfaceDefinition =
1578 service.getInterfaces().get("normalizedServiceComponentName-interface");
1579 interfaceDefinition.setOperations(new HashMap<>());
1580 final OperationDataDefinition operation = new OperationDataDefinition();
1581 operation.setName("start");
1582 operation.setDescription("op description");
1583 final ArtifactDataDefinition implementation = new ArtifactDataDefinition();
1584 implementation.setArtifactName("createBPMN.bpmn");
1585 operation.setImplementation(implementation);
1586 interfaceDefinition.getOperations().put(operation.getName(), operation);
1587 service.getInterfaces().put("normalizedServiceComponentName-interface", interfaceDefinition);
1588 service.setInputs(Arrays.asList(createMockInput("componentInputStr1",
1589 "Default String Input1"), createMockInput("componentInputStr2", "Default String Input2")));
1590 Optional<Map<String, Object>> proxyNodeTypeInterfaces =
1591 testSubject.getProxyNodeTypeInterfaces(service, DATA_TYPES);
1592 Assert.assertTrue(proxyNodeTypeInterfaces.isPresent());
1593 Map<String, Object> componentInterfaces = proxyNodeTypeInterfaces.get();
1594 Assert.assertNotNull(componentInterfaces);
1597 private Component getTestComponent() {
1598 Component component = new Service();
1599 component.setNormalizedName("normalizedServiceComponentName");
1600 InterfaceDefinition addedInterface = new InterfaceDefinition();
1601 addedInterface.setType("com.some.service.or.other.serviceName");
1602 final String interfaceType = "normalizedServiceComponentName-interface";
1603 component.setInterfaces(new HashMap<>());
1604 component.getInterfaces().put(interfaceType, addedInterface);
1608 private PropertyDefinition createMockProperty(String propertyName, String defaultValue){
1609 PropertyDefinition propertyDefinition = new PropertyDefinition();
1610 propertyDefinition.setName(propertyName);
1611 propertyDefinition.setType("string");
1612 propertyDefinition.setDefaultValue(defaultValue);
1613 return propertyDefinition;
1616 private InputDefinition createMockInput(String inputName, String defaultValue){
1617 InputDefinition inputDefinition = new InputDefinition();
1618 inputDefinition.setName(inputName);
1619 inputDefinition.setType("string");
1620 inputDefinition.setDefaultValue(defaultValue);
1621 return inputDefinition;