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.ModelInfo;
17 import vid.automation.test.model.JobStatus;
18 import vid.automation.test.model.ServiceAction;
19 import vid.automation.test.services.SimulatorApi;
21 import java.io.IOException;
22 import java.util.List;
24 import java.util.Optional;
25 import java.util.UUID;
27 import static org.hamcrest.CoreMatchers.is;
28 import static org.hamcrest.MatcherAssert.assertThat;
29 import static org.hamcrest.Matchers.*;
30 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
31 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
32 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.VNF_NAME;
33 import static org.onap.vid.api.TestUtils.hasOrLacksOfEntry;
34 import static org.testng.Assert.assertTrue;
35 import static org.testng.AssertJUnit.assertFalse;
36 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
37 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
39 //CreateServiceWithFailedVnf is common for API test and UI test,
40 //so if you change it, make sure both test are compatible with your changes
41 public class CreateServiceWithFailedVnf {
42 private AsyncInstantiationBase asyncInstantiationBase;
43 private ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names;
44 private List<PresetMSOBaseCreateInstancePost> createPresets;
45 private List<PresetMSOOrchestrationRequestGet> inProgressPresets;
46 private List<String> uuids;
47 private List<String> retryUuids;
48 private String originalJobId;
49 private String serviceInstanceName = TestUtils.generateRandomAlphaNumeric(10);
50 private ResourceIds firstIds = new ResourceIds();
51 private ResourceIds retryIds = new ResourceIds();
52 private String vnfEditedName = TestUtils.generateRandomAlphaNumeric(10);
53 ObjectMapper objectMapper = new ObjectMapper();
54 public final ModelInfo serviceComplexService = new ModelInfo("e3c34d88-a216-4f1d-a782-9af9f9588705", "0367689e-d41e-483f-b200-eab17e4a7f8d", "service-Complexservice-aLaCarte-csar-2.zip");
56 public CreateServiceWithFailedVnf(AsyncInstantiationBase asyncInstantiationALaCarteApiTest) {
57 this.asyncInstantiationBase = asyncInstantiationALaCarteApiTest;
60 public ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> getNames() {
64 public ResourceIds getFirstIds() {
68 public static class ResourceIds {
69 public String serviceId =UUID.randomUUID().toString();
70 public String serviceReqId =UUID.randomUUID().toString();
71 public String vnfId =UUID.randomUUID().toString();
72 public String vnfReqId =UUID.randomUUID().toString();
76 public CreateServiceWithFailedVnf createServicesWithVnfCompletedWithError() {
78 Legit Preset || deploy 1 Service, 1 VNF which will fail
79 -> JobStatus of service is COMPLETED_WITH_ERRORS, audit
80 is adequate; strict simulator comapre
83 names = ImmutableMap.of(SERVICE_NAME, serviceInstanceName, VNF_NAME, serviceInstanceName+"_vnf");
87 final String vnfFailedStatusMessage = "Vnf failed.";
88 createPresets = ImmutableList.of(
89 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(names, 0, firstIds.serviceReqId, firstIds.serviceId),
90 new PresetMSOCreateVNFInstanceOnlyRelatedServiceInstance(names.get(VNF_NAME),firstIds.vnfReqId , firstIds.serviceId, firstIds.vnfId, 0)
92 inProgressPresets = ImmutableList.of(
93 new PresetMSOOrchestrationRequestGet("COMPLETE", firstIds.serviceReqId),
94 new PresetMSOOrchestrationRequestGet("FAILED", firstIds.vnfReqId, vnfFailedStatusMessage)
96 List<BasePreset> presets = asyncInstantiationBase.getPresets(createPresets, inProgressPresets);
98 registerExpectationFromPresets(presets, SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET);
99 registerExpectationFromPreset(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MDT1_TO_ATT_NC, SimulatorApi.RegistrationStrategy.APPEND);
101 uuids = asyncInstantiationBase.createBulkOfInstances(false, 1, names, AsyncInstantiationBase.CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF);
105 public void firstTimeAssertion() {
106 assertThat(uuids, hasSize(1));
107 originalJobId = uuids.get(0);
109 asyncInstantiationBase.assertServiceInfoSpecific1(originalJobId, JobStatus.COMPLETED_WITH_ERRORS, names.get(SERVICE_NAME), "us16807000", firstIds.serviceId, ServiceAction.INSTANTIATE);
110 asyncInstantiationBase.assertAuditStatuses(originalJobId, asyncInstantiationBase.vidAuditStatusesCompletedWithErrors(originalJobId),null);
111 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
112 hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
113 hasOrLacksOfEntry(createPresets.get(1).getReqPath(), 1L),
114 hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
115 hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L)
119 public String getBulkForRetry(){
120 final ResponseEntity<String> responseEntity= asyncInstantiationBase.getRetryBulk(originalJobId);
121 String expected = TestUtils.convertRequest(objectMapper, "asyncInstantiation/ServiceTreeForRetry_serviceInstance.json");
123 .replace("SERVICE_NAME", serviceInstanceName);
124 String originalResponse = responseEntity.getBody();
125 String responseToCompare = originalResponse.replaceFirst( "(instanceId\":\")(.*?)(\")", "$1INSTANCE_ID$3")
126 .replaceAll( "(trackById\":\")(.*?)(\")", "$1TRACK_BY_ID$3");
127 asyncInstantiationBase.assertJsonEquals(responseToCompare, expected);
128 return originalResponse;
131 public void getBulkForRetryNotFound() {
132 UUID jobId= UUID.randomUUID();
133 final ResponseEntity<String> response = asyncInstantiationBase.getRetryBulk(jobId.toString());
134 assertThat(response.getStatusCode(), is(HttpStatus.NOT_FOUND));
135 assertThat(response.getBody(),containsString("Failed to retrieve class org.onap.vid.dao.JobRequest with JOB_ID "+jobId+" from table. no resource found"));
138 private void secondRegistration(String vnfName) {
139 createPresets = ImmutableList.of(
140 new PresetMSOCreateVNFInstanceOnlyRelatedServiceInstance(vnfName, retryIds.vnfReqId, firstIds.serviceId, retryIds.vnfId, 0)
142 inProgressPresets = ImmutableList.of(
143 new PresetMSOOrchestrationRequestGet("COMPLETE", retryIds.vnfReqId)
146 registerExpectationFromPresets(asyncInstantiationBase.getPresets(createPresets, inProgressPresets), SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET);
147 registerExpectationFromPresets(ImmutableList.of(
148 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MDT1_TO_ATT_NC,
149 new PresetSDCGetServiceMetadataGet(serviceComplexService),
150 new PresetSDCGetServiceToscaModelGet(serviceComplexService)),
151 SimulatorApi.RegistrationStrategy.APPEND);
156 public String deployService1FailedVnf(){
157 createServicesWithVnfCompletedWithError();
158 firstTimeAssertion();
159 return getBulkForRetry();
162 public void assertResourceAuditStatus(String bulkForRetry) {
163 String vnfTrackById = extractVnfTrackById(bulkForRetry);
165 Map<String, Object> auditStatus = (Map) asyncInstantiationBase.getResourceAuditInfo(vnfTrackById);
166 assertThat(auditStatus.get("jobStatus"), equalTo("FAILED"));
167 assertThat(auditStatus.get("additionalInfo"), equalTo("Vnf failed."));
168 assertThat(auditStatus.get("requestId"), equalTo(firstIds.vnfReqId));
171 private String extractVnfTrackById(String bulk) {
172 Map<String, Object> serviceInstantiation = null;
174 serviceInstantiation = objectMapper.readValue(bulk, new TypeReference<Map<String, Object>>(){});
175 Map<String, Object> vnf = (Map) ((Map) serviceInstantiation.get("vnfs")).get("vSAMP12 1");
176 return vnf.get("trackById").toString();
177 } catch (IOException e) {
183 public void secondRegistration() {
184 secondRegistration(names.get(VNF_NAME));
187 public void retryJob() {
188 //retry the previous job
189 retryUuids = asyncInstantiationBase.retryJob(originalJobId);
192 public void retryJobWithOtherDataAndAssert(String requestBody){
193 retryUuids = asyncInstantiationBase.retryJobWithChangedData(originalJobId, requestBody);
195 simulatorCallsAssertion();
198 public String changeSomeDataAndRegisterToSimulator(String payload){
199 payload = payload.replace(names.get(VNF_NAME), vnfEditedName);
200 secondRegistration(vnfEditedName);
205 public void retryAssertion() {
207 assertThat(retryUuids, Matchers.hasSize(1));
208 String retryJobId = retryUuids.get(0);
209 assertThat(retryJobId, not(equalTo(originalJobId)));
210 asyncInstantiationBase.assertServiceInfoSpecific1(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), "us16807000", firstIds.serviceId, ServiceAction.UPDATE);
212 //make sure original job is retry is disabled.
213 Optional<ServiceInfo> optionalServiceInfo = asyncInstantiationBase.serviceListCall().getBody().stream().filter(si -> originalJobId.equals(si.jobId)).findFirst();
214 assertTrue(optionalServiceInfo.isPresent());
215 assertFalse(optionalServiceInfo.get().isRetryEnabled);
218 public void simulatorCallsAssertion() {
219 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
220 hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
221 hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L)