From 804882648e0c7c4bc8016870017ec43a6156253c Mon Sep 17 00:00:00 2001 From: wsliwka Date: Tue, 17 Sep 2019 14:31:42 +0200 Subject: Disable homing_solution Send Homing_solution=none during macro instantiation Add flag 'FLAG_DISABLE_HOMING' (by default set to true) which defines whether homing_solution should be in request to so or not Issue-ID: VID-576 Signed-off-by: wsliwka Change-Id: I6151151a0256a5bb4e637acf08ae511f4b265dc2 Signed-off-by: wsliwka --- .../org/onap/vid/job/command/MsoRequestBuilder.kt | 32 +++++-- .../model/ServiceInstantiationRequestDetails.java | 13 +++ .../java/org/onap/vid/properties/Features.java | 1 + .../webapp/WEB-INF/conf/dev.features.properties | 1 + .../webapp/WEB-INF/conf/onap.features.properties | 2 +- .../AsyncInstantiationBusinessLogicTest.java | 1 + .../onap/vid/services/MsoRequestBuilderTest.java | 20 ++++- .../payload_jsons/bulk_service_no_homing.json | 99 ++++++++++++++++++++++ 8 files changed, 155 insertions(+), 14 deletions(-) create mode 100644 vid-app-common/src/test/resources/payload_jsons/bulk_service_no_homing.json diff --git a/vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt b/vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt index c8502b1e5..b35deb892 100644 --- a/vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt +++ b/vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt @@ -13,6 +13,7 @@ import org.onap.vid.mso.model.* import org.onap.vid.mso.model.BaseResourceInstantiationRequestDetails.* import org.onap.vid.mso.model.VfModuleInstantiationRequestDetails.UserParamMap import org.onap.vid.mso.rest.SubscriberInfo +import org.onap.vid.properties.Features import org.onap.vid.services.AsyncInstantiationBusinessLogic import org.onap.vid.services.CloudOwnerService import org.onap.vid.utils.JACKSON_OBJECT_MAPPER @@ -33,6 +34,7 @@ class MsoRequestBuilder companion object { private val LOGGER = EELFLoggerDelegate.getLogger(MsoRequestBuilder::class.java) private const val VID_SOURCE = "VID" + private const val DISABLED_HOMING_VALUE = "none" } fun generateALaCarteServiceInstantiationRequest(payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String, userId: String): RequestDetailsWrapper { @@ -61,7 +63,8 @@ class MsoRequestBuilder fun generateMacroServiceInstantiationRequest(jobId: UUID?, payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String, userId: String): RequestDetailsWrapper { val serviceInstanceName = generateServiceName(jobId, payload, optimisticUniqueServiceInstanceName) - val serviceInstantiationServiceList = generateServiceInstantiationServicesList(payload, serviceInstanceName, createServiceInstantiationVnfList(jobId, payload)) + val serviceInstantiationServiceList = generateMacroServiceInstantiationRequestParams(payload, serviceInstanceName, jobId) + val requestParameters = ServiceInstantiationRequestDetails.RequestParameters(payload.subscriptionServiceType, false, serviceInstantiationServiceList) @@ -213,9 +216,9 @@ class MsoRequestBuilder } } - val result : MutableMap = instanceParams[0].entries.stream() + val result: MutableMap = instanceParams[0].entries.stream() .filter { entry -> !keysToRemove.contains(entry.key) } - .collect(Collectors.toMap({it.key}, {it.value})) + .collect(Collectors.toMap({ it.key }, { it.value })) return if (result.isEmpty()) emptyList() else listOf(result) } @@ -330,7 +333,7 @@ class MsoRequestBuilder private fun generateCloudConfiguration(lcpCloudRegionId: String?, tenantId: String?): CloudConfiguration { val cloudConfiguration = CloudConfiguration(lcpCloudRegionId, tenantId) - if(lcpCloudRegionId != null){ + if (lcpCloudRegionId != null) { cloudOwnerService.enrichCloudConfigurationWithCloudOwner(cloudConfiguration, lcpCloudRegionId) } return cloudConfiguration @@ -342,7 +345,7 @@ class MsoRequestBuilder .collect(Collectors.toList()) } - private fun generateRequestInfo(instanceName: String?, resourceType: ResourceType?, rollbackOnFailure: Boolean?, productFamilyId: String?, userId: String) : BaseResourceInstantiationRequestDetails.RequestInfo { + private fun generateRequestInfo(instanceName: String?, resourceType: ResourceType?, rollbackOnFailure: Boolean?, productFamilyId: String?, userId: String): BaseResourceInstantiationRequestDetails.RequestInfo { return BaseResourceInstantiationRequestDetails.RequestInfo( if (resourceType == null) null else getUniqueNameIfNeeded(instanceName, resourceType, false), productFamilyId, @@ -386,10 +389,7 @@ class MsoRequestBuilder } private fun generateUserParamsNameAndValue(instanceParams: List>): List { - if (instanceParams == null){ - return emptyList() - } - return instanceParams.getOrElse(0, {emptyMap()}).map{x-> ServiceInstantiationRequestDetails.UserParamNameAndValue(x.key, x.value)} + return instanceParams.getOrElse(0) {emptyMap()}.map{ x-> ServiceInstantiationRequestDetails.UserParamNameAndValue(x.key, x.value)} } private fun generateSubscriberInfoPre1806(payload: ServiceInstantiation): SubscriberInfo { @@ -408,4 +408,18 @@ class MsoRequestBuilder listOf(vpn, network).map { RelatedInstance(it.modelInfo, it.instanceId, it.instanceName) } } } + + private fun generateMacroServiceInstantiationRequestParams(payload: ServiceInstantiation, serviceInstanceName: String?, jobId: UUID?): List { + val userParams = generateServiceInstantiationServicesList(payload, serviceInstanceName, createServiceInstantiationVnfList(jobId, payload)) + + return userParams.plus(homingSolution()) + } + + private fun homingSolution(): List { + return if (featureManager.isActive(Features.FLAG_DISABLE_HOMING)) { + listOf(ServiceInstantiationRequestDetails.HomingSolution(DISABLED_HOMING_VALUE)) + } else { + listOf() + } + } } diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/model/ServiceInstantiationRequestDetails.java b/vid-app-common/src/main/java/org/onap/vid/mso/model/ServiceInstantiationRequestDetails.java index 8f8dd681a..e610d6c40 100644 --- a/vid-app-common/src/main/java/org/onap/vid/mso/model/ServiceInstantiationRequestDetails.java +++ b/vid-app-common/src/main/java/org/onap/vid/mso/model/ServiceInstantiationRequestDetails.java @@ -136,6 +136,19 @@ public class ServiceInstantiationRequestDetails { } } + public static class HomingSolution implements UserParamTypes { + private final String homingSolution; + + public HomingSolution(String homingSolution) { + this.homingSolution = homingSolution; + } + + @JsonProperty("Homing_Solution") + public String getHomingSolution() { + return homingSolution; + } + } + public static class ServiceInstantiationService implements UserParamTypes { private final ServiceInstantiationServiceInner serviceInstantiationServiceInner; diff --git a/vid-app-common/src/main/java/org/onap/vid/properties/Features.java b/vid-app-common/src/main/java/org/onap/vid/properties/Features.java index 9abf68bca..00d8424d1 100644 --- a/vid-app-common/src/main/java/org/onap/vid/properties/Features.java +++ b/vid-app-common/src/main/java/org/onap/vid/properties/Features.java @@ -74,6 +74,7 @@ public enum Features implements Feature { FLAG_PNP_INSTANTIATION, FLAG_HANDLE_SO_WORKFLOWS, FLAG_CREATE_ERROR_REPORTS, + FLAG_DISABLE_HOMING, FLAG_FLASH_REDUCED_RESPONSE_CHANGEMG, FLAG_FLASH_MORE_ACTIONS_BUTTON_IN_OLD_VIEW_EDIT, FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH, diff --git a/vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties b/vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties index 8438172e3..ff542d012 100644 --- a/vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties +++ b/vid-app-common/src/main/webapp/WEB-INF/conf/dev.features.properties @@ -32,5 +32,6 @@ FLAG_1810_AAI_LOCAL_CACHE = true FLAG_1902_NEW_VIEW_EDIT= false FLAG_EXP_USE_DEFAULT_HOST_NAME_VERIFIER = false FLAG_1902_VNF_GROUPING = true +FLAG_DISABLE_HOMING = true FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH=false FLAG_FLASH_REDUCED_RESPONSE_CHANGEMG = false diff --git a/vid-app-common/src/main/webapp/WEB-INF/conf/onap.features.properties b/vid-app-common/src/main/webapp/WEB-INF/conf/onap.features.properties index adff1112e..d1ce91f44 100644 --- a/vid-app-common/src/main/webapp/WEB-INF/conf/onap.features.properties +++ b/vid-app-common/src/main/webapp/WEB-INF/conf/onap.features.properties @@ -35,4 +35,4 @@ FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI = false FLAG_SUPPLEMENTARY_FILE = false FLAG_1902_NEW_VIEW_EDIT=false FLAG_1902_VNF_GROUPING = false - +FLAG_DISABLE_HOMING = true diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java index 2b4f4be62..ce0aa42f2 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java @@ -190,6 +190,7 @@ public class AsyncInstantiationBusinessLogicTest extends AsyncInstantiationBaseT @BeforeClass void initServicesInfoService() { MockitoAnnotations.initMocks(this); + doReturn(false).when(featureManager).isActive(Features.FLAG_DISABLE_HOMING); AsyncInstantiationRepository realAsyncInstantiationRepository = new AsyncInstantiationRepository(dataAccessService); asyncInstantiationRepository = spy(realAsyncInstantiationRepository); diff --git a/vid-app-common/src/test/java/org/onap/vid/services/MsoRequestBuilderTest.java b/vid-app-common/src/test/java/org/onap/vid/services/MsoRequestBuilderTest.java index bd761f275..2c70b3ddc 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/MsoRequestBuilderTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/MsoRequestBuilderTest.java @@ -26,6 +26,7 @@ import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -85,6 +86,7 @@ import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import org.togglz.core.manager.FeatureManager; @ContextConfiguration(classes = {DataSourceConfig.class, SystemProperties.class, MockedAaiClientAndFeatureManagerConfig.class}) public class MsoRequestBuilderTest extends AsyncInstantiationBaseTest { @@ -138,22 +140,32 @@ public class MsoRequestBuilderTest extends AsyncInstantiationBaseTest { @Test public void createServiceInfo_WithUserProvidedNamingFalse_ServiceInfoIsAsExpected() throws IOException { - createMacroServiceInfo_WithUserProvidedNamingFalse_ServiceInfoIsAsExpected(true); + createMacroServiceInfo_WithUserProvidedNamingFalse_ServiceInfoIsAsExpected(true, + false); } @Test public void createServiceInfo_WithUserProvidedNamingFalseAndNoVfmodules_ServiceInfoIsAsExpected() throws IOException { - createMacroServiceInfo_WithUserProvidedNamingFalse_ServiceInfoIsAsExpected(false); + createMacroServiceInfo_WithUserProvidedNamingFalse_ServiceInfoIsAsExpected(false, false); } - private void createMacroServiceInfo_WithUserProvidedNamingFalse_ServiceInfoIsAsExpected(boolean withVfmodules) throws IOException { + @Test + public void shouldCreateServiceInfoWithHomingSolutionDisabled() throws IOException { + doReturn(true).when(featureManager).isActive(Features.FLAG_DISABLE_HOMING); + + createMacroServiceInfo_WithUserProvidedNamingFalse_ServiceInfoIsAsExpected(true, true); + } + + private void createMacroServiceInfo_WithUserProvidedNamingFalse_ServiceInfoIsAsExpected(boolean withVfmodules, boolean disabledHoming) throws IOException { ServiceInstantiation serviceInstantiationPayload = generateMockMacroServiceInstantiationPayload(true, createVnfList(vfModuleInstanceParamsMapWithParamsToRemove, Collections.EMPTY_LIST, false), 1, false, PROJECT_NAME, true); URL resource; - if (withVfmodules) { + if (disabledHoming) { + resource = this.getClass().getResource("/payload_jsons/bulk_service_no_homing.json"); + } else if (withVfmodules) { resource = this.getClass().getResource("/payload_jsons/bulk_service_request_ecomp_naming.json"); } else { // remove the vf modules diff --git a/vid-app-common/src/test/resources/payload_jsons/bulk_service_no_homing.json b/vid-app-common/src/test/resources/payload_jsons/bulk_service_no_homing.json new file mode 100644 index 000000000..f61280024 --- /dev/null +++ b/vid-app-common/src/test/resources/payload_jsons/bulk_service_no_homing.json @@ -0,0 +1,99 @@ +{ + "requestDetails": { + "modelInfo": { + "modelType": "service", + "modelInvariantId": "5d48acb5-097d-4982-aeb2-f4a3bd87d31b", + "modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a", + "modelName": "MOW AVPN vMX BV vPE 1 Service", + "modelVersion": "10.0" + }, + "owningEntity": { + "owningEntityId": "038d99af-0427-42c2-9d15-971b99b9b489", + "owningEntityName": "JULIO ERICKSON" + }, + "project": { + "projectName": "{some project name}" + }, + "subscriberInfo": { + "globalSubscriberId": "{some subscriber id}" + }, + "requestInfo": { + "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "source": "VID", + "suppressRollback": false, + "requestorId": "az2016" + }, + "requestParameters": { + "subscriptionServiceType": "VMX", + "aLaCarte": false, + "userParams": [{ + "service": { + "modelInfo": { + "modelType": "service", + "modelName": "MOW AVPN vMX BV vPE 1 Service", + "modelVersionId": "3c40d244-808e-42ca-b09a-256d83d19d0a" + }, + "instanceParams": [{ + "instanceParams_test1": "some text", + "instanceParams_test2": "another text" + }], + "resources": { + "vnfs": [{ + "modelInfo": { + "modelType": "vnf", + "modelName": "2016-73_MOW-AVPN-vPE-BV-L", + "modelVersionId": "7f40c192-f63c-463e-ba94-286933b895f8", + "modelCustomizationName": "2016-73_MOW-AVPN-vPE-BV-L 0", + "modelCustomizationId": "ab153b6e-c364-44c0-bef6-1f2982117f04" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "mdt1", + "cloudOwner": "irma-aic", + "tenantId": "88a6ca3ee0394ade9403f075db23167e" + }, + "platform": { + "platformName": "platformName" + }, + "lineOfBusiness": { + "lineOfBusinessName": "lineOfBusinessName" + }, + "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "instanceParams": [{ + "vmx_int_net_len": "24", + "availability_zone_0": "mtpocdv-kvm-az01", + "vre_a_volume_size_0": "100" + }], + "vfModules": [{ + "modelInfo": { + "modelCustomizationName" : "201673MowAvpnVpeBvL..AVPN_base_vPE_BV..module-0", + "modelType": "vfModule", + "modelName": "201673MowAvpnVpeBvL..AVPN_base_vPE_BV..module-0", + "modelVersionId": "4c75f813-fa91-45a4-89d0-790ff5f1ae79", + "modelCustomizationId": "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f" + }, + "instanceParams": [{ + "vmx_int_net_len": "24" + }] + }, + { + "modelInfo": { + "modelCustomizationName" : "201673MowAvpnVpeBvL..AVPN_vRE_BV..module-1", + "modelType": "vfModule", + "modelName": "201673MowAvpnVpeBvL..AVPN_vRE_BV..module-1", + "modelVersionId": "56e2b103-637c-4d1a-adc8-3a7f4a6c3240", + "modelCustomizationId": "72d9d1cd-f46d-447a-abdb-451d6fb05fa8" + }, + "instanceParams": [{ + "availability_zone_0": "mtpocdv-kvm-az01", + "vre_a_volume_size_0": "100" + }] + }] + }] + } + } + }, + {"Homing_Solution": "none"} + ] + } + } +} \ No newline at end of file -- cgit 1.2.3-korg