2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 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) 2019 Nokia
20 * ================================================================================
23 package org.openecomp.sdc.be.components;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertFalse;
27 import static org.junit.jupiter.api.Assertions.assertNotNull;
28 import static org.junit.jupiter.api.Assertions.assertNull;
29 import static org.junit.jupiter.api.Assertions.assertSame;
30 import static org.junit.jupiter.api.Assertions.assertThrows;
31 import static org.junit.jupiter.api.Assertions.assertTrue;
32 import static org.mockito.ArgumentMatchers.any;
33 import static org.mockito.ArgumentMatchers.anyString;
34 import static org.mockito.ArgumentMatchers.eq;
35 import static org.mockito.Mockito.anyBoolean;
36 import static org.mockito.Mockito.mock;
37 import static org.mockito.Mockito.times;
38 import static org.mockito.Mockito.verify;
39 import static org.mockito.Mockito.when;
41 import fj.data.Either;
42 import java.io.IOException;
43 import java.util.ArrayList;
44 import java.util.Collections;
45 import java.util.HashMap;
46 import java.util.List;
48 import org.apache.commons.lang3.tuple.ImmutablePair;
49 import org.junit.jupiter.api.BeforeAll;
50 import org.junit.jupiter.api.BeforeEach;
51 import org.junit.jupiter.api.Test;
52 import org.mockito.stubbing.Answer;
53 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
54 import org.openecomp.sdc.be.components.impl.ImportUtils;
55 import org.openecomp.sdc.be.components.impl.ImportUtilsTest;
56 import org.openecomp.sdc.be.components.impl.InterfaceDefinitionHandler;
57 import org.openecomp.sdc.be.components.impl.InterfaceOperationBusinessLogic;
58 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
59 import org.openecomp.sdc.be.components.impl.ResourceImportManager;
60 import org.openecomp.sdc.be.components.impl.ResponseFormatManager;
61 import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
62 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
63 import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction;
64 import org.openecomp.sdc.be.config.Configuration;
65 import org.openecomp.sdc.be.config.ConfigurationManager;
66 import org.openecomp.sdc.be.dao.api.ActionStatus;
67 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
68 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
69 import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
70 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
71 import org.openecomp.sdc.be.impl.ComponentsUtils;
72 import org.openecomp.sdc.be.model.CapabilityDefinition;
73 import org.openecomp.sdc.be.model.Component;
74 import org.openecomp.sdc.be.model.InterfaceDefinition;
75 import org.openecomp.sdc.be.model.NodeTypeMetadata;
76 import org.openecomp.sdc.be.model.NodeTypesMetadataList;
77 import org.openecomp.sdc.be.model.PropertyConstraint;
78 import org.openecomp.sdc.be.model.PropertyDefinition;
79 import org.openecomp.sdc.be.model.RequirementDefinition;
80 import org.openecomp.sdc.be.model.Resource;
81 import org.openecomp.sdc.be.model.UploadResourceInfo;
82 import org.openecomp.sdc.be.model.User;
83 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
84 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
85 import org.openecomp.sdc.be.model.operations.impl.CapabilityTypeOperation;
86 import org.openecomp.sdc.be.model.tosca.constraints.GreaterOrEqualConstraint;
87 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
88 import org.openecomp.sdc.be.tosca.utils.InterfaceTypesNameUtil;
89 import org.openecomp.sdc.be.user.UserBusinessLogic;
90 import org.openecomp.sdc.be.utils.TypeUtils;
91 import org.openecomp.sdc.common.api.ConfigurationSource;
92 import org.openecomp.sdc.common.impl.ExternalConfiguration;
93 import org.openecomp.sdc.common.impl.FSConfigurationSource;
94 import org.openecomp.sdc.exception.PolicyException;
95 import org.openecomp.sdc.exception.ResponseFormat;
97 public class ResourceImportManagerTest {
99 private ResourceImportManager importManager;
101 private final AuditingManager auditingManager = mock(AuditingManager.class);
102 private final ResponseFormatManager responseFormatManager = mock(ResponseFormatManager.class);
103 private final ResourceBusinessLogic resourceBusinessLogic = mock(ResourceBusinessLogic.class);
104 private final InterfaceOperationBusinessLogic interfaceOperationBusinessLogic = mock(InterfaceOperationBusinessLogic.class);
105 private final InterfaceDefinitionHandler interfaceDefinitionHandler = new InterfaceDefinitionHandler(interfaceOperationBusinessLogic);
106 private final JanusGraphDao janusGraphDao = mock(JanusGraphDao.class);
107 private final UserBusinessLogic userAdmin = mock(UserBusinessLogic.class);
108 private final ToscaOperationFacade toscaOperationFacade = mock(ToscaOperationFacade.class);
109 private final ComponentsUtils componentsUtils = mock(ComponentsUtils.class);
110 private final CapabilityTypeOperation capabilityTypeOperation = mock(CapabilityTypeOperation.class);
113 public static void beforeClass() {
114 String appConfigDir = "src/test/resources/config/catalog-be";
115 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
116 final ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
118 Configuration configuration = new Configuration();
119 configuration.setJanusGraphInMemoryGraph(true);
120 configurationManager.setConfiguration(configuration);
124 public void beforeTest() {
125 importManager = new ResourceImportManager(componentsUtils, capabilityTypeOperation, interfaceDefinitionHandler, janusGraphDao);
126 importManager.setAuditingManager(auditingManager);
127 when(toscaOperationFacade.getLatestByToscaResourceName(anyString(), any())).thenReturn(Either.left(null));
128 when(toscaOperationFacade.getLatestByToscaResourceNameAndModel(anyString(), any())).thenReturn(Either.left(null));
129 importManager.setResponseFormatManager(responseFormatManager);
130 importManager.setResourceBusinessLogic(resourceBusinessLogic);
131 importManager.setToscaOperationFacade(toscaOperationFacade);
132 Either<Component, StorageOperationStatus> notFound = Either.right(StorageOperationStatus.NOT_FOUND);
133 when(toscaOperationFacade.getComponentByNameAndVendorRelease(any(ComponentTypeEnum.class), anyString(), anyString(),
134 any(JsonParseFlagEnum.class), any())).thenReturn(notFound);
138 void testBasicResourceCreation() throws IOException {
139 UploadResourceInfo resourceMD = createDummyResourceMD();
141 User user = new User();
142 user.setUserId(resourceMD.getContactId());
143 user.setRole("ADMIN");
144 user.setFirstName("Jhon");
145 user.setLastName("Doh");
146 when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
148 setResourceBusinessLogicMock();
150 String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-blockStorage.yml");
152 ImmutablePair<Resource, ActionStatus> createResource =
153 importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
154 Resource resource = createResource.left;
156 testSetConstantMetaData(resource);
157 testSetMetaDataFromJson(resource, resourceMD);
159 testSetDerivedFrom(resource);
160 testSetProperties(resource);
162 verify(resourceBusinessLogic).propagateStateToCertified(eq(user), eq(resource), any(LifecycleChangeInfoWithAction.class), eq(false), eq(true), eq(false));
166 void importAllNormativeResourceSuccessTest() {
167 final List<NodeTypeMetadata> nodeMetadataList = new ArrayList<>();
168 var nodeTypeMetadata1 = new NodeTypeMetadata();
169 nodeTypeMetadata1.setToscaName("my.tosca.Type");
170 nodeMetadataList.add(nodeTypeMetadata1);
171 var nodeTypeMetadata2 = new NodeTypeMetadata();
172 nodeTypeMetadata2.setToscaName("my.tosca.not.in.the.Yaml");
173 nodeMetadataList.add(nodeTypeMetadata2);
174 var nodeTypesMetadataList = new NodeTypesMetadataList();
175 nodeTypesMetadataList.setNodeMetadataList(nodeMetadataList);
176 var user = new User();
177 var yaml = "node_types:\n"
178 + " my.tosca.Type:\n"
179 + " description: a description";
181 when(toscaOperationFacade.getLatestByName(any(), any())).thenReturn(Either.left(null));
182 when(resourceBusinessLogic
183 .createOrUpdateResourceByImport(any(Resource.class), any(User.class), eq(true), eq(true), eq(false), eq(null), eq(null), eq(false)))
184 .thenReturn(new ImmutablePair<>(new Resource(), ActionStatus.OK));
186 importManager.importAllNormativeResource(yaml, nodeTypesMetadataList, user, false, false);
187 verify(janusGraphDao).commit();
191 void importAllNormativeResourceTest_invalidYaml() {
192 var invalidYaml = "node_types: my.tosca.Type:";
194 final ByActionStatusComponentException actualException = assertThrows(ByActionStatusComponentException.class,
195 () -> importManager.importAllNormativeResource(invalidYaml, new NodeTypesMetadataList(), new User(), false, false));
196 assertEquals(ActionStatus.INVALID_NODE_TYPES_YAML, actualException.getActionStatus());
200 void importAllNormativeResourceTest_exceptionDuringImportShouldTriggerRolback() {
201 when(responseFormatManager.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(mock(ResponseFormat.class));
202 when(toscaOperationFacade.getLatestByName(any(), any())).thenThrow(new RuntimeException());
204 final List<NodeTypeMetadata> nodeMetadataList = new ArrayList<>();
205 var nodeTypeMetadata1 = new NodeTypeMetadata();
206 nodeTypeMetadata1.setToscaName("my.tosca.Type");
207 nodeMetadataList.add(nodeTypeMetadata1);
208 var nodeTypeMetadata2 = new NodeTypeMetadata();
209 nodeTypeMetadata2.setToscaName("my.tosca.not.in.the.Yaml");
210 nodeMetadataList.add(nodeTypeMetadata2);
211 var nodeTypesMetadataList = new NodeTypesMetadataList();
212 nodeTypesMetadataList.setNodeMetadataList(nodeMetadataList);
213 var user = new User();
214 var yaml = "node_types:\n"
215 + " my.tosca.Type:\n"
216 + " description: a description";
218 assertThrows(ComponentException.class,
219 () -> importManager.importAllNormativeResource(yaml, nodeTypesMetadataList, user, false, false));
220 verify(janusGraphDao).rollback();
225 void testResourceCreationFailed() {
226 UploadResourceInfo resourceMD = createDummyResourceMD();
227 User user = new User();
228 user.setUserId(resourceMD.getContactId());
229 when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
230 ResponseFormat dummyResponseFormat = createGeneralErrorInfo();
232 when(responseFormatManager.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(dummyResponseFormat);
233 setResourceBusinessLogicMock();
235 String jsonContent = "this is an invalid yml!";
236 ComponentException errorInfoFromTest = null;
238 importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
239 }catch (ComponentException e){
240 errorInfoFromTest = e;
242 assertNotNull(errorInfoFromTest);
243 assertEquals(ActionStatus.GENERAL_ERROR, errorInfoFromTest.getActionStatus());
245 verify(resourceBusinessLogic, times(0))
246 .createOrUpdateResourceByImport(any(Resource.class), eq(user), eq(true), eq(false), eq(true), eq(null), eq(null), eq(false));
247 verify(resourceBusinessLogic, times(0))
248 .propagateStateToCertified(eq(user), any(Resource.class), any(LifecycleChangeInfoWithAction.class), eq(false), eq(true), eq(false));
252 void testResourceCreationWithCapabilities() throws IOException {
253 UploadResourceInfo resourceMD = createDummyResourceMD();
254 User user = new User();
255 user.setUserId(resourceMD.getContactId());
256 when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
258 setResourceBusinessLogicMock();
260 String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-webServer.yml");
262 ImmutablePair<Resource, ActionStatus> createResource =
263 importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
264 Resource resource = createResource.left;
265 testSetCapabilities(resource);
267 verify(resourceBusinessLogic)
268 .propagateStateToCertified(eq(user), eq(resource), any(LifecycleChangeInfoWithAction.class), eq(false), eq(true), eq(false));
269 verify(resourceBusinessLogic).createOrUpdateResourceByImport(resource, user, true, false, true, null, null, false);
274 void testResourceCreationWithRequirements() throws IOException {
275 UploadResourceInfo resourceMD = createDummyResourceMD();
276 User user = new User();
277 user.setUserId(resourceMD.getContactId());
278 when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
280 setResourceBusinessLogicMock();
282 String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-port.yml");
284 ImmutablePair<Resource, ActionStatus> createResource =
285 importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
286 testSetRequirements(createResource.left);
291 void testResourceCreationWithInterfaceImplementation() throws IOException {
292 UploadResourceInfo resourceMD = createDummyResourceMD();
293 User user = new User();
294 user.setUserId(resourceMD.getContactId());
295 when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
297 setResourceBusinessLogicMock();
299 String jsonContent = ImportUtilsTest.loadCustomTypeFileNameToJsonString("custom-types-node-type-with-interface-impl.yml");
301 Map<String, InterfaceDefinition> interfaceTypes = new HashMap<>();
302 final InterfaceDefinition interfaceDefinition = new InterfaceDefinition();
303 interfaceDefinition.setType("tosca.interfaces.node.lifecycle.Standard");
304 Map<String, OperationDataDefinition> operations = new HashMap<>();
305 operations.put("configure", new OperationDataDefinition());
306 interfaceDefinition.setOperations(operations );
307 interfaceTypes.put("tosca.interfaces.node.lifecycle.standard", interfaceDefinition);
308 when(interfaceOperationBusinessLogic.getAllInterfaceLifecycleTypes(any())).thenReturn(Either.left(interfaceTypes));
310 final ImmutablePair<Resource, ActionStatus> createResource =
311 importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
312 assertSetInterfaceImplementation(createResource.left);
316 void testResourceCreationWithInterfaceImplementation_UnknownInterface() throws IOException {
317 UploadResourceInfo resourceMD = createDummyResourceMD();
318 User user = new User();
319 user.setUserId(resourceMD.getContactId());
320 when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
322 setResourceBusinessLogicMock();
324 String jsonContent = ImportUtilsTest.loadCustomTypeFileNameToJsonString("custom-types-node-type-with-unknown-interface-impl.yml");
326 Map<String, InterfaceDefinition> interfaceTypes = new HashMap<>();
327 final InterfaceDefinition interfaceDefinition = new InterfaceDefinition();
328 interfaceDefinition.setType("tosca.interfaces.node.lifecycle.Standard");
329 Map<String, OperationDataDefinition> operations = new HashMap<>();
330 operations.put("configure", new OperationDataDefinition());
331 interfaceDefinition.setOperations(operations );
332 interfaceTypes.put("tosca.interfaces.node.lifecycle.standard", interfaceDefinition);
333 when(interfaceOperationBusinessLogic.getAllInterfaceLifecycleTypes(any())).thenReturn(Either.left(interfaceTypes));
335 ImmutablePair<Resource, ActionStatus> createResource =
336 importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
337 assertNull(createResource.left.getInterfaces());
341 void testResourceCreationWitInterfaceImplementation_UnknownOperation() throws IOException {
342 UploadResourceInfo resourceMD = createDummyResourceMD();
343 User user = new User();
344 user.setUserId(resourceMD.getContactId());
345 when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
347 setResourceBusinessLogicMock();
349 String jsonContent = ImportUtilsTest.loadCustomTypeFileNameToJsonString("custom-types-node-type-with-interface-impl-unknown-operation.yml");
351 Map<String, InterfaceDefinition> interfaceTypes = new HashMap<>();
352 final InterfaceDefinition interfaceDefinition = new InterfaceDefinition();
353 interfaceDefinition.setType("tosca.interfaces.node.lifecycle.Standard");
354 Map<String, OperationDataDefinition> operations = new HashMap<>();
355 operations.put("configure", new OperationDataDefinition());
356 interfaceDefinition.setOperations(operations );
357 interfaceTypes.put("tosca.interfaces.node.lifecycle.standard", interfaceDefinition);
358 when(interfaceOperationBusinessLogic.getAllInterfaceLifecycleTypes(any())).thenReturn(Either.left(interfaceTypes));
360 ImmutablePair<Resource, ActionStatus> createResource =
361 importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
362 assertNull(createResource.left.getInterfaces());
366 void testResourceCreationFailedVendorReleaseAlreadyExists() throws IOException {
367 UploadResourceInfo resourceMD = createDummyResourceMD();
369 User user = new User();
370 user.setUserId(resourceMD.getContactId());
371 user.setRole("ADMIN");
372 user.setFirstName("Jhon");
373 user.setLastName("Doh");
374 when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
376 setResourceBusinessLogicMock();
377 final Either<Component, StorageOperationStatus> foundResourceEither = Either.left(mock(Resource.class));
378 when(toscaOperationFacade.getComponentByNameAndVendorRelease(any(ComponentTypeEnum.class), anyString(), anyString(),
379 any(JsonParseFlagEnum.class), any())).thenReturn(foundResourceEither);
380 when(toscaOperationFacade.isNodeAssociatedToModel(eq(null), any(Resource.class))).thenReturn(true);
382 String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-blockStorage.yml");
384 var actualException = assertThrows(ByActionStatusComponentException.class,
385 () -> importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false));
386 assertEquals(ActionStatus.COMPONENT_WITH_VENDOR_RELEASE_ALREADY_EXISTS, actualException.getActionStatus());
389 private void setResourceBusinessLogicMock() {
390 when(resourceBusinessLogic.getUserAdmin()).thenReturn(userAdmin);
391 when(resourceBusinessLogic.createOrUpdateResourceByImport(any(Resource.class), any(User.class), anyBoolean(), anyBoolean(), anyBoolean(), eq(null), eq(null), eq(false)))
392 .thenAnswer((Answer<ImmutablePair<Resource, ActionStatus>>) invocation -> {
393 Object[] args = invocation.getArguments();
394 return new ImmutablePair<>((Resource) args[0], ActionStatus.CREATED);
397 when(resourceBusinessLogic.propagateStateToCertified(any(User.class), any(Resource.class), any(LifecycleChangeInfoWithAction.class), eq(false), eq(true), eq(false)))
398 .thenAnswer((Answer<Resource>) invocation -> {
399 Object[] args = invocation.getArguments();
400 return (Resource) args[1];
403 when(resourceBusinessLogic.createResourceByDao(
404 any(Resource.class), any(User.class), any(AuditingActionEnum.class), anyBoolean(), anyBoolean())).thenAnswer((Answer<Either<Resource, ResponseFormat>>) invocation -> {
405 Object[] args = invocation.getArguments();
406 return Either.left((Resource) args[0]);
409 when(resourceBusinessLogic.validateResourceBeforeCreate(
410 any(Resource.class), any(User.class), any(AuditingActionEnum.class), eq(false), eq(null))).thenAnswer((Answer<Either<Resource, ResponseFormat>>) invocation -> {
411 Object[] args = invocation.getArguments();
412 return Either.left((Resource) args[0]);
416 when(resourceBusinessLogic.validatePropertiesDefaultValues(any(Resource.class))).thenReturn(true);
419 private ResponseFormat createGeneralErrorInfo() {
420 ResponseFormat responseFormat = new ResponseFormat(500);
421 responseFormat.setPolicyException(new PolicyException("POL5000", "Error: Internal Server Error. Please try again later", null));
422 return responseFormat;
425 private UploadResourceInfo createDummyResourceMD() {
426 UploadResourceInfo resourceMD = new UploadResourceInfo();
427 resourceMD.setName("tosca.nodes.BlockStorage");
428 resourceMD.setPayloadName("payLoad");
429 resourceMD.addSubCategory("Generic", "Infrastructure");
430 resourceMD.setContactId("ya107f");
431 resourceMD.setResourceIconPath("defaulticon");
432 resourceMD.setTags(Collections.singletonList("BlockStorage"));
433 resourceMD.setDescription("Represents a server-local block storage device (i.e., not shared) offering evenly sized blocks of data from which raw storage volumes can be created.");
434 resourceMD.setResourceVendorModelNumber("vendorReleaseNumber");
435 resourceMD.setNormative(true);
439 private void testSetProperties(Resource resource) {
440 List<PropertyDefinition> propertiesList = resource.getProperties();
442 Map<String, PropertyDefinition> properties = new HashMap<>();
443 for (PropertyDefinition propertyDefinition : propertiesList) {
444 properties.put(propertyDefinition.getName(), propertyDefinition);
447 assertEquals(3, properties.size());
448 assertTrue(properties.containsKey("size"));
449 PropertyDefinition propertyDefinition = properties.get("size");
450 assertEquals("scalar-unit.size", propertyDefinition.getType());
451 assertEquals(1, propertyDefinition.getConstraints().size());
452 PropertyConstraint propertyConstraint = propertyDefinition.getConstraints().get(0);
453 assertTrue(propertyConstraint instanceof GreaterOrEqualConstraint);
455 assertTrue(properties.containsKey("volume_id"));
456 propertyDefinition = properties.get("volume_id");
457 assertEquals("string", propertyDefinition.getType());
458 assertFalse(propertyDefinition.isRequired());
460 assertTrue(properties.containsKey("snapshot_id"));
461 propertyDefinition = properties.get("snapshot_id");
462 assertEquals("string", propertyDefinition.getType());
463 assertFalse(propertyDefinition.isRequired());
467 private void testSetCapabilities(Resource resource) {
468 Map<String, List<CapabilityDefinition>> capabilities = resource.getCapabilities();
469 assertEquals(3, capabilities.size());
470 assertTrue(capabilities.containsKey("tosca.capabilities.Endpoint"));
471 List<CapabilityDefinition> capabilityList = capabilities.get("tosca.capabilities.Endpoint");
472 CapabilityDefinition capability = capabilityList.get(0);
473 assertEquals("tosca.capabilities.Endpoint", capability.getType());
474 assertEquals("data_endpoint", capability.getName());
476 assertTrue(capabilities.containsKey("tosca.capabilities.Endpoint.Admin"));
477 capabilityList = capabilities.get("tosca.capabilities.Endpoint.Admin");
478 capability = capabilityList.get(0);
479 assertEquals("tosca.capabilities.Endpoint.Admin", capability.getType());
480 assertEquals("admin_endpoint", capability.getName());
482 assertTrue(capabilities.containsKey("tosca.capabilities.Container"));
483 capabilityList = capabilities.get("tosca.capabilities.Container");
484 capability = capabilityList.get(0);
485 assertEquals("tosca.capabilities.Container", capability.getType());
486 assertEquals("host", capability.getName());
488 List<String> validSourceTypes = capability.getValidSourceTypes();
489 assertEquals(1, validSourceTypes.size());
490 assertEquals("tosca.nodes.WebApplication", validSourceTypes.get(0));
494 private void testSetRequirements(Resource resource) {
495 Map<String, List<RequirementDefinition>> requirements = resource.getRequirements();
496 assertEquals(2, requirements.size());
498 assertTrue(requirements.containsKey("tosca.capabilities.network.Linkable"));
499 List<RequirementDefinition> requirementList = requirements.get("tosca.capabilities.network.Linkable");
500 RequirementDefinition requirement = requirementList.get(0);
501 assertEquals("tosca.capabilities.network.Linkable", requirement.getCapability());
502 assertEquals("tosca.relationships.network.LinksTo", requirement.getRelationship());
503 assertEquals("link", requirement.getName());
505 assertTrue(requirements.containsKey("tosca.capabilities.network.Bindable"));
506 requirementList = requirements.get("tosca.capabilities.network.Bindable");
507 requirement = requirementList.get(0);
508 assertEquals("tosca.capabilities.network.Bindable", requirement.getCapability());
509 assertEquals("tosca.relationships.network.BindsTo", requirement.getRelationship());
510 assertEquals("binding", requirement.getName());
514 private void assertSetInterfaceImplementation(final Resource resource) {
515 final Map<String, InterfaceDefinition> interfaces = resource.getInterfaces();
516 assertNotNull(interfaces);
517 assertEquals(1, interfaces.size());
518 final InterfaceDefinition interfaceDefinition = interfaces.get("tosca.interfaces.node.lifecycle.Standard");
519 assertTrue(interfaces.containsKey(interfaceDefinition.getType()));
520 Map<String, OperationDataDefinition> operations = interfaceDefinition.getOperations();
521 operations.values().forEach(operationDataDefinition ->
522 assertTrue(operations.containsKey(operationDataDefinition.getName())));
525 private void testSetDerivedFrom(Resource resource) {
526 assertEquals(1, resource.getDerivedFrom().size());
527 assertEquals("tosca.nodes.Root", resource.getDerivedFrom().get(0));
531 private void testSetMetaDataFromJson(Resource resource, UploadResourceInfo resourceMD) {
532 assertEquals(resource.getDescription(), resourceMD.getDescription());
533 assertEquals(resource.getIcon(), resourceMD.getResourceIconPath());
534 assertEquals(resource.getName(), resourceMD.getName());
535 assertEquals(resource.getResourceVendorModelNumber(), resourceMD.getResourceVendorModelNumber());
536 assertEquals(resource.getContactId(), resourceMD.getContactId());
537 assertEquals(resource.getCreatorUserId(), resourceMD.getContactId());
538 assertEquals(resourceMD.getTags().size(), resource.getTags().size());
539 for (String tag : resource.getTags()) {
540 assertTrue(resourceMD.getTags().contains(tag));
542 assertEquals(resourceMD.isNormative(), resource.getComponentMetadataDefinition().getMetadataDataDefinition().isNormative());
545 private void testSetConstantMetaData(Resource resource) {
546 assertEquals(resource.getVersion(), TypeUtils.getFirstCertifiedVersionVersion());
547 assertSame(ImportUtils.Constants.NORMATIVE_TYPE_LIFE_CYCLE, resource.getLifecycleState());
548 assertEquals(ImportUtils.Constants.NORMATIVE_TYPE_HIGHEST_VERSION, resource.isHighestVersion());
549 assertEquals(ImportUtils.Constants.VENDOR_NAME, resource.getVendorName());
550 assertEquals(ImportUtils.Constants.VENDOR_RELEASE, resource.getVendorRelease());