diff options
2 files changed, 140 insertions, 47 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java index f4ccb868d9..552fbb0b16 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogic.java @@ -845,7 +845,7 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic { if (createServiceResponse.isRight()) { return createServiceResponse; } - return createServiceByDao(service, AuditingActionEnum.CREATE_RESOURCE, user) + return createServiceByDao(service, user) .left() .bind(c -> updateCatalog(c, ChangeTypeEnum.LIFECYCLE) .left() @@ -859,42 +859,42 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic { } } - private Either<Service, ResponseFormat> createServiceByDao(Service service, AuditingActionEnum actionEnum, User user) { + private Either<Service, ResponseFormat> createServiceByDao(final Service service, final User user) { log.debug("send service {} to dao for create", service.getComponentMetadataDefinition().getMetadataDataDefinition().getName()); Either<Boolean, ResponseFormat> lockResult = lockComponentByName(service.getSystemName(), service, "Create Service"); if (lockResult.isRight()) { ResponseFormat responseFormat = lockResult.right().value(); - componentsUtils.auditComponentAdmin(responseFormat, user, service, actionEnum, ComponentTypeEnum.SERVICE); + componentsUtils.auditComponentAdmin(responseFormat, user, service, AuditingActionEnum.CREATE_RESOURCE, + ComponentTypeEnum.SERVICE); return Either.right(responseFormat); } log.debug("System name locked is {}, status = {}", service.getSystemName(), lockResult); try { - createMandatoryArtifactsData(service, user); createServiceApiArtifactsData(service, user); setToscaArtifactsPlaceHolders(service, user); - generateAndAddInputsFromGenericTypeProperties(service, fetchAndSetDerivedFromGenericType(service)); + final Resource genericType = fetchAndSetDerivedFromGenericType(service); + generatePropertiesFromGenericType(service, genericType); + generateAndAddInputsFromGenericTypeProperties(service, genericType); beforeCreate(service); Either<Service, StorageOperationStatus> dataModelResponse = toscaOperationFacade.createToscaComponent(service); - - // service created successfully!!! if (dataModelResponse.isLeft()) { - log.debug("Service created successfully!!!"); + log.debug("Service '{}' created successfully", service.getName()); ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.CREATED); - componentsUtils.auditComponentAdmin(responseFormat, user, service, actionEnum, ComponentTypeEnum.SERVICE); + componentsUtils.auditComponentAdmin(responseFormat, user, service, AuditingActionEnum.CREATE_RESOURCE, + ComponentTypeEnum.SERVICE); ASDCKpiApi.countCreatedServicesKPI(); return Either.left(dataModelResponse.left().value()); } - ResponseFormat responseFormat = componentsUtils.getResponseFormatByComponent(componentsUtils.convertFromStorageResponse(dataModelResponse.right().value()), service, ComponentTypeEnum.SERVICE); log.debug(AUDIT_BEFORE_SENDING_RESPONSE); - componentsUtils.auditComponentAdmin(responseFormat, user, service, actionEnum, ComponentTypeEnum.SERVICE); + componentsUtils.auditComponentAdmin(responseFormat, user, service, AuditingActionEnum.CREATE_RESOURCE, + ComponentTypeEnum.SERVICE); return Either.right(responseFormat); - } finally { graphLockOperation.unlockComponentByName(service.getSystemName(), service.getUniqueId(), NodeTypeEnum.Service); } @@ -916,6 +916,27 @@ public class ServiceBusinessLogic extends ComponentBusinessLogic { }); } + private void generatePropertiesFromGenericType(final Service service, final Resource genericType) { + if (CollectionUtils.isEmpty(genericType.getProperties())) { + return; + } + final List<PropertyDefinition> genericTypePropertyList = genericType.getProperties().stream() + .map(PropertyDefinition::new) + .peek(propertyDefinition -> propertyDefinition.setUniqueId(null)) + .collect(Collectors.toList()); + if (service.getProperties() == null) { + service.setProperties(new ArrayList<>(genericTypePropertyList)); + } else { + List<PropertyDefinition> servicePropertyList = service.getProperties(); + genericTypePropertyList.stream() + .filter(property -> servicePropertyList.stream() + .noneMatch(property1 -> property1.getName().equals(property.getName()))) + .forEach(servicePropertyList::add); + } + + service.getProperties().forEach(propertyDefinition -> propertyDefinition.setUniqueId(null)); + } + @SuppressWarnings("unchecked") private void createServiceApiArtifactsData(Service service, User user) { // create mandatory artifacts diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogicTest.java index 7fc92fb362..42d24bbcd1 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ServiceBusinessLogicTest.java @@ -21,6 +21,9 @@ package org.openecomp.sdc.be.components.impl; import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -38,8 +41,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.Stream; import org.apache.commons.lang3.tuple.ImmutablePair; import org.junit.Assert; import org.junit.Test; @@ -56,6 +57,7 @@ import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.model.ComponentInstanceInterface; import org.openecomp.sdc.be.model.GroupInstance; import org.openecomp.sdc.be.model.Operation; +import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.Service; import org.openecomp.sdc.be.model.category.CategoryDefinition; @@ -93,7 +95,6 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup @Test public void testHappyScenario() { Service service = createServiceObject(false); - validateUserRoles(Role.ADMIN, Role.DESIGNER); when(genericTypeBusinessLogic.fetchDerivedFromGenericType(service)).thenReturn(Either.left(genericService)); Either<Service, ResponseFormat> createResponse = bl.createService(service, user); @@ -135,11 +136,58 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup assertTrue(createResponse.isLeft()); } + + @Test + public void testCreateServiceWhenGenericTypeHasProperties() { + final Service service = createServiceObject(false); + + final Resource genericTypeResource = mockGenericTypeResource(); + + when(genericTypeBusinessLogic.fetchDerivedFromGenericType(service)).thenReturn(Either.left(genericTypeResource)); + final Service expectedService = createServiceObject(true); + expectedService.setProperties(mockPropertyList()); + when(toscaOperationFacade.createToscaComponent(service)).thenReturn(Either.left(expectedService)); + Either<Service, ResponseFormat> createResponse = bl.createService(service, user); + + org.hamcrest.MatcherAssert.assertThat("Service creation should be successful", + createResponse.isLeft(), is(true)); + final Service actualService = createResponse.left().value(); + org.hamcrest.MatcherAssert.assertThat("Service should not be null", service, is(notNullValue())); + + assertEqualsServiceObject(expectedService, actualService); + } + + @Test + public void testCreateServiceWhenGenericTypeAndServiceHasProperties() { + final Service service = createServiceObject(false); + service.setProperties(mockPropertyList()); + service.getProperties().remove(0); + final PropertyDefinition serviceProperty = new PropertyDefinition(); + serviceProperty.setName("aServiceProperty"); + service.getProperties().add(serviceProperty); + + final Resource genericTypeResource = mockGenericTypeResource(); + + when(genericTypeBusinessLogic.fetchDerivedFromGenericType(service)).thenReturn(Either.left(genericTypeResource)); + final Service expectedService = createServiceObject(true); + expectedService.setProperties(mockPropertyList()); + expectedService.getProperties().add(serviceProperty); + when(toscaOperationFacade.createToscaComponent(service)).thenReturn(Either.left(expectedService)); + Either<Service, ResponseFormat> createResponse = bl.createService(service, user); + + org.hamcrest.MatcherAssert.assertThat("Service creation should be successful", + createResponse.isLeft(), is(true)); + final Service actualService = createResponse.left().value(); + org.hamcrest.MatcherAssert.assertThat("Service should not be null", service, is(notNullValue())); + + + assertEqualsServiceObject(expectedService, actualService); + } + @Test public void testHappyScenarioCRNullProjectCode() { Service service = createServiceObject(false); service.setProjectCode(null); - validateUserRoles(Role.ADMIN, Role.DESIGNER); when(genericTypeBusinessLogic.fetchDerivedFromGenericType(service)).thenReturn(Either.left(genericService)); Either<Service, ResponseFormat> createResponse = bl.createService(service, user); @@ -148,12 +196,12 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup } assertEqualsServiceObject(createServiceObject(true), createResponse.left().value()); } + @Test public void testHappyScenarioCREmptyStringProjectCode() { createServiceValidator(); Service service = createServiceObject(false); service.setProjectCode(""); - validateUserRoles(Role.ADMIN, Role.DESIGNER); when(genericTypeBusinessLogic.fetchDerivedFromGenericType(service)).thenReturn(Either.left(genericService)); Either<Service, ResponseFormat> createResponse = bl.createService(service, user); @@ -162,36 +210,37 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup } assertEqualsServiceObject(createServiceObject(true), createResponse.left().value()); } - - private void validateUserRoles(Role ... roles) { - List<Role> listOfRoles = Stream.of(roles).collect(Collectors.toList()); + private void assertEqualsServiceObject(final Service expectedService, final Service actualService) { + assertEquals(expectedService.getContactId(), actualService.getContactId()); + assertEquals(expectedService.getCategories(), actualService.getCategories()); + assertEquals(expectedService.getCreatorUserId(), actualService.getCreatorUserId()); + assertEquals(expectedService.getCreatorFullName(), actualService.getCreatorFullName()); + assertEquals(expectedService.getDescription(), actualService.getDescription()); + assertEquals(expectedService.getIcon(), actualService.getIcon()); + assertEquals(expectedService.getLastUpdaterUserId(), actualService.getLastUpdaterUserId()); + assertEquals(expectedService.getLastUpdaterFullName(), actualService.getLastUpdaterFullName()); + assertEquals(expectedService.getName(), actualService.getName()); + assertEquals(expectedService.getUniqueId(), actualService.getUniqueId()); + assertEquals(expectedService.getVersion(), actualService.getVersion()); + assertEquals(expectedService.getArtifacts(), actualService.getArtifacts()); + assertEquals(expectedService.getCreationDate(), actualService.getCreationDate()); + assertEquals(expectedService.getLastUpdateDate(), actualService.getLastUpdateDate()); + assertEquals(expectedService.getLifecycleState(), actualService.getLifecycleState()); + assertEquals(expectedService.getTags(), actualService.getTags()); + if (expectedService.getProperties() == null) { + org.hamcrest.MatcherAssert.assertThat("Service properties should be null", + actualService.getProperties(), is(nullValue())); + return; + } + org.hamcrest.MatcherAssert.assertThat("Service properties should be as expected", + actualService.getProperties(), is(expectedService.getProperties())); } - private void assertEqualsServiceObject(Service origService, Service newService) { - assertEquals(origService.getContactId(), newService.getContactId()); - assertEquals(origService.getCategories(), newService.getCategories()); - assertEquals(origService.getCreatorUserId(), newService.getCreatorUserId()); - assertEquals(origService.getCreatorFullName(), newService.getCreatorFullName()); - assertEquals(origService.getDescription(), newService.getDescription()); - assertEquals(origService.getIcon(), newService.getIcon()); - assertEquals(origService.getLastUpdaterUserId(), newService.getLastUpdaterUserId()); - assertEquals(origService.getLastUpdaterFullName(), newService.getLastUpdaterFullName()); - assertEquals(origService.getName(), newService.getName()); - assertEquals(origService.getName(), newService.getName()); - assertEquals(origService.getUniqueId(), newService.getUniqueId()); - assertEquals(origService.getVersion(), newService.getVersion()); - assertEquals(origService.getArtifacts(), newService.getArtifacts()); - assertEquals(origService.getCreationDate(), newService.getCreationDate()); - assertEquals(origService.getLastUpdateDate(), newService.getLastUpdateDate()); - assertEquals(origService.getLifecycleState(), newService.getLifecycleState()); - assertEquals(origService.getTags(), newService.getTags()); - } /* CREATE validations - start ***********************/ // Service name - start - @Test public void testFailedServiceValidations() { @@ -229,7 +278,6 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup List<String> tgs = new ArrayList<>(); tgs.add(serviceName); serviceExccedsNameLimit.setTags(tgs); - validateUserRoles(Role.ADMIN, Role.DESIGNER); try { bl.createService(serviceExccedsNameLimit, user); } catch (ComponentException exp) { @@ -267,6 +315,7 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup // Service name - end // Service description - start + private void testServiceDescriptionEmpty() { Service serviceExist = createServiceObject(false); serviceExist.setDescription(""); @@ -278,7 +327,6 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup } fail(); } - private void testServiceDescriptionMissing() { Service serviceExist = createServiceObject(false); serviceExist.setDescription(null); @@ -329,6 +377,7 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup // Service description - stop // Service icon - start + private void testServiceIconEmpty() { Service serviceExist = createServiceObject(false); serviceExist.setIcon(""); @@ -336,7 +385,6 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup assertThat(service.left().value().getIcon()).isEqualTo(DEFAULT_ICON); } - private void testServiceIconMissing() { Service serviceExist = createServiceObject(false); serviceExist.setIcon(null); @@ -401,6 +449,7 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup // Service tags - stop // Service contactId - start + private void testContactIdTooLong() { Service serviceContactId = createServiceObject(false); // 59 chars instead of 50 @@ -414,7 +463,6 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup } fail(); } - private void testContactIdWrongFormatCreate() { Service serviceContactId = createServiceObject(false); // 3 letters and 3 digits and special characters @@ -443,6 +491,7 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup // Service contactId - stop // Service category - start + private void testServiceCategoryExist() { Service serviceExist = createServiceObject(false); serviceExist.setCategories(null); @@ -454,7 +503,6 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup } fail(); } - @Test public void markDistributionAsDeployedTestAlreadyDeployed() { String notifyAction = "DNotify"; @@ -538,6 +586,7 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup // Service category - stop // Service projectCode - start + private void testInvalidProjectCode() { Service serviceExist = createServiceObject(false); @@ -552,7 +601,6 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup fail(); } - private void testProjectCodeTooLong() { Service serviceExist = createServiceObject(false); @@ -695,7 +743,6 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup @Test public void testDerivedFromGeneric() { Service service = createServiceObject(true); - validateUserRoles(Role.ADMIN, Role.DESIGNER); when(toscaOperationFacade.createToscaComponent(service)).thenReturn(Either.left(service)); when(genericTypeBusinessLogic.fetchDerivedFromGenericType(service)).thenReturn(Either.left(genericService)); Either<Service, ResponseFormat> createResponse = bl.createService(service, user); @@ -947,4 +994,29 @@ public class ServiceBusinessLogicTest extends ServiceBussinessLogicBaseTestSetup Assert.assertEquals(HttpStatus.NOT_FOUND.value(), operationEither.right().value().getStatus().intValue()); } + private Resource mockGenericTypeResource() { + final Resource genericTypeResource = new Resource(); + genericTypeResource.setProperties(mockPropertyList()); + return genericTypeResource; + } + + private List<PropertyDefinition> mockPropertyList() { + final List<PropertyDefinition> propertyList = new ArrayList<>(); + final PropertyDefinition propertyDefinition1 = new PropertyDefinition(); + propertyDefinition1.setName("property1"); + propertyDefinition1.setType("string"); + propertyList.add(propertyDefinition1); + + final PropertyDefinition propertyDefinition2 = new PropertyDefinition(); + propertyDefinition2.setName("property2"); + propertyDefinition2.setType("boolean"); + propertyList.add(propertyDefinition2); + + final PropertyDefinition propertyDefinition3 = new PropertyDefinition(); + propertyDefinition3.setName("property3"); + propertyDefinition3.setType("string"); + propertyList.add(propertyDefinition3); + return propertyList; + } + } |