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=========================================================
19 * Modifications copyright (c) 2020, Nordix Foundation
20 * ================================================================================
23 package org.openecomp.sdc.be.tosca;
25 import static org.hamcrest.CoreMatchers.is;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertFalse;
28 import static org.junit.Assert.assertThat;
29 import static org.junit.Assert.assertTrue;
30 import static org.junit.jupiter.api.Assertions.assertNotNull;
31 import static org.junit.jupiter.api.Assertions.assertThrows;
32 import static org.mockito.ArgumentMatchers.any;
33 import static org.mockito.ArgumentMatchers.anyBoolean;
34 import static org.mockito.ArgumentMatchers.anyList;
35 import static org.mockito.ArgumentMatchers.anyMap;
36 import static org.mockito.ArgumentMatchers.anyString;
37 import static org.mockito.ArgumentMatchers.eq;
38 import static org.mockito.ArgumentMatchers.isNull;
39 import static org.mockito.Mockito.doReturn;
40 import static org.mockito.Mockito.times;
41 import static org.mockito.Mockito.verify;
42 import static org.mockito.Mockito.when;
43 import static org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum.VF;
44 import static org.openecomp.sdc.be.tosca.PropertyConvertor.PropertyType.PROPERTY;
46 import fj.data.Either;
47 import java.util.ArrayList;
48 import java.util.Arrays;
49 import java.util.Collections;
50 import java.util.HashMap;
51 import java.util.LinkedList;
52 import java.util.List;
54 import java.util.Optional;
55 import java.util.stream.Collectors;
56 import mockit.Deencapsulation;
57 import org.apache.commons.collections.MapUtils;
58 import org.apache.commons.lang3.tuple.ImmutablePair;
59 import org.apache.commons.lang3.tuple.Triple;
60 import org.junit.Assert;
61 import org.junit.Before;
62 import org.junit.Test;
63 import org.mockito.InjectMocks;
64 import org.mockito.Mock;
65 import org.mockito.MockitoAnnotations;
66 import org.openecomp.sdc.be.components.BeConfDependentTest;
67 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
68 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
69 import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
70 import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
71 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
72 import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
73 import org.openecomp.sdc.be.datatypes.elements.ToscaArtifactDataDefinition;
74 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
75 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
76 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
77 import org.openecomp.sdc.be.exception.ToscaExportException;
78 import org.openecomp.sdc.be.model.ArtifactDefinition;
79 import org.openecomp.sdc.be.model.AttributeDefinition;
80 import org.openecomp.sdc.be.model.CapabilityDefinition;
81 import org.openecomp.sdc.be.model.CapabilityRequirementRelationship;
82 import org.openecomp.sdc.be.model.Component;
83 import org.openecomp.sdc.be.model.ComponentInstance;
84 import org.openecomp.sdc.be.model.ComponentInstanceAttribute;
85 import org.openecomp.sdc.be.model.ComponentInstanceInput;
86 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
87 import org.openecomp.sdc.be.model.ComponentParametersView;
88 import org.openecomp.sdc.be.model.DataTypeDefinition;
89 import org.openecomp.sdc.be.model.GroupDefinition;
90 import org.openecomp.sdc.be.model.GroupInstance;
91 import org.openecomp.sdc.be.model.InputDefinition;
92 import org.openecomp.sdc.be.model.InterfaceDefinition;
93 import org.openecomp.sdc.be.model.PropertyDefinition;
94 import org.openecomp.sdc.be.model.RelationshipInfo;
95 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
96 import org.openecomp.sdc.be.model.RequirementDefinition;
97 import org.openecomp.sdc.be.model.Resource;
98 import org.openecomp.sdc.be.model.Service;
99 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
100 import org.openecomp.sdc.be.model.category.CategoryDefinition;
101 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
102 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
103 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
104 import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
105 import org.openecomp.sdc.be.tosca.exception.ToscaConversionException;
106 import org.openecomp.sdc.be.tosca.model.SubstitutionMapping;
107 import org.openecomp.sdc.be.tosca.model.ToscaCapability;
108 import org.openecomp.sdc.be.tosca.model.ToscaNodeTemplate;
109 import org.openecomp.sdc.be.tosca.model.ToscaNodeType;
110 import org.openecomp.sdc.be.tosca.model.ToscaProperty;
111 import org.openecomp.sdc.be.tosca.model.ToscaTemplate;
112 import org.openecomp.sdc.be.tosca.model.ToscaTemplateArtifact;
113 import org.openecomp.sdc.be.tosca.model.ToscaTemplateRequirement;
114 import org.openecomp.sdc.be.tosca.model.ToscaTopolgyTemplate;
115 import org.openecomp.sdc.be.tosca.utils.InputConverter;
116 import org.openecomp.sdc.be.tosca.utils.OutputConverter;
118 public class ToscaExportHandlerTest extends BeConfDependentTest {
120 private static final String COMPONENT_PROPERTY_NAME = "prop1";
121 private static final String COMPONENT_PROPERTY_TYPE = "string";
122 private static final String COMPONENT_INPUT_NAME = "input1";
123 private static final String COMPONENT_INPUT_TYPE = "integer";
124 private static final String RESOURCE_NAME = "resource";
125 private static final String TOSCA_VERSION = "tosca_simple_yaml_1_1";
126 private static final Map<String, DataTypeDefinition> DATA_TYPES = new HashMap<>();
129 private ToscaExportHandler testSubject;
132 private ApplicationDataTypeCache dataTypeCache;
135 private ToscaOperationFacade toscaOperationFacade;
138 private CapabilityRequirementConverter capabilityRequirementConverter;
141 private InputConverter inputConverter;
144 private OutputConverter outputConverter;
147 private GroupExportParser groupExportParser;
150 private PropertyConvertor propertyConvertor;
153 private GroupExportParserImpl groupExportParserImpl;
156 private InterfaceLifecycleOperation interfaceLifecycleOperation;
159 private InterfacesOperationsConverter interfacesOperationsConverter;
162 private PolicyExportParser policyExportParser;
165 private AttributeConverter attributeConverter;
168 public void setUpMock() {
169 MockitoAnnotations.initMocks(this);
170 doReturn(new ToscaProperty()).when(propertyConvertor).convertProperty(any(), any(), eq(PROPERTY));
171 doReturn(new HashMap<String, Object>()).when(interfacesOperationsConverter)
172 .getInterfacesMap(any(), isNull(), anyMap(), anyMap(), anyBoolean(), anyBoolean());
175 private Resource getNewResource() {
176 Resource resource = new Resource();
177 List<CategoryDefinition> categories = new ArrayList<>();
178 CategoryDefinition category = new CategoryDefinition();
179 List<SubCategoryDefinition> subcategories = new ArrayList<>();
180 SubCategoryDefinition subcategory = new SubCategoryDefinition();
181 List<DataTypeDefinition> dataTypes = new ArrayList<>();
182 DataTypeDefinition dataType = new DataTypeDefinition();
183 dataType.setName("dataTypeName");
184 dataType.setDerivedFromName("tosca.datatypes.Root");
185 PropertyDataDefinition propData = new PropertyDataDefinitionBuilder()
189 List<PropertyDataDefinition> propDataList = Arrays.asList(propData);
190 dataType.setPropertiesData(propDataList);
191 List<PropertyDefinition> propList = propDataList.stream().map(PropertyDefinition::new)
192 .collect(Collectors.toList());
193 dataType.setProperties(propList);
194 dataTypes.add(dataType);
196 subcategory.setName("name");
197 subcategories.add(subcategory);
198 category.setName("name");
199 category.setSubcategories(subcategories);
200 categories.add(category);
202 resource.setCategories(categories);
203 resource.setVersion("version");
204 resource.setVendorName("vendorName");
205 resource.setVendorRelease("vendorRelease");
206 resource.setResourceVendorModelNumber("resourceVendorModelNumber");
207 resource.setDataTypes(dataTypes);
212 private Service getNewService() {
213 Service service = new Service();
214 List<CategoryDefinition> categories = new ArrayList<>();
215 CategoryDefinition category = new CategoryDefinition();
216 List<SubCategoryDefinition> subcategories = new ArrayList<>();
217 SubCategoryDefinition subcategory = new SubCategoryDefinition();
219 subcategory.setName("name");
220 subcategories.add(subcategory);
221 category.setName("name");
222 category.setSubcategories(subcategories);
223 categories.add(category);
225 service.setCategories(categories);
226 service.setComponentType(ComponentTypeEnum.SERVICE);
227 service.setServiceType("serviceType");
228 service.setServiceRole("serviceRole");
229 service.setEnvironmentContext("environmentContext");
235 public void testExportComponent() throws Exception {
236 Component component = getNewResource();
237 Either<ToscaRepresentation, ToscaError> result;
239 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
240 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class),
241 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
242 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
243 .thenReturn(Either.left(Collections.emptyMap()));
245 // default test when component is Resource
246 result = testSubject.exportComponent(component);
247 Assert.assertNotNull(result);
249 component = getNewService();
250 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Service.class),
251 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
252 when(dataTypeCache.getAll()).thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
254 // default test when component is Service
255 result = testSubject.exportComponent(component);
256 Assert.assertNotNull(result);
260 public void testExportComponentInterface() throws Exception {
261 Component component = getNewResource();
262 Either<ToscaRepresentation, ToscaError> result;
264 ((Resource) component).setInterfaces(new HashMap<>());
266 when(dataTypeCache.getAll()).thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
267 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
268 .thenReturn(Either.left(Collections.emptyMap()));
269 // default test when convertInterfaceNodeType is right
270 result = testSubject.exportComponentInterface(component, false);
271 Assert.assertNotNull(result);
273 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
274 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class),
275 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
277 // default test when convertInterfaceNodeType is left
278 result = testSubject.exportComponentInterface(component, false);
279 Assert.assertNotNull(result);
283 public void testConvertInterfaceNodeTypeProperties() throws Exception {
285 Resource component = getNewResource();
287 component.setInterfaces(new HashMap<>());
288 InputDefinition input = new InputDefinition();
289 input.setName(COMPONENT_INPUT_NAME);
290 input.setType(COMPONENT_INPUT_TYPE);
291 component.setInputs(Collections.singletonList(input));
292 PropertyDefinition property = new PropertyDefinition();
293 property.setName(COMPONENT_PROPERTY_NAME);
294 property.setType(COMPONENT_PROPERTY_TYPE);
295 component.setProperties(Collections.singletonList(property));
296 component.setName(RESOURCE_NAME);
297 component.setToscaResourceName(RESOURCE_NAME);
299 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
300 .thenReturn(Either.left(Collections.emptyMap()));
301 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
302 // when convertRequirements is called, make it return the same value as 3rd (index=2) argument.
303 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class),
304 any(ToscaNodeType.class))).thenAnswer(i -> Either.left(i.getArgument(2)));
306 Either<ToscaTemplate, ToscaError> result = (Either<ToscaTemplate, ToscaError>) Deencapsulation
307 .invoke(testSubject, "convertInterfaceNodeType", new HashMap<String, Component>(), component,
308 new ToscaTemplate(TOSCA_VERSION), new HashMap<String, ToscaNodeType>(), false);
309 Assert.assertNotNull(result);
310 assertThat(result.isLeft(), is(true));
311 Map<String, ToscaNodeType> nodeTypeMap = result.left().value().getNode_types();
312 assertThat(nodeTypeMap.size(), is(1));
313 ToscaNodeType toscaNodeType = nodeTypeMap.values().iterator().next();
314 Map<String, ToscaProperty> propertyMap = toscaNodeType.getProperties();
315 // Check if inputs and properties in component are merged properly
316 assertThat(propertyMap.size(), is(2));
317 assertThat(propertyMap.containsKey(COMPONENT_INPUT_NAME), is(true));
318 assertThat(propertyMap.containsKey(COMPONENT_PROPERTY_NAME), is(true));
322 public void testCreateToscaRepresentation() throws Exception {
323 ToscaTemplate toscaTemplate = new ToscaTemplate("");
324 ToscaRepresentation result;
327 result = testSubject.createToscaRepresentation(toscaTemplate);
328 Assert.assertNotNull(result);
332 public void testGetDependencies() throws Exception {
334 Component component = new Resource();
335 Either<ToscaTemplate, ToscaError> result;
338 result = testSubject.getDependencies(component);
339 Assert.assertNotNull(result);
343 public void testSetImports() throws Exception {
344 Resource resource = new Resource();
345 resource.setResourceType(ResourceTypeEnum.PNF);
347 Component component = resource;
348 component.setName("TestResourceName");
349 Map<String, ArtifactDefinition> artifactList = new HashMap<>();
350 ArtifactDefinition artifact = new ArtifactDefinition();
351 artifact.setArtifactName("name.name2");
352 artifactList.put("assettoscatemplate", artifact);
353 component.setArtifacts(artifactList);
354 component.setToscaArtifacts(artifactList);
355 ToscaTemplate toscaTemplate = new ToscaTemplate("");
357 ComponentInstance ci = new ComponentInstance();
358 ci.setComponentUid("name");
359 ci.setOriginType(OriginTypeEnum.PNF);
360 ci.setSourceModelUid("modelName");
361 List<ComponentInstance> componentInstanceList = new LinkedList<>();
362 componentInstanceList.add(ci);
363 component.setComponentInstances(componentInstanceList);
365 when(toscaOperationFacade.getToscaFullElement("name")).thenReturn(Either.left(component));
367 Either<ImmutablePair<ToscaTemplate, Map<String, Component>>, ToscaError> result;
368 result = Deencapsulation.invoke(testSubject, "fillImports", component, toscaTemplate);
370 verify(toscaOperationFacade, times(1)).getToscaFullElement("name");
371 Assert.assertTrue(result.isLeft());
372 ToscaTemplate toscaTemplateRes = result.left().value().left;
373 Assert.assertEquals(8, toscaTemplateRes.getImports().size());
374 Assert.assertNotNull(toscaTemplateRes.getImports().get(6).get("resource-TestResourceName-interface"));
375 Assert.assertNotNull(toscaTemplateRes.getImports().get(7).get("resource-TestResourceName"));
376 Assert.assertEquals(1, toscaTemplateRes.getDependencies().size());
377 Assert.assertEquals("name.name2", toscaTemplateRes.getDependencies().get(0).getLeft());
381 public void testConvertToscaTemplate() throws Exception {
383 final Component component = getNewResource();
384 final ToscaTemplate toscaNode = new ToscaTemplate("");
385 Either<ToscaTemplate, ToscaError> result;
386 final List<ComponentInstance> resourceInstances = new ArrayList<>();
387 final ComponentInstance instance = new ComponentInstance();
389 instance.setOriginType(OriginTypeEnum.SERVICE);
390 instance.setSourceModelUid("targetModelUid");
391 resourceInstances.add(instance);
393 component.setComponentInstances(resourceInstances);
395 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
396 when(capabilityRequirementConverter.getOriginComponent(any(Map.class), any(ComponentInstance.class))).thenReturn(Either.right(false));
398 final Map<String, ToscaProperty> map = new HashMap<>();
399 map.put("mock", new ToscaProperty());
400 doReturn(map).when(outputConverter).convert(any(), any());
403 result = Deencapsulation.invoke(testSubject, "convertToscaTemplate", component, toscaNode);
404 Assert.assertNotNull(result);
408 public void testConvertToscaTemplateWhenComponentContainsGroup() throws ToscaConversionException {
409 Component component = getNewResource();
410 ToscaTemplate toscaNode = new ToscaTemplate("");
411 Either<ToscaTemplate, ToscaError> result;
412 component.setComponentInstances(new ArrayList<>());
414 List<GroupDefinition> groups = new ArrayList<>();
415 GroupDefinition group = new GroupDefinition();
416 List<String> artifacts = new ArrayList<>();
417 artifacts.add("artifact");
418 group.setType("org.openecomp.groups.VfModule");
419 group.setArtifacts(artifacts);
421 component.setGroups(groups);
423 Map<String, String[]> substitutionMappingMap = new HashMap<>();
424 String[] array = {"value1", "value2"};
425 substitutionMappingMap.put("key", array);
427 when(capabilityRequirementConverter.convertSubstitutionMappingCapabilities(any(Map.class),
428 any(Component.class))).thenReturn(Either.left(substitutionMappingMap));
430 when(capabilityRequirementConverter.convertSubstitutionMappingRequirements(any(Map.class),
431 any(Component.class), any(SubstitutionMapping.class)))
432 .thenReturn(Either.left(new SubstitutionMapping()));
434 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
436 when(inputConverter.convertInputs(any(List.class), any(Map.class))).thenReturn(new HashMap<>());
438 when(groupExportParser.getGroups(component)).thenReturn(null);
440 final Map<String, ToscaProperty> map = new HashMap<>();
441 map.put("mock", new ToscaProperty());
442 doReturn(map).when(outputConverter).convert(any(), any());
444 // test component contains group
445 result = Deencapsulation.invoke(testSubject, "convertToscaTemplate", component, toscaNode);
446 Assert.assertNotNull(result);
450 public void testConvertToscaTemplateWhenComponentIsService() throws Exception {
451 Component component = getNewService();
452 ToscaTemplate toscaNode = new ToscaTemplate("");
453 Either<ToscaTemplate, ToscaError> result;
454 component.setComponentInstances(new ArrayList<>());
456 List<GroupDefinition> groups = new ArrayList<>();
457 GroupDefinition group = new GroupDefinition();
458 List<String> artifacts = new ArrayList<>();
459 artifacts.add("artifact");
460 group.setType("org.openecomp.groups.VfModule");
461 group.setArtifacts(artifacts);
463 component.setGroups(groups);
465 Map<String, String[]> substitutionMappingMap = new HashMap<>();
466 String[] array = {"value1", "value2"};
467 substitutionMappingMap.put("key", array);
469 when(capabilityRequirementConverter.convertSubstitutionMappingCapabilities(anyMap(), any(Component.class)))
470 .thenReturn(Either.left(substitutionMappingMap));
472 when(capabilityRequirementConverter
473 .convertSubstitutionMappingRequirements(anyMap(), any(Component.class), any(SubstitutionMapping.class)))
474 .thenReturn(Either.left(new SubstitutionMapping()));
476 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
478 when(inputConverter.convertInputs(anyList(), anyMap())).thenReturn(new HashMap<>());
479 final Map<String, ToscaProperty> map = new HashMap<>();
480 map.put("mock", new ToscaProperty());
481 doReturn(map).when(outputConverter).convert(any(), any());
483 // test component contains group
484 result = Deencapsulation.invoke(testSubject, "convertToscaTemplate", component, toscaNode);
485 Assert.assertNotNull(result);
489 public void testConvertMetadata_1() throws Exception {
491 Component component = getNewResource();
492 boolean isInstance = true;
493 ComponentInstance componentInstance = new ComponentInstance();
494 componentInstance.setOriginType(OriginTypeEnum.ServiceProxy);
495 componentInstance.setSourceModelInvariant("targetModelInvariant");
498 Map<String, String> result = Deencapsulation.invoke(testSubject, "convertMetadata", component, isInstance, componentInstance);
499 Assert.assertNotNull(result);
503 public void testFillImports() throws Exception {
505 Component component = getNewService();
506 ToscaTemplate toscaTemplate = new ToscaTemplate("");
507 Either<ImmutablePair<ToscaTemplate, Map<String, Component>>, ToscaError> result;
509 ComponentInstance instance = new ComponentInstance();
510 List<ComponentInstance> resourceInstances = new ArrayList<>();
511 instance.setComponentUid("name");
512 resourceInstances.add(instance);
513 component.setComponentInstances(resourceInstances);
514 Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
515 ArtifactDefinition artifact = new ArtifactDefinition();
516 artifact.setArtifactName("name.name2");
517 toscaArtifacts.put("assettoscatemplate", artifact);
518 component.setToscaArtifacts(toscaArtifacts);
520 when(toscaOperationFacade.getToscaFullElement(any(String.class)))
521 .thenReturn(Either.left(component));
523 Resource baseType = getNewResource();
524 Map<String, ArtifactDefinition> baseTypeToscaArtifacts = new HashMap<>();
525 ArtifactDefinition baseTypeArtifact = new ArtifactDefinition();
526 baseTypeArtifact.setArtifactName("typeA");
527 baseTypeToscaArtifacts.put("assettoscatemplate", baseTypeArtifact);
528 baseType.setToscaArtifacts(baseTypeToscaArtifacts);
530 component.setDerivedFromGenericType("org.typeA");
531 component.setDerivedFromGenericVersion("1.0");
532 when(toscaOperationFacade.getByToscaResourceNameAndVersion("org.typeA", "1.0")).thenReturn(Either.left(baseType));
535 result = Deencapsulation.invoke(testSubject, "fillImports", component, toscaTemplate);
536 Assert.assertNotNull(result);
540 public void testCreateDependency() throws Exception {
542 Map<String, Component> componentCache = new HashMap<>();
543 List<Map<String, Map<String, String>>> imports = new ArrayList<>();
544 List<Triple<String, String, Component>> dependecies = new ArrayList<>();
545 ComponentInstance ci = new ComponentInstance();
546 Component component = getNewResource();
548 Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
549 ArtifactDefinition artifact = new ArtifactDefinition();
550 artifact.setArtifactName("name.name2");
551 toscaArtifacts.put("assettoscatemplate", artifact);
552 component.setToscaArtifacts(toscaArtifacts);
553 ci.setComponentUid("name");
554 ci.setOriginType(OriginTypeEnum.ServiceProxy);
555 ci.setSourceModelUid("modelName");
557 when(toscaOperationFacade.getToscaFullElement("name")).thenReturn(Either.left(component));
559 when(toscaOperationFacade.getToscaFullElement("modelName")).thenReturn(Either.left(new Service()));
562 Deencapsulation.invoke(testSubject, "createDependency", componentCache, imports, dependecies, ci);
563 Assert.assertFalse(componentCache.isEmpty());
567 public void testGetInterfaceFilename() throws Exception {
568 String artifactName = "artifact.name";
572 result = ToscaExportHandler.getInterfaceFilename(artifactName);
573 Assert.assertNotNull(result);
577 public void testConvertNodeType() throws Exception {
578 Component component = new Resource();
579 ToscaTemplate toscaNode = new ToscaTemplate("");
580 Map<String, ToscaNodeType> nodeTypes = new HashMap<>();
581 Either<ToscaTemplate, ToscaError> result;
583 when(dataTypeCache.getAll()).thenReturn(Either.right(JanusGraphOperationStatus.ALREADY_EXIST));
584 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
585 .thenReturn(Either.left(Collections.emptyMap()));
587 result = Deencapsulation
588 .invoke(testSubject, "convertNodeType", new HashMap<>(), component, toscaNode, nodeTypes);
589 Assert.assertNotNull(result);
593 public void testConvertInterfaceNodeType() throws Exception {
594 Component component = getNewResource();
595 ToscaTemplate toscaNode = new ToscaTemplate("");
596 Map<String, ToscaNodeType> nodeTypes = new HashMap<>();
597 Either<ToscaTemplate, ToscaError> result;
598 List<InputDefinition> inputs = new ArrayList<>();
599 inputs.add(new InputDefinition());
600 component.setInputs(inputs);
602 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
603 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
604 .thenReturn(Either.left(Collections.emptyMap()));
606 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class),
607 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
610 result = Deencapsulation.invoke(testSubject, "convertInterfaceNodeType", new HashMap<>(), component, toscaNode
612 Assert.assertNotNull(result);
616 public void testConvertReqCapAndTypeName() throws Exception {
617 Component component = new Resource();
618 ToscaTemplate toscaNode = new ToscaTemplate("");
619 Map<String, ToscaNodeType> nodeTypes = new HashMap();
620 ToscaNodeType toscaNodeType = new ToscaNodeType();
621 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
622 Either<ToscaTemplate, ToscaError> result;
625 capabilityRequirementConverter
626 .convertCapabilities(any(Map.class), any(Resource.class), any(Map.class)))
627 .thenReturn(new HashMap<>());
629 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class),
630 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
633 result = Deencapsulation
634 .invoke(testSubject, "convertReqCapAndTypeName", new HashMap<>(), component, toscaNode, nodeTypes,
635 toscaNodeType, dataTypes);
636 Assert.assertNotNull(result);
638 component = new Service();
640 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Service.class),
641 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
643 // test when component is service
644 result = Deencapsulation
645 .invoke(testSubject, "convertReqCapAndTypeName", new HashMap<>(), component, toscaNode, nodeTypes,
646 toscaNodeType, dataTypes);
647 Assert.assertNotNull(result);
651 public void testConvertNodeTemplatesWhenComponentIsService() throws Exception {
652 final Component component = getNewService();
653 final List<ComponentInstance> componentInstances = new ArrayList<>();
654 final Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
655 final Map<String, Component> componentCache = new HashMap<>();
656 final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
657 final ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
658 final Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
659 final Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
660 final List<ComponentInstanceInput> inputs = new ArrayList<>();
661 final ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
662 componentInstanceInput.setUniqueId("uuid");
663 inputs.add(componentInstanceInput);
664 componentInstancesInputs.put("uuid", inputs);
665 final List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
666 final RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
667 reldef.setFromNode("node");
668 resourceInstancesRelations.add(reldef);
669 component.setComponentInstancesRelations(resourceInstancesRelations);
671 final ComponentInstance instance = new ComponentInstance();
672 instance.setUniqueId("id");
673 instance.setComponentUid("uid");
674 instance.setOriginType(OriginTypeEnum.ServiceProxy);
675 final List<GroupInstance> groupInstances = new ArrayList<>();
676 final GroupInstance groupInst = new GroupInstance();
677 final List<String> artifacts = new ArrayList<>();
678 artifacts.add("artifact");
679 groupInst.setArtifacts(artifacts);
680 groupInst.setType("type");
681 groupInstances.add(groupInst);
682 instance.setGroupInstances(groupInstances);
684 final List<PropertyDefinition> properties = new ArrayList<>();
685 properties.add(new PropertyDefinition());
686 instance.setProperties(properties);
688 instance.setUniqueId("uuid");
689 instance.setDescription("desc");
690 instance.setSourceModelUid("sourceModelUid");
692 componentInstances.add(instance);
694 component.setComponentInstances(componentInstances);
696 component.setComponentInstancesInputs(componentInstancesInputs);
697 component.setInvariantUUID("uuid");
698 component.setUUID("uuid");
699 component.setDescription("desc");
700 component.setUniqueId("uid");
702 componentCache.put("uid", component);
704 final List<ComponentInstanceProperty> componentInstanceProperties = new ArrayList<>();
705 componentInstanceProperties.add(new ComponentInstanceProperty());
707 componentInstancesProperties.put("uuid", componentInstanceProperties);
708 component.setComponentInstancesProperties(componentInstancesProperties);
710 final Map<String, List<ComponentInstanceAttribute>> componentInstancesAttributes = new HashMap<>();
711 final List<ComponentInstanceAttribute> componentInstanceAttributes = new ArrayList<>();
712 final ComponentInstanceAttribute componentInstanceAttribute = new ComponentInstanceAttribute();
713 componentInstanceAttribute.setDefaultValue("def value");
714 componentInstanceAttributes.add(componentInstanceAttribute);
716 componentInstancesAttributes.put("uuid", componentInstanceAttributes);
717 component.setComponentInstancesAttributes(componentInstancesAttributes);
719 ComponentInstanceProperty cip = new ComponentInstanceProperty();
720 cip.setInstanceUniqueId("id");
722 List<ComponentInstanceProperty> list = new ArrayList<>();
725 componentInstancesProperties.put("id", list);
726 component.setComponentInstancesProperties(componentInstancesProperties);
728 when(capabilityRequirementConverter.getOriginComponent(any(Map.class), any(ComponentInstance.class))).thenReturn(Either.left(component));
729 when(capabilityRequirementConverter
730 .convertComponentInstanceCapabilities(any(ComponentInstance.class), any(Map.class), any(ToscaNodeTemplate.class)))
731 .thenReturn(Either.left(new ToscaNodeTemplate()));
732 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes()).thenReturn(Either.left(Collections.emptyMap()));
733 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
734 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class), any(ToscaNodeType.class)))
735 .thenReturn(Either.left(new ToscaNodeType()));
736 when(toscaOperationFacade.getToscaFullElement("uid")).thenReturn(Either.left(component));
737 when(toscaOperationFacade.getToscaFullElement("sourceModelUid")).thenReturn(Either.left(component));
738 when(toscaOperationFacade.getLatestByName("serviceProxy", null)).thenReturn(Either.left(new Resource()));
739 when(toscaOperationFacade.getToscaElement(any(String.class), any(ComponentParametersView.class))).thenReturn(Either.left(new Resource()));
741 final Map<String, String[]> substitutionMappingMap = new HashMap<>();
742 final String[] array = {"value1", "value2"};
743 substitutionMappingMap.put("key", array);
744 when(capabilityRequirementConverter.convertSubstitutionMappingCapabilities(anyMap(), any(Component.class)))
745 .thenReturn(Either.left(substitutionMappingMap));
747 when(capabilityRequirementConverter
748 .convertSubstitutionMappingRequirements(any(Map.class), any(Component.class), any(SubstitutionMapping.class)))
749 .thenReturn(Either.left(new SubstitutionMapping()));
752 final Either<ToscaRepresentation, ToscaError> toscaRepresentationToscaErrorEither = testSubject.exportComponent(component);
753 assertNotNull(toscaRepresentationToscaErrorEither);
758 public void testConvertNodeTemplatesWhenComponentIsResource() throws Exception {
759 final Resource component = getNewResource();
760 component.setResourceType(VF);
761 final List<ComponentInstance> componentInstances = new ArrayList<>();
762 final Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
763 final Map<String, Component> componentCache = new HashMap<>();
764 final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
765 final ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
766 final Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
767 final Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
768 final List<ComponentInstanceInput> inputs = new ArrayList<>();
769 final ComponentInstanceInput componentInstanceInput = new ComponentInstanceInput();
770 componentInstanceInput.setUniqueId("uuid");
771 inputs.add(componentInstanceInput);
772 componentInstancesInputs.put("uuid", inputs);
773 final List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
774 final RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
775 reldef.setFromNode("node");
776 resourceInstancesRelations.add(reldef);
777 component.setComponentInstancesRelations(resourceInstancesRelations);
779 final ComponentInstance instance = new ComponentInstance();
780 instance.setUniqueId("id");
781 instance.setComponentUid("uid");
782 instance.setOriginType(OriginTypeEnum.VFC);
783 final List<GroupInstance> groupInstances = new ArrayList<>();
784 final GroupInstance groupInst = new GroupInstance();
785 final List<String> artifacts = new ArrayList<>();
786 artifacts.add("artifact");
787 groupInst.setArtifacts(artifacts);
788 groupInst.setType("type");
789 groupInstances.add(groupInst);
790 instance.setGroupInstances(groupInstances);
792 final List<PropertyDefinition> properties = new ArrayList<>();
793 properties.add(new PropertyDefinition());
794 instance.setProperties(properties);
795 component.setProperties(properties);
797 instance.setUniqueId("uuid");
798 instance.setDescription("desc");
799 instance.setSourceModelUid("sourceModelUid");
800 final Map<String, ArtifactDefinition> artifactList = new HashMap<>();
801 final ArtifactDefinition artifact = new ArtifactDefinition();
802 artifact.setArtifactName("name.name2");
803 artifactList.put("assettoscatemplate", artifact);
804 instance.setArtifacts(artifactList);
806 Map<String, ToscaArtifactDataDefinition> toscaArtifactDataDefinitionMap = new HashMap<>();
807 toscaArtifactDataDefinitionMap.put("assettoscatemplate", new ToscaArtifactDataDefinition());
808 instance.setToscaArtifacts(toscaArtifactDataDefinitionMap);
810 componentInstances.add(instance);
812 component.setComponentInstances(componentInstances);
814 component.setComponentInstancesInputs(componentInstancesInputs);
815 component.setInvariantUUID("uuid");
816 component.setUUID("uuid");
817 component.setDescription("desc");
818 component.setUniqueId("uid");
820 componentCache.put("uid", component);
822 final List<ComponentInstanceProperty> componentInstanceProperties = new ArrayList<>();
823 componentInstanceProperties.add(new ComponentInstanceProperty());
825 componentInstancesProperties.put("uuid", componentInstanceProperties);
826 component.setComponentInstancesProperties(componentInstancesProperties);
828 final Map<String, List<ComponentInstanceAttribute>> componentInstancesAttributes = new HashMap<>();
829 final List<ComponentInstanceAttribute> componentInstanceAttributes = new ArrayList<>();
830 final ComponentInstanceAttribute componentInstanceAttribute = new ComponentInstanceAttribute();
831 componentInstanceAttribute.setDefaultValue("def value");
832 componentInstanceAttributes.add(componentInstanceAttribute);
834 componentInstancesAttributes.put("uuid", componentInstanceAttributes);
835 component.setComponentInstancesAttributes(componentInstancesAttributes);
837 component.setArtifacts(artifactList);
838 component.setToscaArtifacts(artifactList);
840 final List<AttributeDefinition> attributes = new ArrayList<>();
841 final var attribute = new AttributeDefinition();
842 attribute.setName("mock");
843 attributes.add(attribute);
844 component.setAttributes(attributes);
846 List<ComponentInstanceInput> componentInstanceInputs = new ArrayList<>();
847 componentInstanceInputs.add(new ComponentInstanceInput());
849 componentInstancesInputs.put("id", componentInstanceInputs);
850 component.setComponentInstancesInputs(componentInstancesInputs);
852 when(capabilityRequirementConverter.getOriginComponent(any(Map.class), any(ComponentInstance.class))).thenReturn(Either.left(component));
853 when(capabilityRequirementConverter
854 .convertComponentInstanceCapabilities(any(ComponentInstance.class), any(Map.class), any(ToscaNodeTemplate.class)))
855 .thenReturn(Either.left(new ToscaNodeTemplate()));
856 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes()).thenReturn(Either.left(Collections.emptyMap()));
857 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
858 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class), any(ToscaNodeType.class)))
859 .thenReturn(Either.left(new ToscaNodeType()));
860 when(toscaOperationFacade.getToscaFullElement("uid")).thenReturn(Either.left(component));
861 when(toscaOperationFacade.getToscaFullElement("sourceModelUid")).thenReturn(Either.left(component));
862 when(toscaOperationFacade.getLatestByName("serviceProxy", null)).thenReturn(Either.left(new Resource()));
863 when(toscaOperationFacade.getToscaElement(any(String.class), any(ComponentParametersView.class))).thenReturn(Either.left(new Resource()));
865 final Map<String, String[]> substitutionMappingMap = new HashMap<>();
866 final String[] array = {"value1", "value2"};
867 substitutionMappingMap.put("key", array);
868 when(capabilityRequirementConverter.convertSubstitutionMappingCapabilities(anyMap(), any(Component.class)))
869 .thenReturn(Either.left(substitutionMappingMap));
871 when(capabilityRequirementConverter
872 .convertSubstitutionMappingRequirements(any(Map.class), any(Component.class), any(SubstitutionMapping.class)))
873 .thenReturn(Either.left(new SubstitutionMapping()));
876 final Either<ToscaRepresentation, ToscaError> toscaRepresentationToscaErrorEither = testSubject.exportComponent(component);
877 assertNotNull(toscaRepresentationToscaErrorEither);
882 public void testConvertNodeTemplatesWhenConvertComponentInstanceCapabilitiesIsRight() throws Exception {
883 Component component = getNewResource();
884 List<ComponentInstance> componentInstances = new ArrayList<>();
885 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
886 Map<String, List<ComponentInstanceProperty>> componentInstancesInterfaces = new HashMap<>();
887 Map<String, Component> componentCache = new HashMap<>();
888 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
889 ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
890 Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
891 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
892 List<ComponentInstanceInput> inputs = new ArrayList<>();
893 inputs.add(new ComponentInstanceInput());
894 componentInstancesInputs.put("key", inputs);
895 List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
896 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
897 reldef.setFromNode("node");
898 resourceInstancesRelations.add(reldef);
899 component.setComponentInstancesRelations(resourceInstancesRelations);
901 ComponentInstance instance = new ComponentInstance();
902 instance.setUniqueId("id");
903 instance.setComponentUid("uid");
904 instance.setOriginType(OriginTypeEnum.ServiceProxy);
905 componentInstances.add(instance);
906 component.setComponentInstances(componentInstances);
908 component.setComponentInstancesInputs(componentInstancesInputs);
909 component.setInvariantUUID("uuid");
910 component.setUUID("uuid");
911 component.setDescription("desc");
913 componentCache.put("uid", component);
915 when(capabilityRequirementConverter.getOriginComponent(any(Map.class), any(ComponentInstance.class))).thenReturn(Either.left(component));
916 when(capabilityRequirementConverter
917 .convertComponentInstanceCapabilities(any(ComponentInstance.class), any(Map.class), any(ToscaNodeTemplate.class)))
918 .thenReturn(Either.right(ToscaError.GENERAL_ERROR));
919 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes()).thenReturn(Either.left(Collections.emptyMap()));
920 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
921 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class),
922 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
925 final Either<ToscaRepresentation, ToscaError> toscaRepresentationToscaErrorEither = testSubject.exportComponent(component);
926 assertNotNull(toscaRepresentationToscaErrorEither);
930 public void testConvetNodeTemplateWhenGetOriginComponentIsRight() throws Exception {
931 Component component = getNewResource();
932 List<ComponentInstance> componentInstances = new ArrayList<>();
933 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
934 Map<String, List<ComponentInstanceProperty>> componentInstancesInterfaces = new HashMap<>();
935 Map<String, Component> componentCache = new HashMap<>();
936 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
937 ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
938 Either<Map<String, ToscaNodeTemplate>, ToscaError> result;
939 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
940 List<ComponentInstanceInput> inputs = new ArrayList<>();
941 inputs.add(new ComponentInstanceInput());
942 componentInstancesInputs.put("key", inputs);
943 List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
944 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
945 reldef.setFromNode("id");
946 resourceInstancesRelations.add(reldef);
947 component.setComponentInstancesRelations(resourceInstancesRelations);
949 ComponentInstance instance = new ComponentInstance();
950 instance.setUniqueId("id");
951 instance.setComponentUid("uid");
952 instance.setOriginType(OriginTypeEnum.ServiceProxy);
953 componentInstances.add(instance);
954 component.setComponentInstances(componentInstances);
956 component.setComponentInstancesInputs(componentInstancesInputs);
957 component.setInvariantUUID("uuid");
958 component.setUUID("uuid");
959 component.setDescription("desc");
961 final List<AttributeDefinition> attributes = new ArrayList<>();
962 final var attribute = new AttributeDefinition();
963 attribute.setName("mock");
964 attributes.add(attribute);
965 component.setAttributes(attributes);
967 componentCache.put("uid", component);
969 when(capabilityRequirementConverter.getOriginComponent(any(Map.class), any(ComponentInstance.class))).thenReturn(Either.right(false));
970 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes()).thenReturn(Either.left(Collections.emptyMap()));
971 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
972 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class),
973 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
976 final Either<ToscaRepresentation, ToscaError> toscaRepresentationToscaErrorEither = testSubject.exportComponent(component);
977 assertNotNull(toscaRepresentationToscaErrorEither);
981 public void testConvertNodeTemplatesWhenConvertComponentInstanceRequirmentsIsRight() {
982 Resource component = getNewResource();
983 component.setResourceType(VF);
984 List<ComponentInstance> componentInstances = new ArrayList<>();
985 Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = new HashMap<>();
986 Map<String, List<ComponentInstanceProperty>> componentInstancesInterfaces = new HashMap<>();
987 Map<String, Component> componentCache = new HashMap<>();
988 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
989 ToscaTopolgyTemplate topologyTemplate = new ToscaTopolgyTemplate();
990 Map<String, List<ComponentInstanceInput>> componentInstancesInputs = new HashMap<>();
991 List<ComponentInstanceInput> inputs = new ArrayList<>();
992 inputs.add(new ComponentInstanceInput());
993 componentInstancesInputs.put("key", inputs);
994 List<RequirementCapabilityRelDef> resourceInstancesRelations = new ArrayList<>();
995 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
996 reldef.setFromNode("id");
997 reldef.setToNode("node");
998 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
999 CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
1000 relationship.setRelation(new RelationshipInfo());
1001 relationships.add(relationship);
1002 reldef.setRelationships(relationships);
1003 resourceInstancesRelations.add(reldef);
1004 component.setComponentInstancesRelations(resourceInstancesRelations);
1006 Map<String, ArtifactDefinition> artifactList = new HashMap<>();
1007 ArtifactDefinition artifact = new ArtifactDefinition();
1008 artifact.setArtifactName("name.name2");
1009 artifactList.put("assettoscatemplate", artifact);
1010 component.setArtifacts(artifactList);
1011 component.setToscaArtifacts(artifactList);
1013 ComponentInstance instance = new ComponentInstance();
1014 instance.setUniqueId("id");
1015 instance.setComponentUid("id");
1016 instance.setOriginType(OriginTypeEnum.VF);
1017 componentInstances.add(instance);
1018 component.setComponentInstances(componentInstances);
1020 component.setComponentInstancesInputs(componentInstancesInputs);
1021 component.setComponentInstances(componentInstances);
1023 doReturn(Either.left(component)).when(toscaOperationFacade).getToscaFullElement("id");
1024 when(capabilityRequirementConverter.getOriginComponent(any(Map.class), any(ComponentInstance.class))).thenReturn(Either.left(component));
1025 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes()).thenReturn(Either.left(Collections.emptyMap()));
1026 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
1027 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Resource.class),
1028 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
1029 when(toscaOperationFacade.getToscaElement(any(String.class), any(ComponentParametersView.class)))
1030 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
1033 final Either<ToscaRepresentation, ToscaError> result = testSubject.exportComponent(component);
1034 assertNotNull(result);
1038 public void testCreateNodeType() throws Exception {
1040 Component component = new Resource();
1041 List<String> array = new ArrayList<>();
1043 ((Resource) component).setDerivedFrom(array);
1044 ToscaNodeType result;
1046 // test when component is resource
1047 result = Deencapsulation.invoke(testSubject, "createNodeType", component);
1048 Assert.assertNotNull(result);
1050 component = new Service();
1051 // test when component is service
1052 result = Deencapsulation.invoke(testSubject, "createNodeType", component);
1053 Assert.assertNotNull(result);
1057 public void testCreateProxyInterfaceTypesComponentNotFound() throws Exception {
1058 Component container = new Service();
1059 Either<Map<String, ToscaNodeType>, ToscaError> result;
1060 List<ComponentInstance> componentInstances = new ArrayList<>();
1061 ComponentInstance instance = new ComponentInstance();
1062 instance.setOriginType(OriginTypeEnum.ServiceProxy);
1063 instance.setSourceModelUid("targetModelUid");
1064 instance.setToscaComponentName("toscaComponentName");
1066 componentInstances.add(instance);
1067 container.setComponentInstances(componentInstances);
1068 when(toscaOperationFacade.getToscaElement(any(String.class),
1069 any(ComponentParametersView.class)))
1070 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
1071 result = Deencapsulation.invoke(testSubject, "createProxyInterfaceTypes", container);
1072 Assert.assertTrue(result.isRight());
1076 public void testCreateProxyInterfaceTypesWhenInterfaceLifecycleFetchFailed() {
1077 Component container = new Service();
1078 Either<Map<String, ToscaNodeType>, ToscaError> result;
1079 List<ComponentInstance> componentInstances = new ArrayList<>();
1080 ComponentInstance instance = new ComponentInstance();
1081 instance.setOriginType(OriginTypeEnum.ServiceProxy);
1082 instance.setSourceModelUid("targetModelUid");
1083 instance.setToscaComponentName("toscaComponentName");
1084 componentInstances.add(instance);
1085 container.setComponentInstances(componentInstances);
1087 when(toscaOperationFacade.getToscaElement(any(String.class),
1088 any(ComponentParametersView.class)))
1089 .thenReturn(Either.left(new Resource()));
1090 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
1091 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
1092 result = Deencapsulation.invoke(testSubject, "createProxyInterfaceTypes", container);
1093 Assert.assertTrue(result.isRight());
1097 public void testCreateProxyInterfaceTypesPositive() {
1098 Component container = new Service();
1099 Either<Map<String, ToscaNodeType>, ToscaError> result;
1100 List<ComponentInstance> componentInstances = new ArrayList<>();
1101 ComponentInstance instance = new ComponentInstance();
1102 instance.setOriginType(OriginTypeEnum.ServiceProxy);
1103 instance.setSourceModelUid("targetModelUid");
1104 instance.setToscaComponentName("toscaComponentName");
1105 componentInstances.add(instance);
1106 container.setComponentInstances(componentInstances);
1108 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
1109 .thenReturn(Either.left(Collections.emptyMap()));
1111 Component proxyResource = new Resource();
1112 Map<String, InterfaceDefinition> proxyInterfaces = new HashMap<>();
1113 proxyInterfaces.put("Local", new InterfaceDefinition("Local", "desc", new HashMap<>()));
1114 proxyResource.setInterfaces(proxyInterfaces);
1115 when(toscaOperationFacade.getToscaElement(any(String.class),
1116 any(ComponentParametersView.class)))
1117 .thenReturn(Either.left(proxyResource));
1119 result = Deencapsulation.invoke(testSubject, "createProxyInterfaceTypes", container);
1120 Assert.assertNotNull(result);
1121 Assert.assertTrue(result.isLeft());
1122 Assert.assertEquals(1, result.left().value().size());
1126 public void testCreateProxyNodeTypes() throws Exception {
1127 Map<String, Component> componentCache = new HashMap<>();
1128 Component container = new Resource();
1129 Either<Map<String, ToscaNodeType>, ToscaError> result;
1130 List<ComponentInstance> componentInstances = new ArrayList<>();
1131 ComponentInstance instance = new ComponentInstance();
1132 instance.setOriginType(OriginTypeEnum.ServiceProxy);
1133 instance.setSourceModelUid("targetModelUid");
1135 componentInstances.add(instance);
1136 container.setComponentInstances(componentInstances);
1138 when(toscaOperationFacade.getLatestByName("serviceProxy", null))
1139 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
1141 // test when getLatestByName return is right
1142 result = Deencapsulation.invoke(testSubject, "createProxyNodeTypes", componentCache, container);
1143 Assert.assertNotNull(result);
1147 public void testCreateServiceSubstitutionNodeTypes() throws Exception {
1148 Map<String, Component> componentCache = new HashMap<>();
1150 Component referencedService = getNewService();
1151 referencedService.setInvariantUUID("uuid");
1152 referencedService.setUUID("uuid");
1153 referencedService.setUniqueId("targetModelUid");
1154 referencedService.setDescription("desc");
1155 componentCache.put("targetModelUid", referencedService);
1157 Component containerService = new Service();
1158 List<ComponentInstance> componentInstances = new ArrayList<>();
1159 ComponentInstance instance = new ComponentInstance();
1160 instance.setOriginType(OriginTypeEnum.ServiceSubstitution);
1161 instance.setSourceModelUid("targetModelUid");
1163 componentInstances.add(instance);
1164 containerService.setComponentInstances(componentInstances);
1166 when(interfaceLifecycleOperation.getAllInterfaceLifecycleTypes())
1167 .thenReturn(Either.left(Collections.emptyMap()));
1168 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
1169 when(capabilityRequirementConverter.convertRequirements(any(Map.class), any(Service.class),
1170 any(ToscaNodeType.class))).thenReturn(Either.left(new ToscaNodeType()));
1172 ToscaTemplate toscaNode = new ToscaTemplate("1_1");
1174 Deencapsulation.invoke(testSubject, "createServiceSubstitutionNodeTypes", componentCache, containerService, toscaNode);
1175 Assert.assertNotNull(toscaNode.getNode_types());
1179 public void testCreateProxyNodeTypesWhenGetLatestByNameReturnValue() {
1180 Map<String, Component> componentCache = new HashMap<>();
1181 Component container = new Resource();
1182 Either<Map<String, ToscaNodeType>, ToscaError> result;
1183 List<ComponentInstance> componentInstances = new ArrayList<>();
1184 ComponentInstance instance = new ComponentInstance();
1185 instance.setOriginType(OriginTypeEnum.ServiceProxy);
1186 instance.setSourceModelUid("targetModelUid");
1188 componentInstances.add(instance);
1189 container.setComponentInstances(componentInstances);
1191 when(toscaOperationFacade.getLatestByName("serviceProxy", null)).thenReturn(Either.left(new Resource()));
1193 ComponentParametersView parameterView = new ComponentParametersView();
1194 parameterView.disableAll();
1195 parameterView.setIgnoreCategories(false);
1197 when(toscaOperationFacade.getToscaElement(any(String.class),
1198 any(ComponentParametersView.class)))
1199 .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
1201 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
1203 // test when getLatestByName is left
1204 result = Deencapsulation.invoke(testSubject, "createProxyNodeTypes", componentCache, container);
1205 Assert.assertNotNull(result);
1209 public void testCreateProxyNodeType() throws Exception {
1210 Map<String, Component> componentCache = new HashMap<>();
1211 Component origComponent = new Resource();
1212 Component proxyComponent = new Resource();
1213 ComponentInstance instance = new ComponentInstance();
1214 ToscaNodeType result;
1216 when(dataTypeCache.getAll()).thenReturn(Either.left(new HashMap<>()));
1219 result = Deencapsulation.invoke(testSubject, "createProxyNodeType", componentCache, origComponent,
1220 proxyComponent, instance);
1221 Assert.assertNotNull(result);
1225 public void testConvertComponentInstanceRequirements() throws Exception {
1226 Component component = new Resource();
1227 ComponentInstance componentInstance = new ComponentInstance();
1228 List<RequirementCapabilityRelDef> relations = new ArrayList<>();
1229 ToscaNodeTemplate nodeTypeTemplate = new ToscaNodeTemplate();
1230 Component originComponent = new Resource();
1231 Map<String, Component> componentCache = new HashMap<>();
1232 Either<ToscaNodeTemplate, ToscaError> result;
1235 result = Deencapsulation.invoke(testSubject, "convertComponentInstanceRequirements", component,
1236 componentInstance, relations, nodeTypeTemplate, originComponent, componentCache);
1237 Assert.assertNotNull(result);
1239 RequirementCapabilityRelDef reldef = new RequirementCapabilityRelDef();
1240 reldef.setFromNode("name");
1241 reldef.setToNode("name1");
1242 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
1243 CapabilityRequirementRelationship cap = new CapabilityRequirementRelationship();
1244 cap.setRelation(new RelationshipInfo());
1245 relationships.add(cap);
1246 reldef.setRelationships(relationships);
1247 relations.add(reldef);
1248 componentInstance.setUniqueId("name");
1250 List<ComponentInstance> instances = new ArrayList<>();
1251 instances.add(componentInstance);
1252 component.setComponentInstances(instances);
1254 // test when filteredRElations ins't empty
1255 result = Deencapsulation.invoke(testSubject, "convertComponentInstanceRequirements", component,
1256 componentInstance, relations, nodeTypeTemplate, originComponent, componentCache);
1257 Assert.assertNotNull(result);
1261 public void buildRequirementFailure() {
1262 final Component fromOriginComponent = new Resource();
1263 final ComponentInstance fromInstance = new ComponentInstance();
1264 final String fromInstanceUid = "fromInstanceUid";
1265 fromInstance.setUniqueId(fromInstanceUid);
1266 fromInstance.setComponentUid("componentUid");
1267 final RequirementCapabilityRelDef relationshipDefinition = new RequirementCapabilityRelDef();
1268 relationshipDefinition.setToNode("wrongNodeUid");
1269 final List<CapabilityRequirementRelationship> relationshipList = new ArrayList<>();
1270 final CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
1271 relationship.setRequirement(new RequirementDataDefinition());
1272 relationshipList.add(relationship);
1273 relationshipDefinition.setRelationships(relationshipList);
1274 final List<ComponentInstance> instancesList = new ArrayList<>();
1275 instancesList.add(fromInstance);
1276 String expectedError = String
1277 .format("Failed to find a relation from the node %s to the node %s", fromInstance.getName(),
1278 relationshipDefinition.getToNode());
1279 assertThrows(ToscaExportException.class, () ->
1280 Deencapsulation.invoke(testSubject, "buildRequirement", fromInstance, fromOriginComponent,
1281 instancesList, relationshipDefinition, new HashMap<>()), expectedError);
1284 Deencapsulation.invoke(testSubject, "buildRequirement", fromInstance, fromOriginComponent,
1285 instancesList, relationshipDefinition, new HashMap<>());
1286 } catch (Exception e) {
1287 assertTrue(e instanceof ToscaExportException);
1288 assertEquals(expectedError, e.getMessage());
1291 final RelationshipInfo relation = new RelationshipInfo();
1292 final String requirementUid = "Uid";
1293 relation.setRequirementUid(requirementUid);
1294 final String requirementName = "requirementName";
1295 relation.setRequirement(requirementName);
1296 final String capabilityName = "capabilityName";
1297 relation.setCapability(capabilityName);
1298 final String capabilityOwnerId = "capabilityOwnerId";
1299 relation.setCapabilityOwnerId(capabilityOwnerId);
1300 relationship.setRelation(relation);
1302 final Map<String, List<RequirementDefinition>> requirementMap = new HashMap<>();
1303 final RequirementDefinition requirementDefinition = new RequirementDefinition();
1304 requirementMap.put(requirementUid, Collections.singletonList(requirementDefinition));
1305 fromOriginComponent.setRequirements(requirementMap);
1306 relationshipDefinition.setToNode(fromInstanceUid);
1308 expectedError = String
1309 .format("Failed to find a requirement with uniqueId %s on a component with uniqueId %s",
1310 relation.getRequirementUid(), fromOriginComponent.getUniqueId());
1312 assertThrows(ToscaExportException.class, () ->
1313 Deencapsulation.invoke(testSubject, "buildRequirement", fromInstance, fromOriginComponent,
1314 instancesList, relationshipDefinition, new HashMap<>()), expectedError);
1316 requirementDefinition.setName(requirementName);
1318 when(toscaOperationFacade.getToscaElement(any(String.class), any(ComponentParametersView.class)))
1319 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
1321 expectedError = String.format(
1322 "Failed to build substituted name for the requirement %s. "
1323 + "Failed to get an origin component with uniqueId %s",
1324 requirementName, fromInstance.getActualComponentUid());
1325 assertThrows(ToscaExportException.class, () -> Deencapsulation
1326 .invoke(testSubject, "buildRequirement", fromInstance, fromOriginComponent, instancesList,
1327 relationshipDefinition, new HashMap<>()), expectedError);
1329 final Component toOriginComponent = new Resource();
1330 final Map<String, List<CapabilityDefinition>> capabilityMap = new HashMap<>();
1331 final CapabilityDefinition capabilityDefinition = new CapabilityDefinition();
1333 capabilityDefinition.setName(capabilityName);
1334 capabilityDefinition.setOwnerId(capabilityOwnerId);
1335 capabilityDefinition.setType("aType");
1336 final String capabilityPreviousName = "capabilityPreviousName";
1337 capabilityDefinition.setPreviousName(capabilityPreviousName);
1338 capabilityMap.put(capabilityName, Collections.singletonList(capabilityDefinition));
1339 toOriginComponent.setCapabilities(capabilityMap);
1340 when(toscaOperationFacade.getToscaElement(any(String.class), any(ComponentParametersView.class)))
1341 .thenReturn(Either.left(toOriginComponent));
1343 requirementDefinition.setCapability(capabilityName);
1344 relation.setCapability("wrong");
1345 final String requirementPreviousName = "requirementPreviousName";
1346 requirementDefinition.setPreviousName(requirementPreviousName);
1347 requirementDefinition.setPath(new ArrayList<>());
1349 expectedError = String
1350 .format("Failed to find a capability with name %s on a component with uniqueId %s",
1351 relation.getCapability(), fromOriginComponent.getUniqueId());
1353 assertThrows(ToscaExportException.class, () -> Deencapsulation
1354 .invoke(testSubject, "buildRequirement", fromInstance, fromOriginComponent, instancesList,
1355 relationshipDefinition, new HashMap<>()),
1360 public void testBuildRequirement() {
1361 final ComponentInstance fromInstance = new ComponentInstance();
1362 fromInstance.setUniqueId("name");
1363 fromInstance.setComponentUid("string");
1364 final List<ComponentInstance> instancesList = new ArrayList<>();
1366 final Map<String, Component> componentCache = new HashMap<>();
1367 final List<CapabilityRequirementRelationship> relationshipList = new ArrayList<>();
1368 final CapabilityRequirementRelationship relationship = new CapabilityRequirementRelationship();
1369 relationship.setRequirement(new RequirementDataDefinition());
1370 final RelationshipInfo relation = new RelationshipInfo();
1371 final String requirementUid = "Uid";
1372 relation.setRequirementUid(requirementUid);
1373 final String requirementName = "requirementName";
1374 relation.setRequirement(requirementName);
1375 final String capabilityName = "capabilityName";
1376 relation.setCapability(capabilityName);
1377 final String capabilityOwnerId = "capabilityOwnerId";
1378 relation.setCapabilityOwnerId(capabilityOwnerId);
1379 relationship.setRelation(relation);
1380 relationshipList.add(relationship);
1381 final RequirementCapabilityRelDef relationshipDefinition = new RequirementCapabilityRelDef();
1382 relationshipDefinition.setRelationships(relationshipList);
1383 relationshipDefinition.setToNode("name");
1384 instancesList.add(fromInstance);
1385 final RequirementDefinition requirementDefinition = new RequirementDefinition();
1386 requirementDefinition.setName(requirementName);
1387 requirementDefinition.setCapability(capabilityName);
1388 final String requirementPreviousName = "requirementPreviousName";
1389 requirementDefinition.setPreviousName(requirementPreviousName);
1390 requirementDefinition.setPath(new ArrayList<>());
1391 final Map<String, List<RequirementDefinition>> requirementMap = new HashMap<>();
1392 requirementMap.put(requirementUid, Collections.singletonList(requirementDefinition));
1393 final Component fromOriginComponent = new Resource();
1394 fromOriginComponent.setRequirements(requirementMap);
1396 final Map<String, List<CapabilityDefinition>> capabilityMap = new HashMap<>();
1397 final CapabilityDefinition capabilityDefinition = new CapabilityDefinition();
1398 capabilityDefinition.setName(capabilityName);
1399 capabilityDefinition.setOwnerId(capabilityOwnerId);
1400 final String capabilityPreviousName = "capabilityPreviousName";
1401 capabilityDefinition.setPreviousName(capabilityPreviousName);
1402 capabilityMap.put(capabilityName, Collections.singletonList(capabilityDefinition));
1403 final Component toOriginComponent = new Resource();
1404 toOriginComponent.setCapabilities(capabilityMap);
1406 when(toscaOperationFacade.getToscaElement(any(String.class), any(ComponentParametersView.class)))
1407 .thenReturn(Either.left(toOriginComponent));
1408 final String builtCapabilityName = "builtCapabilityName";
1410 capabilityRequirementConverter
1411 .buildSubstitutedName(anyMap(), eq(toOriginComponent), anyList(), eq(capabilityName), eq(
1412 capabilityPreviousName)))
1413 .thenReturn(Either.left(builtCapabilityName));
1415 final String builtRequirementName = "builtRequirementName";
1417 capabilityRequirementConverter
1418 .buildSubstitutedName(anyMap(), eq(fromOriginComponent), anyList(), eq(requirementName), eq(
1419 requirementPreviousName)))
1420 .thenReturn(Either.left(builtRequirementName));
1422 final Map<String, ToscaTemplateRequirement> actualRequirementMap =
1423 Deencapsulation.invoke(testSubject, "buildRequirement", fromInstance, fromOriginComponent,
1424 instancesList, relationshipDefinition, componentCache);
1425 assertNotNull(actualRequirementMap);
1426 assertFalse(actualRequirementMap.isEmpty());
1427 assertTrue(actualRequirementMap.containsKey(builtRequirementName));
1428 final ToscaTemplateRequirement actualToscaTemplateRequirement = actualRequirementMap.get(builtRequirementName);
1429 assertNotNull(actualToscaTemplateRequirement);
1430 assertEquals(builtCapabilityName, actualToscaTemplateRequirement.getCapability());
1432 //to toOriginComponent not found
1433 when(toscaOperationFacade.getToscaElement(any(String.class), any(ComponentParametersView.class)))
1434 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
1436 assertThrows(ToscaExportException.class, () -> Deencapsulation.invoke(testSubject, "buildRequirement", fromInstance, fromOriginComponent,
1437 instancesList, relationshipDefinition, componentCache));
1441 public void testAddRequirmentsWithBuildAndAddRequirements() {
1442 ComponentInstance fromInstance = new ComponentInstance();
1443 Component fromOriginComponent = new Resource();
1444 List<ComponentInstance> instancesList = new ArrayList<>();
1445 RequirementCapabilityRelDef rel = new RequirementCapabilityRelDef();
1446 List<Map<String, ToscaTemplateRequirement>> toscaRequirements = new ArrayList<>();
1447 Map<String, Component> componentCache = new HashMap<>();
1449 List<CapabilityRequirementRelationship> relationships = new ArrayList<>();
1450 CapabilityRequirementRelationship cap = new CapabilityRequirementRelationship();
1451 cap.setRequirement(new RequirementDataDefinition());
1452 RelationshipInfo relation = new RelationshipInfo();
1453 relation.setRequirementUid("Uid");
1454 relation.setRequirement("requirment");
1455 relation.setCapability("cap");
1456 relation.setCapabilityOwnerId("id");
1457 cap.setRelation(relation);
1458 relationships.add(cap);
1459 rel.setRelationships(relationships);
1460 rel.setToNode("name");
1461 fromInstance.setUniqueId("name");
1462 fromInstance.setComponentUid("string");
1463 instancesList.add(fromInstance);
1464 Map<String, List<RequirementDefinition>> requirements = new HashMap<>();
1466 List<RequirementDefinition> defs = new ArrayList<>();
1467 RequirementDefinition def = new RequirementDefinition();
1468 def.setName("requirment");
1469 def.setCapability("cap");
1471 requirements.put("key", defs);
1472 fromOriginComponent.setRequirements(requirements);
1474 Map<String, List<CapabilityDefinition>> capabilities = new HashMap<>();
1475 List<CapabilityDefinition> caps = new ArrayList<>();
1476 CapabilityDefinition capdef = new CapabilityDefinition();
1477 capdef.setOwnerId("id");
1478 capdef.setName("cap");
1479 capdef.setPreviousName("before cap");
1480 capdef.setType("type");
1482 capabilities.put("cap", caps);
1483 fromOriginComponent.setCapabilities(capabilities);
1485 when(toscaOperationFacade.getToscaElement(any(String.class),
1486 any(ComponentParametersView.class))).thenReturn(Either.left(fromOriginComponent));
1489 capabilityRequirementConverter
1490 .buildSubstitutedName(anyMap(), any(Component.class), anyList(), anyString(), anyString()))
1491 .thenReturn(Either.right(false));
1493 final String expectedErrorMsg =
1494 String.format("Failed to build a substituted capability name for the capability "
1495 + "with name %s on a component with uniqueId %s",
1496 cap.getRequirement(), fromOriginComponent.getUniqueId());
1498 assertThrows(ToscaExportException.class, () ->
1499 Deencapsulation.invoke(testSubject, "buildRequirement", fromInstance, fromOriginComponent, instancesList,
1500 rel, componentCache), expectedErrorMsg);
1504 public void testBuildAndAddRequirement() {
1505 Component fromOriginComponent = new Resource();
1506 Component toOriginComponent = new Resource();
1507 CapabilityDefinition capability = new CapabilityDefinition();
1508 RequirementDefinition requirement = new RequirementDefinition();
1509 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1510 ComponentInstance toInstance = new ComponentInstance();
1511 Map<String, Component> componentCache = new HashMap<>();
1512 final CapabilityRequirementRelationship capabilityRequirementRelationship = new CapabilityRequirementRelationship();
1513 capabilityRequirementRelationship.setRelation(reqAndRelationshipPair);
1514 capability.setPath(new ArrayList<>());
1515 capability.setPreviousName("before cap");
1516 reqAndRelationshipPair.setCapability("cap");
1517 requirement.setPath(new ArrayList<>());
1518 requirement.setPreviousName("before req");
1519 reqAndRelationshipPair.setRequirement("req");
1522 capabilityRequirementConverter
1523 .buildSubstitutedName(anyMap(), eq(toOriginComponent), anyList(), eq("cap"), anyString()))
1524 .thenReturn(Either.left("buildCapNameRes"));
1527 capabilityRequirementConverter
1528 .buildSubstitutedName(anyMap(), eq(fromOriginComponent), anyList(), eq("req"), anyString()))
1529 .thenReturn(Either.left("buildReqNameRes"));
1532 final Map<String, ToscaTemplateRequirement> requirementMap =
1533 Deencapsulation.invoke(testSubject, "buildRequirement", fromOriginComponent, toOriginComponent,
1534 capability, requirement, capabilityRequirementRelationship, toInstance, componentCache);
1535 assertNotNull(requirementMap);
1536 assertFalse(requirementMap.isEmpty());
1537 assertTrue(requirementMap.containsKey("buildReqNameRes"));
1538 final ToscaTemplateRequirement actualToscaTemplateRequirement = requirementMap.get("buildReqNameRes");
1539 assertNotNull(actualToscaTemplateRequirement);
1540 assertEquals("buildCapNameRes", actualToscaTemplateRequirement.getCapability());
1544 public void testBuildRequirementBuildSubstitutedNameReturnsValueTwice() {
1545 final Component fromOriginComponent = new Resource();
1546 final Component toOriginComponent = new Resource();
1547 final CapabilityDefinition capability = new CapabilityDefinition();
1548 final RequirementDefinition requirement = new RequirementDefinition();
1549 final RelationshipInfo relationship = new RelationshipInfo();
1550 final CapabilityRequirementRelationship capabilityRequirementRelationship = new CapabilityRequirementRelationship();
1551 capabilityRequirementRelationship.setRelation(relationship);
1552 ComponentInstance toInstance = new ComponentInstance();
1553 Map<String, Component> componentCache = new HashMap<>();
1554 capability.setPath(new ArrayList<>());
1555 relationship.setCapability("cap");
1556 requirement.setPath(new ArrayList<>());
1557 relationship.setRequirement("req");
1559 final String builtCapabilityOrRequirementName = "builtCapabilityOrRequirementName";
1560 when(capabilityRequirementConverter.buildSubstitutedName(any(), any(), any(), any(), any()))
1561 .thenReturn(Either.left(builtCapabilityOrRequirementName));
1563 final Map<String, ToscaTemplateRequirement> requirementMap = Deencapsulation
1564 .invoke(testSubject, "buildRequirement", fromOriginComponent, toOriginComponent, capability, requirement,
1565 capabilityRequirementRelationship, toInstance, componentCache);
1566 assertNotNull(requirementMap);
1567 assertFalse(requirementMap.isEmpty());
1568 assertTrue(requirementMap.containsKey(builtCapabilityOrRequirementName));
1569 final ToscaTemplateRequirement actualToscaTemplateRequirement = requirementMap.get(builtCapabilityOrRequirementName);
1570 assertNotNull(actualToscaTemplateRequirement);
1571 assertEquals(builtCapabilityOrRequirementName, actualToscaTemplateRequirement.getCapability());
1575 public void testIsRequirementBelongToRelation() throws Exception {
1577 Component originComponent = new Resource();
1578 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1579 RequirementDefinition requirement = new RequirementDefinition();
1580 String fromInstanceId = "";
1583 requirement.setName("name");
1584 reqAndRelationshipPair.setRequirement("name1");
1586 // test return false
1587 result = Deencapsulation.invoke(testSubject, "isRequirementBelongToRelation", originComponent,
1588 reqAndRelationshipPair, requirement, fromInstanceId);
1589 Assert.assertFalse(result);
1593 public void testIsRequirementBelongToRelationWithNonAtomicComponent() {
1595 Component originComponent = new Service();
1596 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1597 RequirementDefinition requirement = new RequirementDefinition();
1598 String fromInstanceId = "";
1601 // default test return true
1602 result = Deencapsulation.invoke(testSubject, "isRequirementBelongToRelation", originComponent,
1603 reqAndRelationshipPair, requirement, fromInstanceId);
1604 Assert.assertTrue(result);
1608 public void testIsRequirementBelongToOwner() throws Exception {
1610 RelationshipInfo reqAndRelationshipPair = new RelationshipInfo();
1611 RequirementDefinition requirement = new RequirementDefinition();
1612 String fromInstanceId = "";
1613 Component originComponent = new Resource();
1616 requirement.setOwnerId("owner1");
1617 reqAndRelationshipPair.setRequirementOwnerId("owner");
1620 result = Deencapsulation.invoke(testSubject, "isRequirementBelongToOwner", reqAndRelationshipPair, requirement,
1621 fromInstanceId, originComponent);
1622 Assert.assertFalse(result);
1626 public void testIsCvfc() throws Exception {
1628 Component component = new Service();
1631 result = Deencapsulation.invoke(testSubject, "isCvfc", component);
1632 Assert.assertFalse(result);
1636 public void testConvertCapabilities() throws Exception {
1637 Component component = new Resource();
1638 SubstitutionMapping substitutionMappings = new SubstitutionMapping();
1639 Map<String, Component> componentCache = new HashMap<>();
1640 Either<SubstitutionMapping, ToscaError> result;
1642 when(capabilityRequirementConverter.convertSubstitutionMappingCapabilities(componentCache, component))
1643 .thenReturn(Either.right(ToscaError.NODE_TYPE_CAPABILITY_ERROR));
1645 // default test return isRight
1646 result = Deencapsulation.invoke(testSubject, "convertCapabilities", component, substitutionMappings,
1648 Assert.assertNotNull(result);
1652 public void testConvertCapabilities_1() throws Exception {
1653 Component component = new Resource();
1654 ToscaNodeType nodeType = new ToscaNodeType();
1655 Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
1656 Either<ToscaNodeType, ToscaError> result;
1658 Map<String, ToscaCapability> capabilities = new HashMap<>();
1659 capabilities.put("key", new ToscaCapability());
1662 result = Deencapsulation
1663 .invoke(testSubject, "convertCapabilities", new HashMap<>(), component, nodeType, dataTypes);
1664 Assert.assertNotNull(result);
1668 public void testConvertToNodeTemplateArtifacts() throws Exception {
1669 Map<String, ToscaArtifactDataDefinition> container = new HashMap<>();
1670 ToscaArtifactDataDefinition art = new ToscaArtifactDataDefinition();
1671 art.setFile("test_file");
1672 art.setType("test_type");
1673 Map<String, ToscaTemplateArtifact> result;
1674 container.put("test_art", art);
1675 result = Deencapsulation.invoke(testSubject, "convertToNodeTemplateArtifacts", container);
1676 Assert.assertNotNull(result);
1677 Assert.assertTrue(MapUtils.isNotEmpty(result));
1678 Assert.assertEquals("test_file", result.get("test_art").getFile());
1679 Assert.assertEquals("test_type", result.get("test_art").getType());
1683 public void testGetProxyNodeTypeInterfacesNoInterfaces() {
1684 Component service = new Service();
1685 Optional<Map<String, Object>> proxyNodeTypeInterfaces =
1686 testSubject.getProxyNodeTypeInterfaces(service, DATA_TYPES);
1687 Assert.assertFalse(proxyNodeTypeInterfaces.isPresent());
1691 public void testGetProxyNodeTypeInterfaces() {
1692 Component service = getTestComponent();
1693 Optional<Map<String, Object>> proxyNodeTypeInterfaces =
1694 testSubject.getProxyNodeTypeInterfaces(service, DATA_TYPES);
1695 Assert.assertTrue(proxyNodeTypeInterfaces.isPresent());
1696 Map<String, Object> componentInterfaces = proxyNodeTypeInterfaces.get();
1697 Assert.assertNotNull(componentInterfaces);
1702 public void testGetProxyNodeTypePropertiesComponentNull() {
1703 Optional<Map<String, ToscaProperty>> proxyNodeTypeProperties =
1704 testSubject.getProxyNodeTypeProperties(null, DATA_TYPES);
1705 Assert.assertFalse(proxyNodeTypeProperties.isPresent());
1709 public void testGetProxyNodeTypePropertiesNoProperties() {
1710 Component service = new Service();
1711 Optional<Map<String, ToscaProperty>> proxyNodeTypeProperties =
1712 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1713 Assert.assertFalse(proxyNodeTypeProperties.isPresent());
1717 public void testGetProxyNodeTypeProperties() {
1718 Component service = getTestComponent();
1719 service.setProperties(Arrays.asList(createMockProperty("componentPropStr", "Default String Prop"),
1720 createMockProperty("componentPropInt", null)));
1721 Optional<Map<String, ToscaProperty>> proxyNodeTypeProperties =
1722 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1723 Assert.assertTrue(proxyNodeTypeProperties.isPresent());
1724 Map<String, ToscaProperty> componentProperties = proxyNodeTypeProperties.get();
1725 Assert.assertNotNull(componentProperties);
1726 Assert.assertEquals(2, componentProperties.size());
1730 public void testAddInputsToPropertiesNoInputs() {
1731 Component service = getTestComponent();
1732 service.setProperties(Arrays.asList(createMockProperty("componentPropStr", "Default String Prop"),
1733 createMockProperty("componentPropInt", null)));
1734 Optional<Map<String, ToscaProperty>> proxyNodeTypePropertiesResult =
1735 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1737 Assert.assertTrue(proxyNodeTypePropertiesResult.isPresent());
1738 Map<String, ToscaProperty> proxyNodeTypeProperties = proxyNodeTypePropertiesResult.get();
1739 testSubject.addInputsToProperties(DATA_TYPES, null, proxyNodeTypeProperties);
1740 Assert.assertNotNull(proxyNodeTypeProperties);
1741 Assert.assertEquals(2, proxyNodeTypeProperties.size());
1742 testSubject.addInputsToProperties(DATA_TYPES, new ArrayList<>(), proxyNodeTypeProperties);
1743 Assert.assertEquals(2, proxyNodeTypeProperties.size());
1747 public void testAddInputsToPropertiesWithInputs() {
1748 Component service = getTestComponent();
1749 service.setProperties(Arrays.asList(createMockProperty("componentPropStr", "Default String Prop"),
1750 createMockProperty("componentPropInt", null)));
1751 service.setInputs(Arrays.asList(createMockInput("componentInputStr1",
1752 "Default String Input1"), createMockInput("componentInputStr2", "Default String Input2")));
1753 Optional<Map<String, ToscaProperty>> proxyNodeTypePropertiesResult =
1754 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1756 Assert.assertTrue(proxyNodeTypePropertiesResult.isPresent());
1757 Map<String, ToscaProperty> proxyNodeTypeProperties = proxyNodeTypePropertiesResult.get();
1758 testSubject.addInputsToProperties(DATA_TYPES, service.getInputs(), proxyNodeTypeProperties);
1759 Assert.assertNotNull(proxyNodeTypeProperties);
1760 Assert.assertEquals(4, proxyNodeTypeProperties.size());
1764 public void testAddInputsToPropertiesOnlyInputs() {
1765 Component service = getTestComponent();
1766 service.setInputs(Arrays.asList(createMockInput("componentInputStr1",
1767 "Default String Input1"), createMockInput("componentInputStr2", "Default String Input2")));
1768 Optional<Map<String, ToscaProperty>> proxyNodeTypePropertiesResult =
1769 testSubject.getProxyNodeTypeProperties(service, DATA_TYPES);
1771 Assert.assertTrue(proxyNodeTypePropertiesResult.isPresent());
1772 Map<String, ToscaProperty> proxyNodeTypeProperties = proxyNodeTypePropertiesResult.get();
1773 testSubject.addInputsToProperties(DATA_TYPES, service.getInputs(), proxyNodeTypeProperties);
1774 Assert.assertNotNull(proxyNodeTypeProperties);
1775 Assert.assertEquals(2, proxyNodeTypeProperties.size());
1779 public void testOperationImplementationInProxyNodeTypeNotPresent() {
1780 Component service = getTestComponent();
1781 InterfaceDefinition interfaceDefinition =
1782 service.getInterfaces().get("normalizedServiceComponentName-interface");
1783 interfaceDefinition.setOperations(new HashMap<>());
1784 final OperationDataDefinition operation = new OperationDataDefinition();
1785 operation.setName("start");
1786 operation.setDescription("op description");
1787 final ArtifactDataDefinition implementation = new ArtifactDataDefinition();
1788 implementation.setArtifactName("createBPMN.bpmn");
1789 operation.setImplementation(implementation);
1790 interfaceDefinition.getOperations().put(operation.getName(), operation);
1791 service.getInterfaces().put("normalizedServiceComponentName-interface", interfaceDefinition);
1792 service.setInputs(Arrays.asList(createMockInput("componentInputStr1",
1793 "Default String Input1"), createMockInput("componentInputStr2", "Default String Input2")));
1794 Optional<Map<String, Object>> proxyNodeTypeInterfaces =
1795 testSubject.getProxyNodeTypeInterfaces(service, DATA_TYPES);
1796 Assert.assertTrue(proxyNodeTypeInterfaces.isPresent());
1797 Map<String, Object> componentInterfaces = proxyNodeTypeInterfaces.get();
1798 Assert.assertNotNull(componentInterfaces);
1801 private Component getTestComponent() {
1802 Component component = new Service();
1803 component.setNormalizedName("normalizedServiceComponentName");
1804 InterfaceDefinition addedInterface = new InterfaceDefinition();
1805 addedInterface.setType("com.some.service.or.other.serviceName");
1806 final String interfaceType = "normalizedServiceComponentName-interface";
1807 component.setInterfaces(new HashMap<>());
1808 component.getInterfaces().put(interfaceType, addedInterface);
1812 private PropertyDefinition createMockProperty(String propertyName, String defaultValue) {
1813 PropertyDefinition propertyDefinition = new PropertyDefinition();
1814 propertyDefinition.setName(propertyName);
1815 propertyDefinition.setType("string");
1816 propertyDefinition.setDefaultValue(defaultValue);
1817 return propertyDefinition;
1820 private InputDefinition createMockInput(String inputName, String defaultValue) {
1821 InputDefinition inputDefinition = new InputDefinition();
1822 inputDefinition.setName(inputName);
1823 inputDefinition.setType("string");
1824 inputDefinition.setDefaultValue(defaultValue);
1825 return inputDefinition;