From 6ad41e3ccd398a2721f41ad61c80b7bb03f7d127 Mon Sep 17 00:00:00 2001 From: Ittay Stern Date: Mon, 31 Dec 2018 17:21:27 +0200 Subject: Merge from ECOMP's repository Main Features -------------- - Async-Instantiation jobs mechanism major update; still WIP (package `org.onap.vid.job`) - New features in View/Edit: Activate fabric configuration; show related networks; soft delete - Support AAI service-tree traversal (`AAIServiceTree`) - In-memory cache for SDC models and certain A&AI queries (`CacheProviderWithLoadingCache`) - Upgrade TOSCA Parser and add parsing options; fix malformed TOSCA models - Resolve Cloud-Owner values for MSO - Pass X-ONAP headers to MSO Infrastructure -------------- - Remove codehaus' jackson mapper; use soley fasterxml 2.9.7 - Surefire invokes both TestNG and JUnit tests - Support Kotlin source files - AaiController2 which handles errors in a "Spring manner" - Inline generated-sources and remove jsonschema2pojo Quality -------- - Cumulative bug fixes (A&AI API, UI timeouts, and many more) - Many Sonar issues cleaned-up - Some unused classes removed - Minor changes in vid-automation project, allowing some API verification to run Hard Merges ------------ - HTTP Clients (MSO, A&AI, WebConfig, OutgoingRequestHeadersTest) - Moved `package org.onap.vid.controllers` to `controller`, without plural -- just to keep semantic sync with ECOMP. Reference commit in ECOMP: 3d1141625 Issue-ID: VID-378 Change-Id: I9c8d1e74caa41815891d441fc0760bb5f29c5788 Signed-off-by: Ittay Stern --- .../vid/services/AsyncInstantiationBaseTest.java | 220 ++++++++++++++------- 1 file changed, 148 insertions(+), 72 deletions(-) (limited to 'vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java') diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java index 5ead3fce4..ed8d91fe6 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java @@ -1,52 +1,25 @@ -/*- - * ============LICENSE_START======================================================= - * VID - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * Modifications Copyright (C) 2018 Nokia. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - package org.onap.vid.services; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import io.joshworks.restclient.http.HttpResponse; -import jersey.repackaged.com.google.common.collect.ImmutableList; -import org.apache.http.HttpStatus; -import org.apache.http.HttpVersion; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.DefaultHttpResponseFactory; -import org.apache.http.message.BasicStatusLine; -import org.onap.vid.aai.AaiOverTLSClientInterface; -import org.onap.vid.aai.AaiResponse; -import org.onap.vid.aai.model.AaiNodeQueryResponse; -import org.onap.vid.aai.model.ResourceType; -import org.onap.vid.domain.mso.ModelInfo; -import org.onap.vid.domain.mso.RequestStatus; -import org.onap.vid.model.serviceInstantiation.ServiceInstantiation; -import org.onap.vid.model.serviceInstantiation.VfModule; -import org.onap.vid.model.serviceInstantiation.Vnf; +import org.onap.vid.aai.AaiClientInterface; +import org.onap.vid.aai.ExceptionWithRequestInfo; +import org.onap.vid.model.Action; +import org.onap.vid.model.serviceInstantiation.*; import org.onap.vid.mso.RestObject; +import org.onap.vid.mso.model.ModelInfo; import org.onap.vid.mso.rest.AsyncRequestStatus; +import org.onap.vid.mso.rest.RequestStatus; +import org.onap.vid.utils.TimeUtils; +import org.springframework.http.HttpMethod; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.togglz.core.manager.FeatureManager; import javax.inject.Inject; -import java.io.UnsupportedEncodingException; +import java.time.ZonedDateTime; import java.util.*; +import static java.util.Collections.emptyMap; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; @@ -65,6 +38,14 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests public static final String TENANT_NAME = "USP-SIP-IC-24335-T-01"; public static final String AIC_ZONE_ID = "NFT1"; public static final String AIC_ZONE_NAME = "NFTJSSSS-NFT1"; + public static final String TEST_API = "GR_API"; + public static final String SERVICE_MODEL_VERSION_ID = "3c40d244-808e-42ca-b09a-256d83d19d0a"; + public static final String VF_MODULE_0_MODEL_CUSTOMIZATION_NAME = "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"; + public static final String VF_MODULE_1_MODEL_CUSTOMIZATION_NAME = "72d9d1cd-f46d-447a-abdb-451d6fb05fa8"; + public static final String VF_MODULE_0_MODEL_VERSION_ID = "4c75f813-fa91-45a4-89d0-790ff5f1ae79"; + public static final String VF_MODULE_1_MODEL_VERSION_ID = "56e2b103-637c-4d1a-adc8-3a7f4a6c3240"; + public static final String VNF_NAME = "vmxnjr001"; + public static final String VNF_GROUP_NAME = "VNF_GROUP_NAME"; protected HashMap instanceParamsMapWithoutParams; protected HashMap vfModuleInstanceParamsMapWithParamsToRemove; @@ -74,34 +55,53 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests protected FeatureManager featureManager; @Inject - protected AaiOverTLSClientInterface aaiClient; + protected AaiClientInterface aaiClient; + + @Inject + protected CloudOwnerService cloudOwnerService; + + public ServiceInstantiation generateMockMacroServiceInstantiationPayload(boolean isPause, Map vnfs, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure) { + return generateMockServiceInstantiationPayload(isPause, vnfs, Collections.EMPTY_MAP, Collections.EMPTY_MAP, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, false, null, Action.Create, null); + } - public ServiceInstantiation generateMockServiceInstantiationPayload(boolean isPause, Map vnfs, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure) { + public ServiceInstantiation generateMockALaCarteServiceInstantiationPayload(boolean isPause, Map vnfs, Map networks, Map vnfGroups, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure, String testApi) { + return generateMockServiceInstantiationPayload(isPause, vnfs, networks, vnfGroups, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, true, testApi, Action.Create, null); + } + + public ServiceInstantiation generateMockALaCarteServiceDeletionPayload(boolean isPause, Map vnfs, Map networks, Map vnfGroups, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure, String testApi, String instanceId) { + return generateMockServiceInstantiationPayload(isPause, vnfs, networks, vnfGroups, bulkSize, isUserProvidedNaming, projectName, rollbackOnFailure, true, testApi, Action.Delete, instanceId); + } + private ServiceInstantiation generateMockServiceInstantiationPayload(boolean isPause, Map vnfs, Map networks, Map vnfGroups, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure, boolean isAlacarte, String testApi, Action action, String instanceId) { ModelInfo modelInfo = createModelInfo(); List> instanceParams = createInstanceParams(); - return new ServiceInstantiation ( - modelInfo, + return new ServiceInstantiation ( modelInfo, AsyncInstantiationBusinessLogicTest.OWNING_ENTITY_ID, AsyncInstantiationBusinessLogicTest.PACKET_CORE, projectName, AsyncInstantiationBusinessLogicTest.SUBSCRIBER_ID, AsyncInstantiationBusinessLogicTest.SUBSCRIBER_NAME, AsyncInstantiationBusinessLogicTest.PRODUCT_FAMILY_ID, - isUserProvidedNaming ? AsyncInstantiationBusinessLogicTest.INSTANCE_NAME : "" , - isUserProvidedNaming, + isUserProvidedNaming ? AsyncInstantiationBusinessLogicTest.INSTANCE_NAME : null, AsyncInstantiationBusinessLogicTest.SUBSCRIPTION_SERVICE_TYPE, AsyncInstantiationBusinessLogicTest.LCP_CLOUD_REGION_ID, + null, AsyncInstantiationBusinessLogicTest.A6CA3EE0394ADE9403F075DB23167E, AsyncInstantiationBusinessLogicTest.TENANT_NAME, AsyncInstantiationBusinessLogicTest.AIC_ZONE_ID, AsyncInstantiationBusinessLogicTest.AIC_ZONE_NAME, vnfs, + networks, + vnfGroups, instanceParams, isPause, bulkSize, - rollbackOnFailure + rollbackOnFailure, + isAlacarte, + testApi, + instanceId, + action.name() ); } @@ -114,30 +114,58 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests return instanceParams; } - private VfModule createVfModule(String modelName, String modelVersionId, String modelCustomizationId, - List> instanceParams, String instanceName, String volumeGroupInstanceName) { + protected VfModule createVfModule(String modelName, String modelVersionId, String modelCustomizationId, + List> instanceParams, Map supplementaryParams, String instanceName, String volumeGroupInstanceName, boolean isAlacarte) { ModelInfo vfModuleInfo = new ModelInfo(); vfModuleInfo.setModelType("vfModule"); vfModuleInfo.setModelName(modelName); vfModuleInfo.setModelVersionId(modelVersionId); vfModuleInfo.setModelCustomizationId(modelCustomizationId); - return new VfModule(vfModuleInfo , instanceName, volumeGroupInstanceName, instanceParams); + vfModuleInfo.setModelCustomizationName(modelName); + + if (isAlacarte) { + vfModuleInfo.setModelInvariantId("22222222-f63c-463e-ba94-286933b895f9"); + vfModuleInfo.setModelVersion("10.0"); + return new VfModule(vfModuleInfo, instanceName, volumeGroupInstanceName, Action.Create.name(), "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", instanceParams, supplementaryParams, false, true, null); + } + + return new VfModule(vfModuleInfo, instanceName, volumeGroupInstanceName, Action.Create.name(), null, null, null, instanceParams, supplementaryParams, false, false, null); } - private ModelInfo createVnfModelInfo() { + protected ModelInfo createVnfModelInfo(boolean isAlacarte) { ModelInfo vnfModelInfo = new ModelInfo(); vnfModelInfo.setModelType("vnf"); vnfModelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L"); vnfModelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8"); vnfModelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0"); vnfModelInfo.setModelCustomizationId("ab153b6e-c364-44c0-bef6-1f2982117f04"); + //added two conditional fields according to MSO AID - needed only in alacarte + if (isAlacarte) { + vnfModelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9"); + vnfModelInfo.setModelVersion("10.0"); + } + return vnfModelInfo; + } + + private ModelInfo createNetworkModelInfo(boolean isAlacarte) { + ModelInfo vnfModelInfo = new ModelInfo(); + vnfModelInfo.setModelType("network"); + vnfModelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L"); + vnfModelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8"); + vnfModelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0"); + vnfModelInfo.setModelCustomizationId("ab153b6e-c364-44c0-bef6-1f2982117f04"); + //added two conditional fields according to MSO AID - needed only in alacarte + if (isAlacarte) { + vnfModelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9"); + vnfModelInfo.setModelVersion("10.0"); + } return vnfModelInfo; } private ModelInfo createModelInfo() { ModelInfo modelInfo = new ModelInfo(); modelInfo.setModelType("service"); - modelInfo.setModelVersionId("3c40d244-808e-42ca-b09a-256d83d19d0a"); + modelInfo.setModelVersionId(SERVICE_MODEL_VERSION_ID); modelInfo.setModelVersion("10.0"); modelInfo.setModelInvariantId("5d48acb5-097d-4982-aeb2-f4a3bd87d31b"); modelInfo.setModelName("MOW AVPN vMX BV vPE 1 Service"); @@ -145,29 +173,68 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests } protected Map createVnfList(HashMap vfModuleInstanceParamsMap, List vnfInstanceParams, boolean isUserProvidedNaming) { + return createVnfList(vfModuleInstanceParamsMap, vnfInstanceParams, isUserProvidedNaming, false); + } + + protected Map createVnfList(HashMap vfModuleInstanceParamsMap, List vnfInstanceParams, boolean isUserProvidedNaming, boolean isAlacarte) { Map vnfs = new HashMap<>(); - ModelInfo vnfModelInfo = createVnfModelInfo(); + ModelInfo vnfModelInfo = createVnfModelInfo(isAlacarte); Map> vfModules = new HashMap<>(); - List> instanceParams1 =ImmutableList.of((ImmutableMap.of("vmx_int_net_len", "24"))); - VfModule vfModule1 = createVfModule("201673MowAvpnVpeBvL..AVPN_base_vPE_BV..module-0", "4c75f813-fa91-45a4-89d0-790ff5f1ae79", "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", instanceParams1, "vmxnjr001_AVPN_base_vPE_BV_base", null); + List> instanceParams1 = ImmutableList.of((ImmutableMap.of("vmx_int_net_len", "24"))); + VfModule vfModule1 = createVfModule("201673MowAvpnVpeBvL..AVPN_base_vPE_BV..module-0", VF_MODULE_0_MODEL_VERSION_ID, VF_MODULE_0_MODEL_CUSTOMIZATION_NAME, instanceParams1, new HashMap<>(), (isUserProvidedNaming ? "vmxnjr001_AVPN_base_vPE_BV_base" : null), null, isAlacarte); List> instanceParams2 = ImmutableList.of(vfModuleInstanceParamsMap); - VfModule vfModule2 = createVfModule("201673MowAvpnVpeBvL..AVPN_vRE_BV..module-1", "56e2b103-637c-4d1a-adc8-3a7f4a6c3240", "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", instanceParams2, "vmxnjr001_AVPN_base_vRE_BV_expansion", "myVgName"); + VfModule vfModule2 = createVfModule("201673MowAvpnVpeBvL..AVPN_vRE_BV..module-1", VF_MODULE_1_MODEL_VERSION_ID, VF_MODULE_1_MODEL_CUSTOMIZATION_NAME, instanceParams2, new HashMap<>(), (isUserProvidedNaming ? "vmxnjr001_AVPN_base_vRE_BV_expansion": null), (isUserProvidedNaming ? "myVgName" : null), isAlacarte); String vfModuleModelName = vfModule1.getModelInfo().getModelName(); vfModules.put(vfModuleModelName, new LinkedHashMap<>()); - vfModules.get(vfModuleModelName).put(vfModule1.getInstanceName(),vfModule1); - vfModules.get(vfModuleModelName).put(vfModule2.getInstanceName(), vfModule2); + vfModules.get(vfModuleModelName).put(vfModuleModelName + ":001", vfModule1); + vfModules.get(vfModuleModelName).put(vfModuleModelName + ":002", vfModule2); - Vnf vnf = new Vnf(vnfModelInfo, "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", "vmxnjr001", isUserProvidedNaming, - "platformName", "mdt1", "88a6ca3ee0394ade9403f075db23167e", vnfInstanceParams,"lineOfBusinessName" ,vfModules); + Vnf vnf = new Vnf(vnfModelInfo, "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", (isUserProvidedNaming ? VNF_NAME : null), Action.Create.name(), + "platformName", "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", vnfInstanceParams,"lineOfBusinessName" , false, null, vfModules); - vnfs.put(vnf.getInstanceName(), vnf); + vnfs.put(vnf.getModelInfo().getModelName(), vnf); return vnfs; } + protected Map createNetworkList(List vnfInstanceParams, boolean isUserProvidedNaming, boolean isALaCarte) { + Map networks = new HashMap<>(); + ModelInfo networkModelInfo = createNetworkModelInfo(isALaCarte); + + Network network = new Network(networkModelInfo, "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", isUserProvidedNaming ? VNF_NAME : null, Action.Create.name(), + "platformName", "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", vnfInstanceParams,"lineOfBusinessName" , false, null); + + networks.put(network.getModelInfo().getModelName(), network); + return networks; + } + + protected InstanceGroup createInstanceGroup(boolean isUserProvidedNaming, Action action) { + ModelInfo modelInfo = new ModelInfo(); + modelInfo.setModelType("instanceGroup"); + modelInfo.setModelName("2016-73_MOW-AVPN-vPE-BV-L"); + modelInfo.setModelVersionId("7f40c192-f63c-463e-ba94-286933b895f8"); + modelInfo.setModelCustomizationName("2016-73_MOW-AVPN-vPE-BV-L 0"); + modelInfo.setModelCustomizationId("ab153b6e-c364-44c0-bef6-1f2982117f04"); + modelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9"); + modelInfo.setModelVersion("10.0"); + + return new InstanceGroup(modelInfo, (isUserProvidedNaming ? VNF_GROUP_NAME : null), action.name(), false, null); + } + + protected ModelInfo createServiceModelInfo() { + ModelInfo siModelInfo = new ModelInfo(); + siModelInfo.setModelName("sriov"); + siModelInfo.setModelType("service"); + siModelInfo.setModelInvariantId("ff3514e3-5a33-55df-13ab-12abad84e7ff"); + siModelInfo.setModelVersionId("fe6985cd-ea33-3346-ac12-ab121484a3fe"); + siModelInfo.setModelVersion("1.0"); + + return siModelInfo; + } + protected void createInstanceParamsMaps() { instanceParamsMapWithoutParams = new HashMap<>(); instanceParamsMapWithoutParams.put("availability_zone_0" , "mtpocdv-kvm-az01"); @@ -182,10 +249,11 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests vnfInstanceParamsMapWithParamsToRemove.put(AsyncInstantiationBusinessLogic.PARAMS_TO_IGNORE.get(1), "should be removed"); } - protected AsyncRequestStatus asyncRequestStatusResponse(String msoStatus) { + public static AsyncRequestStatus asyncRequestStatusResponse(String msoStatus) { AsyncRequestStatus asyncRequestStatus = new AsyncRequestStatus(new AsyncRequestStatus.Request(new RequestStatus())); asyncRequestStatus.request.requestStatus.setRequestState(msoStatus); asyncRequestStatus.request.requestId = UUID.randomUUID().toString(); + asyncRequestStatus.request.startTime = TimeUtils.zonedDateTimeToString(ZonedDateTime.now()); return asyncRequestStatus; } @@ -200,23 +268,31 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests return restObject; } - protected void mockAaiClientAnyNameFree() throws UnsupportedEncodingException { - when(aaiClient.searchNodeTypeByName(any(), any())).thenReturn(aaiNodeQueryResponseNameFree()); + protected void mockAaiClientAnyNameFree() { + when(aaiClient.isNodeTypeExistsByName(any(), any())).thenReturn(false); } - protected HttpResponse aaiNodeQueryResponseNameFree() throws UnsupportedEncodingException { - org.apache.http.HttpResponse response = new DefaultHttpResponseFactory().newHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, null), null); - response.setEntity(new StringEntity("")); - - return HttpResponse.fallback(new AaiNodeQueryResponse(null)); + protected ExceptionWithRequestInfo aaiNodeQueryBadResponseException() { + return new ExceptionWithRequestInfo(HttpMethod.GET, "url", "raw data", 500, null); } - protected AaiResponse aaiNodeQueryBadResponse() { - return new AaiResponse<>(null,"", 404); + protected ServiceInstantiation generateALaCarteWithVnfsServiceInstantiationPayload() { + Map vnfs = createVnfList(vfModuleInstanceParamsMapWithParamsToRemove, Collections.singletonList(vnfInstanceParamsMapWithParamsToRemove) , true); + ServiceInstantiation serviceInstantiation = generateMockALaCarteServiceInstantiationPayload(false, vnfs, emptyMap(), emptyMap(), 1, true, PROJECT_NAME, false, "VNF_API"); + return serviceInstantiation; } - protected AaiResponse aaiNodeQueryResponseNameUsed(ResourceType type) { - AaiNodeQueryResponse mockAaiNodeQuery = new AaiNodeQueryResponse(ImmutableList.of(new AaiNodeQueryResponse.ResultData(type, "/some/mocked/link"))); - return new AaiResponse<>(mockAaiNodeQuery,"", 200); + protected ServiceInstantiation generateALaCarteUpdateWith1ExistingGroup2NewGroupsPayload() { + final InstanceGroup instanceGroup1 = createInstanceGroup(true, Action.None); + final InstanceGroup instanceGroup2 = createInstanceGroup(false, Action.Create); + final InstanceGroup instanceGroup3 = createInstanceGroup(true, Action.Create); + Map groups = ImmutableMap.of( + "foo:001", instanceGroup1, + "foo:002", instanceGroup2, + "foo:003", instanceGroup3 + ); + return generateMockServiceInstantiationPayload(false, emptyMap(), emptyMap(), groups, + 1, true, PROJECT_NAME, false, true, "VNF_API", + Action.None, "1234567890"); } } -- cgit 1.2.3-korg