From e1f7974f0badbd4440d5b7ea5f1b1cb2d4973818 Mon Sep 17 00:00:00 2001 From: Einat Vinouze Date: Tue, 27 Aug 2019 16:01:01 +0300 Subject: Adding feature: Replace vfmodule Issue-ID: VID-603 Change-Id: I59068a0979d6fb733e4243c8f78921f396dc9d17 Signed-off-by: Einat Vinouze Signed-off-by: Amichai Hemli Signed-off-by: Ittay Stern --- .../test/java/org/onap/vid/aai/AaiClientTest.java | 47 ------ .../impl/AsyncInstantiationIntegrationTest.java | 161 ++++++++++++++++----- .../vid/services/AsyncInstantiationBaseTest.java | 2 +- .../onap/vid/services/MsoRequestBuilderTest.java | 10 +- 4 files changed, 131 insertions(+), 89 deletions(-) (limited to 'vid-app-common/src/test/java/org/onap') diff --git a/vid-app-common/src/test/java/org/onap/vid/aai/AaiClientTest.java b/vid-app-common/src/test/java/org/onap/vid/aai/AaiClientTest.java index 5c37bb1ee..777729c03 100644 --- a/vid-app-common/src/test/java/org/onap/vid/aai/AaiClientTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/aai/AaiClientTest.java @@ -56,7 +56,6 @@ import java.net.URI; import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.Map; -import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.Function; import java.util.stream.Stream; @@ -756,51 +755,6 @@ public class AaiClientTest { }; } - @Test - public void testGetLatestVersionByInvariantId() throws IOException { - - ModelVersions modelVersions = JACKSON_OBJECT_MAPPER.readValue("" + - "{\n" + - " \"results\": [\n" + - " {\n" + - " \"model\": {\n" + - " \"model-invariant-id\": \"f6342be5-d66b-4d03-a1aa-c82c3094c4ea\",\n" + - " \"model-type\": \"service\",\n" + - " \"resource-version\": \"1534274421300\"\n" + - " }\n" + - " },\n" + - " {\n" + - " \"model-ver\": {\n" + - " \"model-version-id\": \"a92f899d-a3ec-465b-baed-1663b0a5aee1\",\n" + - " \"model-name\": \"NCM_VLAN_SVC_ym161f\",\n" + - " \"model-version\": \"bbb\",\n" + - " \"distribution-status\": \"DISTRIBUTION_COMPLETE_OK\",\n" + - " \"model-description\": \"Network Collection service for vLAN tagging\",\n" + - " \"resource-version\": \"1534788756086\"\n" + - " }\n" + - " },\n" + - " {\n" + - " \"model-ver\": {\n" + - " \"model-version-id\": \"d2fda667-e92e-4cfa-9620-5da5de01a319\",\n" + - " \"model-name\": \"NCM_VLAN_SVC_ym161f\",\n" + - " \"model-version\": \"aaa\",\n" + - " \"distribution-status\": \"DISTRIBUTION_COMPLETE_OK\",\n" + - " \"model-description\": \"Network Collection service for vLAN tagging\",\n" + - " \"resource-version\": \"1534444087221\"\n" + - " }\n" + - " }]}", ModelVersions.class); - - - final AaiClient aaiClient = new AaiClient(null, null, null); - - assertThat(aaiClient.toModelVerStream(modelVersions).collect(toList()), - containsInAnyOrder( - hasProperty("modelVersionId", is("a92f899d-a3ec-465b-baed-1663b0a5aee1")), - hasProperty("modelVersionId", is("d2fda667-e92e-4cfa-9620-5da5de01a319")) - )); - - } - @DataProvider public static Object[][] versionsDataProvider() { return new Object[][] { @@ -984,5 +938,4 @@ public class AaiClientTest { )); } - } diff --git a/vid-app-common/src/test/java/org/onap/vid/job/impl/AsyncInstantiationIntegrationTest.java b/vid-app-common/src/test/java/org/onap/vid/job/impl/AsyncInstantiationIntegrationTest.java index 498708d06..fdc416a3b 100644 --- a/vid-app-common/src/test/java/org/onap/vid/job/impl/AsyncInstantiationIntegrationTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/job/impl/AsyncInstantiationIntegrationTest.java @@ -20,9 +20,66 @@ package org.onap.vid.job.impl; +import static java.util.stream.Collectors.counting; +import static java.util.stream.Collectors.groupingBy; +import static java.util.stream.Collectors.joining; +import static net.javacrumbs.jsonunit.JsonAssert.assertJsonEquals; +import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals; +import static net.javacrumbs.jsonunit.JsonMatchers.jsonPartEquals; +import static net.javacrumbs.jsonunit.JsonMatchers.jsonPartMatches; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.core.Every.everyItem; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.endsWith; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.onap.vid.job.Job.JobStatus.COMPLETED; +import static org.onap.vid.job.Job.JobStatus.COMPLETED_WITH_ERRORS; +import static org.onap.vid.job.Job.JobStatus.COMPLETED_WITH_NO_ACTION; +import static org.onap.vid.job.Job.JobStatus.FAILED; +import static org.onap.vid.job.Job.JobStatus.IN_PROGRESS; +import static org.onap.vid.job.Job.JobStatus.PAUSE; +import static org.onap.vid.job.Job.JobStatus.PENDING; +import static org.onap.vid.job.Job.JobStatus.PENDING_RESOURCE; +import static org.onap.vid.job.Job.JobStatus.RESOURCE_IN_PROGRESS; +import static org.onap.vid.job.Job.JobStatus.STOPPED; +import static org.onap.vid.job.impl.JobSchedulerInitializer.WORKERS_TOPICS; +import static org.onap.vid.model.JobAuditStatus.SourceStatus.VID; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertTrue; + import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Stack; +import java.util.UUID; +import java.util.function.BiConsumer; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; +import javax.inject.Inject; +import javax.ws.rs.ProcessingException; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.mutable.MutableInt; import org.jetbrains.annotations.NotNull; @@ -33,13 +90,24 @@ import org.onap.portalsdk.core.service.DataAccessService; import org.onap.portalsdk.core.util.SystemProperties; import org.onap.vid.asdc.AsdcCatalogException; import org.onap.vid.changeManagement.RequestDetailsWrapper; +import org.onap.vid.config.DataSourceConfig; +import org.onap.vid.config.JobCommandsConfigWithMockedMso; +import org.onap.vid.config.MockedAaiClientAndFeatureManagerConfig; import org.onap.vid.job.Job; import org.onap.vid.job.Job.JobStatus; import org.onap.vid.job.JobType; import org.onap.vid.job.JobsBrokerService; import org.onap.vid.job.command.CommandUtils; import org.onap.vid.job.command.InternalState; -import org.onap.vid.model.*; +import org.onap.vid.model.Action; +import org.onap.vid.model.JobAuditStatus; +import org.onap.vid.model.NameCounter; +import org.onap.vid.model.RequestReferencesContainer; +import org.onap.vid.model.Service; +import org.onap.vid.model.ServiceInfo; +import org.onap.vid.model.ServiceModel; +import org.onap.vid.model.VNF; +import org.onap.vid.model.VfModule; import org.onap.vid.model.serviceInstantiation.BaseResource; import org.onap.vid.model.serviceInstantiation.InstanceGroup; import org.onap.vid.model.serviceInstantiation.ServiceInstantiation; @@ -49,15 +117,12 @@ import org.onap.vid.mso.model.RequestReferences; import org.onap.vid.mso.rest.AsyncRequestStatus; import org.onap.vid.mso.rest.AsyncRequestStatusList; import org.onap.vid.properties.Features; +import org.onap.vid.services.AsyncInstantiationBaseTest; import org.onap.vid.services.AsyncInstantiationBusinessLogic; import org.onap.vid.services.AuditService; import org.onap.vid.services.VersionService; -import org.onap.vid.utils.DaoUtils; -import org.onap.vid.config.DataSourceConfig; -import org.onap.vid.config.JobCommandsConfigWithMockedMso; -import org.onap.vid.config.MockedAaiClientAndFeatureManagerConfig; -import org.onap.vid.services.AsyncInstantiationBaseTest; import org.onap.vid.testUtils.TestUtils; +import org.onap.vid.utils.DaoUtils; import org.springframework.http.HttpMethod; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.BeforeClass; @@ -66,34 +131,6 @@ import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import org.togglz.core.manager.FeatureManager; -import javax.inject.Inject; -import javax.ws.rs.ProcessingException; -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.*; -import java.util.function.BiConsumer; -import java.util.function.Supplier; -import java.util.stream.Collectors; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -import static java.util.stream.Collectors.*; -import static net.javacrumbs.jsonunit.JsonAssert.assertJsonEquals; -import static net.javacrumbs.jsonunit.JsonMatchers.*; -import static org.hamcrest.CoreMatchers.*; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.core.Every.everyItem; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.endsWith; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; -import static org.onap.vid.job.Job.JobStatus.*; -import static org.onap.vid.job.impl.JobSchedulerInitializer.WORKERS_TOPICS; -import static org.onap.vid.model.JobAuditStatus.SourceStatus.VID; -import static org.testng.AssertJUnit.*; - //it's more like integration test than UT //But it's very hard to test in API test so I use UT @ContextConfiguration(classes = {DataSourceConfig.class, SystemProperties.class, MockedAaiClientAndFeatureManagerConfig.class, JobCommandsConfigWithMockedMso.class}) @@ -1203,12 +1240,18 @@ public class AsyncInstantiationIntegrationTest extends AsyncInstantiationBaseTes } @Test - public void whenUpgradingAvfModule_thanExpectedReplaceRequestSent() throws IOException { - String instanceId = "5d49c3b1-fc90-4762-8c98-e800170baa55"; //from feRequestResumeMacroService.json + public void whenUpgradingAvfModule_thanExpectedReplaceRequestSent() throws IOException, AsdcCatalogException { + String instanceId = "5d49c3b1-fc90-4762-8c98-e800170baa55"; //from replace_vfmodule_fe_input.json String replaceRequestId = randomUuid(); String userId = "az2016"; + //prepare mocks for newest model + String newestModelUuid = "newest-model-uuid"; + when(commandUtils.getNewestModelUuid(eq("b16a9398-ffa3-4041-b78c-2956b8ad9c7b"))).thenReturn(newestModelUuid); + + when(commandUtils.getServiceModel(eq(newestModelUuid))).thenReturn(generateMockLatestModelForUpgrade()); + //prepare mocks resume request when(restMso.restCall(eq(HttpMethod.POST), eq(RequestReferencesContainer.class), any(), eq("/serviceInstantiation/v7/serviceInstances/e9993045-cc96-4f3f-bf9a-71b2a400a956/vnfs/5c9c2896-1fe6-4055-b7ec-d0a01e5f9bf5/vfModules/5d49c3b1-fc90-4762-8c98-e800170baa55/replace"), eq(Optional.of(userId)))) .thenReturn(createResponse(202, instanceId, replaceRequestId)); @@ -1235,7 +1278,53 @@ public class AsyncInstantiationIntegrationTest extends AsyncInstantiationBaseTes requestCaptor.getAllValues().forEach(x->assertJsonEquals(expectedJson, x)); } + private ServiceModel generateMockLatestModelForUpgrade() { + ServiceModel expectedNewestModel = new ServiceModel(); + + + VfModule vfm = new VfModule(); + vfm.setModelCustomizationName("newest-model-customization-name-vfm"); + vfm.setCustomizationUuid("newest-model-customization-uuid-vfm"); + vfm.setVersion("newest-model-version-vfm"); + vfm.setUuid("newest-model-uuid-vfm"); + vfm.setName("newest-model-name-vfm"); + vfm.setInvariantUuid("f7a867f2-596b-4f4a-a128-421e825a6190"); + + + Map vfms = new HashMap<>(); + vfms.put("074c64d0-7e13-4bcc-8bdb-ea922331102d", vfm); + + + VNF vnf = new VNF(); + vnf.setModelCustomizationName("newest-model-customization-name-vnf"); + vnf.setCustomizationUuid("newest-model-customization-uuid-vnf"); + vnf.setVersion("newest-model-version-vnf"); + vnf.setUuid("newest-model-uuid-vnf"); + vnf.setName("newest-model-name-vnf"); + vnf.setInvariantUuid("23122c9b-dd7f-483f-bf0a-e069303db2f7"); + vnf.setVfModules(vfms); + expectedNewestModel.setVfModules(vfms); + + Map vnfs = new HashMap<>(); + vnfs.put("96c23a4a-6887-4b2c-9cce-1e4ea35eaade", vnf); + + Service svc = new Service(); + svc.setInvariantUuid("b16a9398-ffa3-4041-b78c-2956b8ad9c7b"); + svc.setUuid("newest-model-uuid-service"); + svc.setVersion("newest-model-version-service"); + svc.setName("newest-model-name-service"); + + expectedNewestModel.setService(svc); + + expectedNewestModel.setVnfs(vnfs); + + return expectedNewestModel; + + + } + private ServiceInstantiation generateReplaceVfModulePayload() throws IOException { return TestUtils.readJsonResourceFileAsObject("/payload_jsons/vfmodule/replace_vfmodule_fe_input.json", ServiceInstantiation.class); } + } 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 69458aa86..9cc97116b 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 @@ -183,7 +183,7 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests } protected VfModule createVfModuleForReplace(ModelInfo vfModuleModelInfo, String instanceName, String lcpCloudRegionId, String tenantId) { - return new VfModule( vfModuleModelInfo, instanceName, null, Action.Replace.name(), lcpCloudRegionId, null, tenantId, + return new VfModule( vfModuleModelInfo, instanceName, null, Action.Upgrade.name(), lcpCloudRegionId, null, tenantId, null, null, true, null, null, UUID.randomUUID().toString(), null, null); } 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 311eb04cc..bd761f275 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 @@ -603,18 +603,18 @@ public class MsoRequestBuilderTest extends AsyncInstantiationBaseTest { when(featureManager.isActive(Features.FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST)).thenReturn(true); when(aaiClient.getCloudOwnerByCloudRegionId("regionOne")).thenReturn("irma-aic"); - ModelInfo vfModuleModelInfo = createVfModuleModelInfo("VfZrdm5bpxmc02092017Vf..CORNELIUS_base..module-0", "1", "eb5de6fb-9ecf-4009-b922-fae3a9ae7d46", - "f7a867f2-596b-4f4a-a128-421e825a6190", "074c64d0-7e13-4bcc-8bdb-ea922331102d",null ); + ModelInfo vfModuleModelInfo = createVfModuleModelInfo("newest-model-name-vfm", "newest-model-version-vfm", "newest-model-uuid-vfm", + "f7a867f2-596b-4f4a-a128-421e825a6190", "newest-model-customization-uuid-vfm","newest-model-customization-name-vfm" ); VfModule vfModuleDetails = createVfModuleForReplace(vfModuleModelInfo, "replace_module", "regionOne", "0422ffb57ba042c0800a29dc85ca70f8"); - ModelInfo serviceModelInfo = createServiceModelInfo("Vf zolson5bpxmc02092017-Service", "1", "bad955c3-29b2-4a27-932e-28e942cc6480", "b16a9398-ffa3-4041-b78c-2956b8ad9c7b", null, null ); + ModelInfo serviceModelInfo = createServiceModelInfo("newest-model-name-service", "newest-model-version-service", "newest-model-uuid-service", "b16a9398-ffa3-4041-b78c-2956b8ad9c7b", null, null ); - ModelInfo vnfModelInfo = createVnfModelInfo("Vf zolson5bpxmc02092017-VF", "1", "d326f424-2312-4dd6-b7fe-364fadbd1ef5", "23122c9b-dd7f-483f-bf0a-e069303db2f7", "96c23a4a-6887-4b2c-9cce-1e4ea35eaade", "Vf zolson5bpxmc02092017-VF 0" ); + ModelInfo vnfModelInfo = createVnfModelInfo("newest-model-name-vnf", "newest-model-version-vnf", "newest-model-uuid-vnf", "23122c9b-dd7f-483f-bf0a-e069303db2f7", "newest-model-customization-uuid-vnf", "newest-model-customization-name-vnf" ); RequestDetailsWrapper result = msoRequestBuilder.generateVfModuleInstantiationRequest(vfModuleDetails, serviceModelInfo, "e9993045-cc96-4f3f-bf9a-71b2a400a956", vnfModelInfo, "5c9c2896-1fe6-4055-b7ec-d0a01e5f9bf5", null,"az2016", "GR_API"); - MsoOperationalEnvironmentTest.assertThatExpectationIsLikeObject(expected, result); + assertThat(result, jsonEquals(expected).when(IGNORING_ARRAY_ORDER)); } } \ No newline at end of file -- cgit 1.2.3-korg