1 package org.onap.vid.api;
3 import com.fasterxml.jackson.core.type.TypeReference;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import com.google.common.collect.ImmutableList;
6 import com.google.common.collect.ImmutableMap;
7 import org.hamcrest.Matchers;
8 import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
9 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
10 import org.onap.simulator.presetGenerator.presets.mso.*;
11 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
12 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
13 import org.onap.vid.model.asyncInstantiation.ServiceInfo;
14 import org.springframework.http.HttpStatus;
15 import org.springframework.http.ResponseEntity;
16 import vid.automation.test.infra.Features;
17 import vid.automation.test.infra.ModelInfo;
18 import vid.automation.test.model.JobStatus;
19 import vid.automation.test.model.ServiceAction;
20 import vid.automation.test.services.SimulatorApi;
22 import java.io.IOException;
23 import java.util.List;
25 import java.util.Optional;
26 import java.util.UUID;
28 import static org.hamcrest.CoreMatchers.is;
29 import static org.hamcrest.MatcherAssert.assertThat;
30 import static org.hamcrest.Matchers.*;
31 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
32 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
33 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.VNF_NAME;
34 import static org.onap.vid.api.TestUtils.hasOrLacksOfEntry;
35 import static org.testng.Assert.assertTrue;
36 import static org.testng.AssertJUnit.assertFalse;
37 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
38 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
40 //CreateServiceWithFailedVnf is common for API test and UI test,
41 //so if you change it, make sure both test are compatible with your changes
42 public class CreateServiceWithFailedVnf {
43 private AsyncInstantiationBase asyncInstantiationBase;
44 private ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names;
45 private List<PresetMSOBaseCreateInstancePost> createPresets;
46 private List<PresetMSOOrchestrationRequestGet> inProgressPresets;
47 private List<String> uuids;
48 private List<String> retryUuids;
49 private String originalJobId;
50 private String serviceInstanceName = TestUtils.generateRandomAlphaNumeric(10);
51 private ResourceIds firstIds = new ResourceIds();
52 private ResourceIds retryIds = new ResourceIds();
53 private String vnfEditedName = TestUtils.generateRandomAlphaNumeric(10);
54 ObjectMapper objectMapper = new ObjectMapper();
55 public final ModelInfo serviceComplexService = new ModelInfo("e3c34d88-a216-4f1d-a782-9af9f9588705", "0367689e-d41e-483f-b200-eab17e4a7f8d", "service-Complexservice-aLaCarte-csar-2.zip");
57 public CreateServiceWithFailedVnf(AsyncInstantiationBase asyncInstantiationALaCarteApiTest) {
58 this.asyncInstantiationBase = asyncInstantiationALaCarteApiTest;
61 public ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> getNames() {
65 public ResourceIds getFirstIds() {
69 public static class ResourceIds {
70 public String serviceId =UUID.randomUUID().toString();
71 public String serviceReqId =UUID.randomUUID().toString();
72 public String vnfId =UUID.randomUUID().toString();
73 public String vnfReqId =UUID.randomUUID().toString();
77 public CreateServiceWithFailedVnf createServicesWithVnfCompletedWithError() {
79 Legit Preset || deploy 1 Service, 1 VNF which will fail
80 -> JobStatus of service is COMPLETED_WITH_ERRORS, audit
81 is adequate; strict simulator comapre
84 names = ImmutableMap.of(SERVICE_NAME, serviceInstanceName, VNF_NAME, serviceInstanceName+"_vnf");
88 final String vnfFailedStatusMessage = "Vnf failed.";
89 createPresets = ImmutableList.of(
90 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(names, 0, firstIds.serviceReqId, firstIds.serviceId),
91 new PresetMSOCreateVNFInstanceOnlyRelatedServiceInstance(names.get(VNF_NAME),firstIds.vnfReqId , firstIds.serviceId, firstIds.vnfId, 0)
93 inProgressPresets = ImmutableList.of(
94 new PresetMSOOrchestrationRequestGet("COMPLETE", firstIds.serviceReqId),
95 new PresetMSOOrchestrationRequestGet("FAILED", firstIds.vnfReqId, vnfFailedStatusMessage)
97 List<BasePreset> presets = asyncInstantiationBase.getPresets(createPresets, inProgressPresets);
99 registerExpectationFromPresets(presets, SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET);
100 registerExpectationFromPreset(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MDT1_TO_ATT_NC, SimulatorApi.RegistrationStrategy.APPEND);
102 uuids = asyncInstantiationBase.createBulkOfInstances(false, 1, names, AsyncInstantiationBase.CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF);
106 public void firstTimeAssertion() {
107 assertThat(uuids, hasSize(1));
108 originalJobId = uuids.get(0);
109 boolean isPauseOnFailureFlagOn = Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive();
111 asyncInstantiationBase.assertServiceInfoSpecific1(originalJobId, isPauseOnFailureFlagOn ?
112 JobStatus.FAILED_AND_PAUSED : JobStatus.COMPLETED_WITH_ERRORS, names.get(SERVICE_NAME), "us16807000", firstIds.serviceId, ServiceAction.INSTANTIATE);
113 asyncInstantiationBase.assertAuditStatuses(originalJobId, isPauseOnFailureFlagOn ?
114 asyncInstantiationBase.vidAuditStatusesFailedAndPaused(originalJobId) :
115 asyncInstantiationBase.vidAuditStatusesCompletedWithErrors(originalJobId),null);
116 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
117 hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
118 hasOrLacksOfEntry(createPresets.get(1).getReqPath(), 1L),
119 hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
120 hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L)
124 public String getBulkForRetry(){
125 final ResponseEntity<String> responseEntity= asyncInstantiationBase.getRetryBulk(originalJobId);
126 String expected = TestUtils.convertRequest(objectMapper, "asyncInstantiation/ServiceTreeForRetry_serviceInstance.json");
128 .replace("SERVICE_NAME", serviceInstanceName);
129 String originalResponse = responseEntity.getBody();
130 String responseToCompare = originalResponse.replaceFirst( "(instanceId\":\")(.*?)(\")", "$1INSTANCE_ID$3")
131 .replaceAll( "(trackById\":\")(.*?)(\")", "$1TRACK_BY_ID$3");
132 asyncInstantiationBase.assertJsonEquals(responseToCompare, expected);
133 return originalResponse;
136 public void getBulkForRetryNotFound() {
137 UUID jobId= UUID.randomUUID();
138 final ResponseEntity<String> response = asyncInstantiationBase.getRetryBulk(jobId.toString());
139 assertThat(response.getStatusCode(), is(HttpStatus.NOT_FOUND));
140 assertThat(response.getBody(),containsString("Failed to retrieve class org.onap.vid.dao.JobRequest with JOB_ID "+jobId+" from table. no resource found"));
143 private void secondRegistration(String vnfName) {
144 createPresets = ImmutableList.of(
145 new PresetMSOCreateVNFInstanceOnlyRelatedServiceInstance(vnfName, retryIds.vnfReqId, firstIds.serviceId, retryIds.vnfId, 0)
147 inProgressPresets = ImmutableList.of(
148 new PresetMSOOrchestrationRequestGet("COMPLETE", retryIds.vnfReqId)
151 registerExpectationFromPresets(asyncInstantiationBase.getPresets(createPresets, inProgressPresets), SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET);
152 registerExpectationFromPresets(ImmutableList.of(
153 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MDT1_TO_ATT_NC,
154 new PresetSDCGetServiceMetadataGet(serviceComplexService),
155 new PresetSDCGetServiceToscaModelGet(serviceComplexService)),
156 SimulatorApi.RegistrationStrategy.APPEND);
161 public String deployService1FailedVnf(){
162 createServicesWithVnfCompletedWithError();
163 firstTimeAssertion();
164 return getBulkForRetry();
167 public void assertResourceAuditStatus(String bulkForRetry) {
168 String vnfTrackById = extractVnfTrackById(bulkForRetry);
170 Map<String, Object> auditStatus = (Map) asyncInstantiationBase.getResourceAuditInfo(vnfTrackById);
171 assertThat(auditStatus.get("jobStatus"), equalTo("FAILED"));
172 assertThat(auditStatus.get("additionalInfo"), equalTo("Vnf failed."));
173 assertThat(auditStatus.get("requestId"), equalTo(firstIds.vnfReqId));
176 private String extractVnfTrackById(String bulk) {
177 Map<String, Object> serviceInstantiation = null;
179 serviceInstantiation = objectMapper.readValue(bulk, new TypeReference<Map<String, Object>>(){});
180 Map<String, Object> vnf = (Map) ((Map) serviceInstantiation.get("vnfs")).get("vSAMP12 1");
181 return vnf.get("trackById").toString();
182 } catch (IOException e) {
188 public void secondRegistration() {
189 secondRegistration(names.get(VNF_NAME));
192 public void retryJob() {
193 //retry the previous job
194 retryUuids = asyncInstantiationBase.retryJob(originalJobId);
197 public void retryJobWithOtherDataAndAssert(String requestBody){
198 retryUuids = asyncInstantiationBase.retryJobWithChangedData(originalJobId, requestBody);
200 simulatorCallsAssertion();
203 public String changeSomeDataAndRegisterToSimulator(String payload){
204 payload = payload.replace(names.get(VNF_NAME), vnfEditedName);
205 secondRegistration(vnfEditedName);
210 public void retryAssertion() {
212 assertThat(retryUuids, Matchers.hasSize(1));
213 String retryJobId = retryUuids.get(0);
214 assertThat(retryJobId, not(equalTo(originalJobId)));
215 asyncInstantiationBase.assertServiceInfoSpecific1(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), "us16807000", firstIds.serviceId, ServiceAction.UPDATE);
217 //make sure original job is retry is disabled.
218 Optional<ServiceInfo> optionalServiceInfo = asyncInstantiationBase.serviceListCall().getBody().stream().filter(si -> originalJobId.equals(si.jobId)).findFirst();
219 assertTrue(optionalServiceInfo.isPresent());
220 assertFalse(optionalServiceInfo.get().isRetryEnabled);
223 public void simulatorCallsAssertion() {
224 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
225 hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
226 hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L)