6f20e2d46974ab230b6956ad07e5ebe1f0a6a327
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / ResourceImportManagerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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  * ================================================================================
21  */
22
23 package org.openecomp.sdc.be.components;
24
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;
40
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;
47 import java.util.Map;
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;
96
97 public class ResourceImportManagerTest {
98
99     private ResourceImportManager importManager;
100
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);
111
112     @BeforeAll
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);
117
118         Configuration configuration = new Configuration();
119         configuration.setJanusGraphInMemoryGraph(true);
120         configurationManager.setConfiguration(configuration);
121     }
122
123     @BeforeEach
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);
135     }
136
137     @Test
138     void testBasicResourceCreation() throws IOException {
139         UploadResourceInfo resourceMD = createDummyResourceMD();
140
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);
147
148         setResourceBusinessLogicMock();
149
150         String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-blockStorage.yml");
151
152         ImmutablePair<Resource, ActionStatus> createResource =
153             importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
154         Resource resource = createResource.left;
155
156         testSetConstantMetaData(resource);
157         testSetMetaDataFromJson(resource, resourceMD);
158
159         testSetDerivedFrom(resource);
160         testSetProperties(resource);
161
162         verify(resourceBusinessLogic).propagateStateToCertified(eq(user), eq(resource), any(LifecycleChangeInfoWithAction.class), eq(false), eq(true), eq(false));
163     }
164
165     @Test
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";
180
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));
185
186         importManager.importAllNormativeResource(yaml, nodeTypesMetadataList, user, false, false);
187         verify(janusGraphDao).commit();
188     }
189
190     @Test
191     void importAllNormativeResourceTest_invalidYaml() {
192         var invalidYaml = "node_types: my.tosca.Type:";
193
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());
197     }
198
199     @Test
200     void importAllNormativeResourceTest_exceptionDuringImportShouldTriggerRolback() {
201         when(responseFormatManager.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(mock(ResponseFormat.class));
202         when(toscaOperationFacade.getLatestByName(any(), any())).thenThrow(new RuntimeException());
203
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";
217
218         assertThrows(ComponentException.class,
219             () -> importManager.importAllNormativeResource(yaml, nodeTypesMetadataList, user, false, false));
220         verify(janusGraphDao).rollback();
221     }
222
223
224     @Test()
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();
231
232         when(responseFormatManager.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(dummyResponseFormat);
233         setResourceBusinessLogicMock();
234
235         String jsonContent = "this is an invalid yml!";
236         ComponentException errorInfoFromTest = null;
237         try {
238             importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
239         }catch (ComponentException e){
240             errorInfoFromTest = e;
241         }
242         assertNotNull(errorInfoFromTest);
243         assertEquals(ActionStatus.GENERAL_ERROR, errorInfoFromTest.getActionStatus());
244
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));
249     }
250
251     @Test
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);
257
258         setResourceBusinessLogicMock();
259
260         String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-webServer.yml");
261
262         ImmutablePair<Resource, ActionStatus> createResource =
263             importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
264         Resource resource = createResource.left;
265         testSetCapabilities(resource);
266
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);
270
271     }
272
273     @Test
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);
279
280         setResourceBusinessLogicMock();
281
282         String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-port.yml");
283
284         ImmutablePair<Resource, ActionStatus> createResource =
285             importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
286         testSetRequirements(createResource.left);
287
288     }
289
290     @Test
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);
296
297         setResourceBusinessLogicMock();
298
299         String jsonContent = ImportUtilsTest.loadCustomTypeFileNameToJsonString("custom-types-node-type-with-interface-impl.yml");
300
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));
309
310         final ImmutablePair<Resource, ActionStatus> createResource =
311             importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
312         assertSetInterfaceImplementation(createResource.left);
313     }
314
315     @Test
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);
321
322         setResourceBusinessLogicMock();
323
324         String jsonContent = ImportUtilsTest.loadCustomTypeFileNameToJsonString("custom-types-node-type-with-unknown-interface-impl.yml");
325
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));
334
335         ImmutablePair<Resource, ActionStatus> createResource =
336             importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
337         assertNull(createResource.left.getInterfaces());
338     }
339
340     @Test
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);
346
347         setResourceBusinessLogicMock();
348
349         String jsonContent = ImportUtilsTest.loadCustomTypeFileNameToJsonString("custom-types-node-type-with-interface-impl-unknown-operation.yml");
350
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));
359                 
360         ImmutablePair<Resource, ActionStatus> createResource =
361             importManager.importNormativeResource(jsonContent, resourceMD, user, true, true, false);
362         assertNull(createResource.left.getInterfaces());
363     }
364     
365     @Test
366     void testResourceCreationFailedVendorReleaseAlreadyExists() throws IOException {
367         UploadResourceInfo resourceMD = createDummyResourceMD();
368
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);
375
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);
381
382         String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-blockStorage.yml");
383
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());
387     }
388
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);
395
396                 });
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];
401
402                 });
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]);
407
408         });
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]);
413
414         });
415
416         when(resourceBusinessLogic.validatePropertiesDefaultValues(any(Resource.class))).thenReturn(true);
417     }
418
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;
423     }
424
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         return resourceMD;
436     }
437
438     private void testSetProperties(Resource resource) {
439         List<PropertyDefinition> propertiesList = resource.getProperties();
440
441         Map<String, PropertyDefinition> properties = new HashMap<>();
442         for (PropertyDefinition propertyDefinition : propertiesList) {
443             properties.put(propertyDefinition.getName(), propertyDefinition);
444         }
445
446         assertEquals(3, properties.size());
447         assertTrue(properties.containsKey("size"));
448         PropertyDefinition propertyDefinition = properties.get("size");
449         assertEquals("scalar-unit.size", propertyDefinition.getType());
450         assertEquals(1, propertyDefinition.getConstraints().size());
451         PropertyConstraint propertyConstraint = propertyDefinition.getConstraints().get(0);
452         assertTrue(propertyConstraint instanceof GreaterOrEqualConstraint);
453
454         assertTrue(properties.containsKey("volume_id"));
455         propertyDefinition = properties.get("volume_id");
456         assertEquals("string", propertyDefinition.getType());
457         assertFalse(propertyDefinition.isRequired());
458
459         assertTrue(properties.containsKey("snapshot_id"));
460         propertyDefinition = properties.get("snapshot_id");
461         assertEquals("string", propertyDefinition.getType());
462         assertFalse(propertyDefinition.isRequired());
463
464     }
465
466     private void testSetCapabilities(Resource resource) {
467         Map<String, List<CapabilityDefinition>> capabilities = resource.getCapabilities();
468         assertEquals(3, capabilities.size());
469         assertTrue(capabilities.containsKey("tosca.capabilities.Endpoint"));
470         List<CapabilityDefinition> capabilityList = capabilities.get("tosca.capabilities.Endpoint");
471         CapabilityDefinition capability = capabilityList.get(0);
472         assertEquals("tosca.capabilities.Endpoint", capability.getType());
473         assertEquals("data_endpoint", capability.getName());
474
475         assertTrue(capabilities.containsKey("tosca.capabilities.Endpoint.Admin"));
476         capabilityList = capabilities.get("tosca.capabilities.Endpoint.Admin");
477         capability = capabilityList.get(0);
478         assertEquals("tosca.capabilities.Endpoint.Admin", capability.getType());
479         assertEquals("admin_endpoint", capability.getName());
480
481         assertTrue(capabilities.containsKey("tosca.capabilities.Container"));
482         capabilityList = capabilities.get("tosca.capabilities.Container");
483         capability = capabilityList.get(0);
484         assertEquals("tosca.capabilities.Container", capability.getType());
485         assertEquals("host", capability.getName());
486
487         List<String> validSourceTypes = capability.getValidSourceTypes();
488         assertEquals(1, validSourceTypes.size());
489         assertEquals("tosca.nodes.WebApplication", validSourceTypes.get(0));
490
491     }
492
493     private void testSetRequirements(Resource resource) {
494         Map<String, List<RequirementDefinition>> requirements = resource.getRequirements();
495         assertEquals(2, requirements.size());
496
497         assertTrue(requirements.containsKey("tosca.capabilities.network.Linkable"));
498         List<RequirementDefinition> requirementList = requirements.get("tosca.capabilities.network.Linkable");
499         RequirementDefinition requirement = requirementList.get(0);
500         assertEquals("tosca.capabilities.network.Linkable", requirement.getCapability());
501         assertEquals("tosca.relationships.network.LinksTo", requirement.getRelationship());
502         assertEquals("link", requirement.getName());
503
504         assertTrue(requirements.containsKey("tosca.capabilities.network.Bindable"));
505         requirementList = requirements.get("tosca.capabilities.network.Bindable");
506         requirement = requirementList.get(0);
507         assertEquals("tosca.capabilities.network.Bindable", requirement.getCapability());
508         assertEquals("tosca.relationships.network.BindsTo", requirement.getRelationship());
509         assertEquals("binding", requirement.getName());
510
511     }
512
513     private void assertSetInterfaceImplementation(final Resource resource) {
514         final Map<String, InterfaceDefinition> interfaces = resource.getInterfaces();
515         assertNotNull(interfaces);
516         assertEquals(1, interfaces.size());
517         final InterfaceDefinition interfaceDefinition = interfaces.get("tosca.interfaces.node.lifecycle.Standard");
518         assertTrue(interfaces.containsKey(interfaceDefinition.getType()));
519         Map<String, OperationDataDefinition> operations = interfaceDefinition.getOperations();
520         operations.values().forEach(operationDataDefinition ->
521             assertTrue(operations.containsKey(operationDataDefinition.getName())));
522     }
523
524     private void testSetDerivedFrom(Resource resource) {
525         assertEquals(1, resource.getDerivedFrom().size());
526         assertEquals("tosca.nodes.Root", resource.getDerivedFrom().get(0));
527
528     }
529
530     private void testSetMetaDataFromJson(Resource resource, UploadResourceInfo resourceMD) {
531         assertEquals(resource.getDescription(), resourceMD.getDescription());
532         assertEquals(resource.getIcon(), resourceMD.getResourceIconPath());
533         assertEquals(resource.getName(), resourceMD.getName());
534         assertEquals(resource.getResourceVendorModelNumber(), resourceMD.getResourceVendorModelNumber());
535         assertEquals(resource.getContactId(), resourceMD.getContactId());
536         assertEquals(resource.getCreatorUserId(), resourceMD.getContactId());
537         assertEquals(resourceMD.getTags().size(), resource.getTags().size());
538         for (String tag : resource.getTags()) {
539             assertTrue(resourceMD.getTags().contains(tag));
540         }
541
542     }
543
544     private void testSetConstantMetaData(Resource resource) {
545         assertEquals(resource.getVersion(), TypeUtils.getFirstCertifiedVersionVersion());
546         assertSame(ImportUtils.Constants.NORMATIVE_TYPE_LIFE_CYCLE, resource.getLifecycleState());
547         assertEquals(ImportUtils.Constants.NORMATIVE_TYPE_HIGHEST_VERSION, resource.isHighestVersion());
548         assertEquals(ImportUtils.Constants.VENDOR_NAME, resource.getVendorName());
549         assertEquals(ImportUtils.Constants.VENDOR_RELEASE, resource.getVendorRelease());
550     }
551
552 }