diff options
author | Ittay Stern <ittay.stern@att.com> | 2019-07-08 15:46:44 +0300 |
---|---|---|
committer | Ittay Stern <ittay.stern@att.com> | 2019-07-08 18:50:38 +0300 |
commit | f4dff328c0386c8901b5841943b11f0c13b3169f (patch) | |
tree | 4e64c3ee540410b2593c1ebecd0dddd3a4780592 /vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java | |
parent | f792671ae247a931f34d902e9276202b5016ef9a (diff) |
Merge from ecomp 718fd196 - Integration Tests
Issue-ID: VID-378
Change-Id: Icc0bdb9ef37b1d429d47c2070f76d1ee63ad7489
Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java')
-rw-r--r-- | vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java | 368 |
1 files changed, 0 insertions, 368 deletions
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java deleted file mode 100644 index 5c4d8a876..000000000 --- a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationApiTest.java +++ /dev/null @@ -1,368 +0,0 @@ -package org.onap.vid.api; - -import com.google.common.collect.ImmutableList; -import net.bytebuddy.utility.RandomString; -import net.javacrumbs.jsonunit.JsonAssert; -import org.apache.commons.lang3.StringUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset; -import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId; -import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet; -import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet; -import org.onap.simulator.presetGenerator.presets.mso.*; -import org.onap.vid.model.asyncInstantiation.JobAuditStatus; -import org.onap.vid.model.asyncInstantiation.ServiceInfo; -import org.onap.sdc.ci.tests.datatypes.UserCredentials; -import org.springframework.http.HttpStatus; -import org.springframework.web.client.HttpClientErrorException; -import org.springframework.web.client.HttpServerErrorException; -import org.testng.Assert; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; -import vid.automation.test.infra.FeatureTogglingTest; -import vid.automation.test.infra.Features; -import vid.automation.test.infra.Wait; -import vid.automation.test.model.JobStatus; -import vid.automation.test.services.SimulatorApi; - -import java.util.*; -import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -import static java.util.stream.Collectors.*; -import static org.hamcrest.CoreMatchers.*; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasSize; -import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys; -import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertTrue; -import static vid.automation.test.infra.Features.FLAG_1906_INSTANTIATION_API_USER_VALIDATION; -import static vid.automation.test.utils.ExtendedHamcrestMatcher.hasItemsFromCollection; - -@FeatureTogglingTest({Features.FLAG_ASYNC_JOBS, Features.FLAG_ASYNC_INSTANTIATION}) -public class AsyncInstantiationApiTest extends AsyncInstantiationBase { - private static final Logger logger = LogManager.getLogger(AsyncInstantiationApiTest.class); - - private static final String MSO_BASE_ERROR = - "Received error from SDN-C: java.lang.IllegalArgumentException: All keys must be specified for class org."+ - "opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.vf.module.assignments.vf."+ - "module.assignments.vms.VmKey. Missing key is getVmType. Supplied key is VmKey []."; - private static final String MSO_ERROR = MSO_BASE_ERROR + StringUtils.repeat(" and a lot of sentences for long message", 60); - - private static final String INSTANCE_GROUP_ID_LABEL = "instanceGroupId"; - - private static final String INSTANCE_GROUP_LABEL = "instanceGroup"; - - @Test - public void createBulkOfCreateInstances(){ - Map<Keys, String> names = generateNames(); - final int bulkSize = 3; - ImmutableList<BasePreset> presets = addPresetsForCreateBulkOfCreateInstances(bulkSize, names); - createBulkOfInstancesAndAssert(presets, false, bulkSize, JobStatus.COMPLETED, names); - } - - @Test(dataProvider = "auditSources") - public void getAuditStatus_nonExistingJobId_returnsEmptyList(JobAuditStatus.SourceStatus source){ - List<JobAuditStatus> audits = getAuditStatuses(UUID.randomUUID().toString(), source.name()); - Assert.assertEquals(audits.size(),0); - } - - @Test(expectedExceptions = HttpClientErrorException.class) - public void getAuditStatus_nonExistingSource_returnsError() { - try { - getAuditStatuses(UUID.randomUUID().toString(), new RandomString(8).nextString()); - } catch (HttpClientErrorException e) { - Assert.assertEquals(e.getResponseBodyAsString(),"The parameter source must have a value among : MSO, VID"); - assertThat(e.getStatusCode(), is(HttpStatus.BAD_REQUEST)); - throw e; - } - } - - @Test() - public void simulateBulkRequest_getAuditStatus_auditStatusesReturnedAccordingSource() { - final int bulkSize = 2; - final List<String> jobIds = createBulkAndWaitForBeCompleted(bulkSize); - - for(String jobId: jobIds) { - List<JobAuditStatus> actualVidAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.VID.name()); - List<JobAuditStatus> expectedVidAudits = Stream.of(JobStatus.PENDING, JobStatus.IN_PROGRESS, JobStatus.COMPLETED) - .map(status-> vidAuditStatus(jobId, status.name(), status.equals(JobStatus.COMPLETED))).collect(toList()); - assertThat(actualVidAudits, hasItemsFromCollection(expectedVidAudits)); - - List<JobAuditStatus> actualMsoAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO.name()); - List<JobAuditStatus> expectedMsoAudits = Stream.of("REQUESTED", "COMPLETE") - .map(status-> new JobAuditStatus(UUID.fromString(jobId), - status, - JobAuditStatus.SourceStatus.MSO, - UUID.fromString("c0011670-0e1a-4b74-945d-8bf5aede1d9c"), - status.equals("COMPLETE") ? "Service Instance was created successfully." : null, - false)).collect(toList()); - assertThat(actualMsoAudits, is(expectedMsoAudits)); - } - } - - - @Test(expectedExceptions = HttpClientErrorException.class) - public void addBulkAndDeleteInProgress_deletionIsRejected(){ - try { - final Map<String, JobStatus> jobs = addBulkAllPendingButOneInProgress(); - deleteOneJobHavingTheStatus(jobs, JobStatus.IN_PROGRESS); - } catch (HttpClientErrorException e) { - JsonAssert.assertJsonPartEquals( - "Service status does not allow deletion from the queue (Request id: null)", - e.getResponseBodyAsString(), - "message" - ); - assertThat(e.getStatusCode(), is(HttpStatus.METHOD_NOT_ALLOWED)); - - throw e; - } - } - - @Test - public void addBulkAndDeletePending_deletedIsHiddenFromServiceInfoResults(){ - Map<String, JobStatus> statusesBefore = addBulkAllPendingButOneInProgress(); - - final String deletedJob = deleteOneJobHavingTheStatus(statusesBefore, JobStatus.PENDING); - - final Map<String, JobStatus> statusesNow = serviceListCall().getBody().stream() - .filter(si -> statusesBefore.keySet().contains(si.jobId)) - .collect(toMap(si -> si.jobId, si -> si.jobStatus)); - - statusesBefore.remove(deletedJob); - assertThat("deleted job shall not be present in StatusInfo response", statusesNow, is(statusesBefore)); - } - - @Test(invocationCount = 3) - public void createBulkOfCreateInstancesWithSinglePreset_firstOneInProgressOtherArePending(){ - final int bulkSize = 3; - Map<String, JobStatus> statusMap = addBulkAllPendingButOneInProgress(bulkSize); - Set<String> jobIds = statusMap.keySet(); - - final Map<JobStatus, List<ServiceInfo>> statuses = serviceListCall().getBody().stream() - .filter(si -> jobIds.contains(si.jobId)) - .collect(groupingBy(ServiceInfo::getJobStatus)); - - // Variable "statuses" contains two lists by status: - // IN_PROGRESS: The ultimate first job - named with _001 - is always the only one in progress - // PENDING: The other two jobs - named with _002 and _003 - are the still pending - assertThat(jobIds, hasSize(bulkSize)); - assertThat(statuses.get(JobStatus.IN_PROGRESS), hasSize(1)); - - assertThat(statuses.get(JobStatus.PENDING), hasSize(bulkSize - 1)); - } - - - @Test(dataProvider = "trueAndFalse" ) - public void whenServiceInBulkFailed_otherServicesAreStopped(Boolean isPresetForCreate){ - Map<Keys, String> names = generateNames(); - final int bulkSize = 3; - - //if there is a preset for create, service shall failed during in_progress (upon get status) - //it there is no preset for create, service shall failed during pending (upon create request) - List<BasePreset> msoBulkPresets = isPresetForCreate ? - generateMsoCreateBulkPresets(bulkSize, names) : - new LinkedList<>(); - ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>() - .add(new PresetGetSessionSlotCheckIntervalGet()) - .add(new PresetAAIGetSubscribersGet()) - .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN3_TO_ATT_SABABA) - .addAll(msoBulkPresets) - .add(new PresetMSOOrchestrationRequestGet("FAILED")) - .build(); - List<String> jobIds = createBulkOfMacroInstances(presets, false, bulkSize, names); - Assert.assertEquals(jobIds.size(),bulkSize); - boolean result = Wait.waitFor(x->{ - List<ServiceInfo> serviceInfoList = serviceListCall().getBody(); - Map<JobStatus, Long> statusCount = serviceInfoList.stream().filter(si->jobIds.contains(si.jobId)).collect(groupingBy(ServiceInfo::getJobStatus, counting())); - return Objects.equals(statusCount.get(JobStatus.FAILED), 1L) && Objects.equals(statusCount.get(JobStatus.STOPPED), 2L); - }, null, 15, 1); - assertTrue(String.format("failed to get jobs [%s] to state of: 1 failed and 2 stopped ", - String.join(",", jobIds)),result); - } - - @Test - public void createBulkOfAssignInstances(){ - Map<Keys, String> names = generateNames(); - final int bulkSize = 2; - ImmutableList<BasePreset> msoBulkPresets = IntStream.rangeClosed(0, bulkSize-1) - .mapToObj(i-> new PresetMSOAssignServiceInstanceGen2WithNames(names, i)) - .collect(ImmutableList.toImmutableList()); - ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>() - .add(new PresetGetSessionSlotCheckIntervalGet()) - .add(new PresetAAIGetSubscribersGet()) - .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN3_TO_ATT_SABABA) - .addAll(msoBulkPresets) - .add(new PresetMSOOrchestrationRequestGet()) - .build(); - createBulkOfInstancesAndAssert(presets, true, bulkSize, JobStatus.COMPLETED, names); - } - - @Test - public void tryToCreateBulkOfAssignInstancesErrorResponseFromMso(){ - ImmutableList<BasePreset> presets = ImmutableList.of( - new PresetGetSessionSlotCheckIntervalGet(), - new PresetAAIGetSubscribersGet(), - new PresetMSOServiceInstanceGen2ErrorResponse(406)); - - List<String> jobIds = createBulkOfInstancesAndAssert(presets, true,1, JobStatus.FAILED, generateNames()); - String jobId = jobIds.get(0); - List<JobAuditStatus> actualMsoAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO.name()); - JobAuditStatus expectedMsoAudit = new JobAuditStatus(UUID.fromString(jobId), "FAILED", JobAuditStatus.SourceStatus.MSO, - null, - "Http Code:406, \"messageId\":\"SVC0002\",\"text\":\"JSON Object Mapping Request\"" , - false); - assertThat(actualMsoAudits.get(0), is(expectedMsoAudit)); - } - - @Test - public void whenGetLongErrorMessageFromMso_ThenAuditFirst2000Chars() { - Map<Keys, String> names = generateNames(); - ImmutableList<BasePreset> presets = ImmutableList.of( - new PresetGetSessionSlotCheckIntervalGet(), - new PresetAAIGetSubscribersGet(), - new PresetMSOCreateServiceInstanceGen2WithNames(names, 0), - new PresetMSOOrchestrationRequestGet("FAILED", PresetMSOOrchestrationRequestGet.DEFAULT_REQUEST_ID, MSO_ERROR)); - - List<String> jobIds = createBulkOfInstancesAndAssert(presets, false, 1, JobStatus.FAILED, names); - String jobId = jobIds.get(0); - List<JobAuditStatus> actualMsoAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO.name()); - Optional<JobAuditStatus> jobAuditStatus = actualMsoAudits.stream().filter(x -> x.getJobStatus().equals("FAILED")).findFirst(); - assertTrue(jobAuditStatus.isPresent()); - assertThat(jobAuditStatus.get().getAdditionalInfo(), startsWith(MSO_BASE_ERROR)); - assertThat(jobAuditStatus.get().getAdditionalInfo().length(), is(2000)); - } - - @Test - public void whenHideCompletedService_thenServiceNotReturnInServiceList(){ - List<String> services = createBulkAndWaitForBeCompleted(2); - hideService(services.get(0)); - List<String> serviceInfoList = serviceListCall().getBody().stream().map(ServiceInfo::getJobId).collect(toList()); - assertThat(serviceInfoList, hasItem(services.get(1))); - assertThat(serviceInfoList, not(hasItem(services.get(0)))); - } - - @Test - public void errorResponseInGetStatusFromMso_getAuditStatusFromMso_errorMsgExistInAdditionalInfo(){ - Map<Keys, String> names = generateNames(); - ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>() - .add(new PresetGetSessionSlotCheckIntervalGet()) - .add(new PresetAAIGetSubscribersGet()) - .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN3_TO_ATT_SABABA) - .add(new PresetMSOAssignServiceInstanceGen2WithNames(names, 0)) - .add(new PresetMSOOrchestrationRequestGetErrorResponse(406)) - .build(); - - final List<String> jobIds = createBulkOfInstancesAndAssert(presets, true,1, JobStatus.IN_PROGRESS, names); - String jobId = jobIds.get(0); - Wait.waitFor(y-> getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO.name()).stream() - .anyMatch(si -> si.getJobStatus().equals("FAILED")), - null, 10, 1 ); - List<JobAuditStatus> actualMsoAudits = getAuditStatuses(jobId, JobAuditStatus.SourceStatus.MSO.name()); - List<JobAuditStatus> expectedMsoAudits = Stream.of("REQUESTED", "FAILED") - .map(status -> new JobAuditStatus(UUID.fromString(jobId), - status, - JobAuditStatus.SourceStatus.MSO, - UUID.fromString("c0011670-0e1a-4b74-945d-8bf5aede1d9c"), - status.equals("FAILED") ? "Http Code:406, \"messageId\":\"SVC0002\",\"text\":\"JSON Object Mapping Request\"" : null, - false)).collect(toList()); - assertThat(actualMsoAudits, is(expectedMsoAudits)); - - } - - @Test - public void inProgressJobMoreThan24HoursIsFailedInVidAudit(){ - addBulkPendingWithCustomList(Collections.singletonList(new PresetMSOOrchestrationRequestGet("IN_PROGRESS",24))); - - AtomicReference<ServiceInfo> inProgressJob = new AtomicReference<>(); - boolean isJobFound = Wait.waitFor(x->{ - List<ServiceInfo> serviceInfoList = serviceListCall().getBody(); - inProgressJob.set(serviceInfoList.stream(). - filter(serviceInfo -> serviceInfo.serviceInstanceId.equals(PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID) && serviceInfo.jobStatus.equals(JobStatus.FAILED)) - .findFirst() - .orElse(null)); - return inProgressJob.get() != null; - }, null, 15, 1); - - org.junit.Assert.assertTrue("Job with DEFAULT_SERVICE_INSTANCE_ID and status FAILED should present", isJobFound); - - verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList(JobStatus.PENDING.name(), JobStatus.IN_PROGRESS.name(),JobStatus.FAILED.name()), JobAuditStatus.SourceStatus.VID); - verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList("REQUESTED", "IN_PROGRESS"), JobAuditStatus.SourceStatus.MSO); - } - - @Test - public void inProgressJobLessThan24HoursIsStillInProgressInVidAudit(){ - addBulkPendingWithCustomList(Collections.singletonList(new PresetMSOOrchestrationRequestGet("IN_PROGRESS",23))); - - AtomicReference<ServiceInfo> inProgressJob = new AtomicReference<>(); - boolean isJobFound = Wait.waitFor(x->{ - List<ServiceInfo> serviceInfoList = serviceListCall().getBody(); - inProgressJob.set(serviceInfoList.stream().filter(serviceInfo -> serviceInfo.serviceInstanceId.equals(PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID)) - .findFirst() - .orElse(null)); - return inProgressJob.get() != null; - }, null, 15, 1); - - org.junit.Assert.assertTrue("Job with DEFAULT_SERVICE_INSTANCE_ID should present", isJobFound); - org.junit.Assert.assertEquals("Tested job status is not as expected", JobStatus.IN_PROGRESS, inProgressJob.get().getJobStatus()); - - verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList(JobStatus.PENDING.name(), JobStatus.IN_PROGRESS.name()), JobAuditStatus.SourceStatus.VID); - verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList("REQUESTED", "IN_PROGRESS"), JobAuditStatus.SourceStatus.MSO); - } - - @Test - public void verifyAuditStatusOfInstanceGroupId(){ - SimulatorApi.registerExpectationFromPreset(new PresetMSOOrchestrationRequestsManyInstanceStatusesGet(INSTANCE_GROUP_ID_LABEL, INSTANCE_GROUP_LABEL), SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET); - final List<JobAuditStatus> expectedAuditStatusList = getAuditStatusesForInstance("VNFGROUP", "df305d54-75b4-431b-adb2-eb6b9e5460df"); - verifyInstanceAuditStatuses(Arrays.asList( - new JobAuditStatus("groupTestName", "IN_PROGRESS", UUID.fromString("28502bd2-3aff-4a03-9f2b-5a0d1cb1ca24") , INSTANCE_GROUP_LABEL+" instance creation", null, INSTANCE_GROUP_LABEL), - new JobAuditStatus("groupTestName", "COMPLETE",UUID.fromString("28502bd2-3aff-4a03-9f2b-5a0d1cb1ca24") , INSTANCE_GROUP_LABEL+" instance creation", null, INSTANCE_GROUP_LABEL), - new JobAuditStatus("groupTestName", "IN_PROGRESS", UUID.fromString("f711f0ff-24b6-4d7f-9314-4b4eae15f48c") , INSTANCE_GROUP_LABEL+" instance deletion", null, INSTANCE_GROUP_LABEL), - new JobAuditStatus("groupTestName", "COMPLETE",UUID.fromString("f711f0ff-24b6-4d7f-9314-4b4eae15f48c") , INSTANCE_GROUP_LABEL+" instance deletion", null, INSTANCE_GROUP_LABEL)), - expectedAuditStatusList); - } - - @Test(expectedExceptions = HttpClientErrorException.class) - public void verifyAuditStatusOfInstanceGroupId_notExistingVidType(){ - try { - getAuditStatusesForInstance("KUKU", "df305d54-75b4-431b-adb2-eb6b9e5460df"); - } catch (HttpClientErrorException e){ //to verify the properiatary statusCode field - assertThat("Code is not as expected", HttpStatus.BAD_REQUEST.equals(e.getStatusCode())); - throw e; - } - } - - @Test(expectedExceptions = HttpServerErrorException.class) - public void verifyAuditStatusOfInstanceGroupId_notExistingMsoInstanceId(){ - try { - getAuditStatusesForInstance("VNFGROUP", "df305d54-75b4-431b-adb2-eb6b9e5460aa"); - } catch (HttpServerErrorException e){ //to verify the properiatary statusCode field - assertThat("Code is not as expected", HttpStatus.INTERNAL_SERVER_ERROR.equals(e.getStatusCode())); - throw e; - } - } - - @DataProvider - public static Object[][] macroAndALaCarteBulk(){ - return new Object[][]{{CREATE_BULK_OF_MACRO_REQUEST}, {CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF}}; - } - - @Test(dataProvider = "macroAndALaCarteBulk", expectedExceptions = HttpClientErrorException.class) - @FeatureTogglingTest(FLAG_1906_INSTANTIATION_API_USER_VALIDATION) - public void verifyCreateBulkOfInstancesUserPermissionValidation(String requestDetailsFileName) { - login(new UserCredentials("mo57174000", "mo57174000", null, null, null)); - try { - createBulkOfInstances(false, 1, Collections.EMPTY_MAP, requestDetailsFileName); - } catch (HttpClientErrorException e){ - assertEquals("Code is not as expected", HttpStatus.FORBIDDEN.value(), e.getStatusCode().value()); - throw e; - } - finally { - login(); - } - - } - -} |