30076a9640a3abfc40f43e803b20ad7ffb140842
[vid.git] / vid-automation / src / main / java / org / onap / vid / api / CreateServiceWithFailedVnf.java
1 package org.onap.vid.api;
2
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;
20
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Optional;
25 import java.util.UUID;
26
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;
38
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");
55
56     public CreateServiceWithFailedVnf(AsyncInstantiationBase asyncInstantiationALaCarteApiTest) {
57         this.asyncInstantiationBase = asyncInstantiationALaCarteApiTest;
58     }
59
60     public ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> getNames() {
61         return names;
62     }
63
64     public ResourceIds getFirstIds() {
65         return firstIds;
66     }
67
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();
73     }
74
75
76     public CreateServiceWithFailedVnf createServicesWithVnfCompletedWithError() {
77 /*
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
81  */
82
83         names = ImmutableMap.of(SERVICE_NAME, serviceInstanceName, VNF_NAME, serviceInstanceName+"_vnf");
84
85
86
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)
91         );
92         inProgressPresets = ImmutableList.of(
93                 new PresetMSOOrchestrationRequestGet("COMPLETE", firstIds.serviceReqId),
94                 new PresetMSOOrchestrationRequestGet("FAILED", firstIds.vnfReqId, vnfFailedStatusMessage)
95         );
96         List<BasePreset> presets = asyncInstantiationBase.getPresets(createPresets, inProgressPresets);
97
98         registerExpectationFromPresets(presets, SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET);
99         registerExpectationFromPreset(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MDT1_TO_ATT_NC, SimulatorApi.RegistrationStrategy.APPEND);
100
101         uuids = asyncInstantiationBase.createBulkOfInstances(false, 1, names, AsyncInstantiationBase.CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF);
102         return this;
103     }
104
105     public void firstTimeAssertion() {
106         assertThat(uuids, hasSize(1));
107         originalJobId = uuids.get(0);
108
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)
116         ));
117     }
118
119     public String getBulkForRetry(){
120         final ResponseEntity<String> responseEntity= asyncInstantiationBase.getRetryBulk(originalJobId);
121         String expected = TestUtils.convertRequest(objectMapper, "asyncInstantiation/ServiceTreeForRetry_serviceInstance.json");
122         expected = expected
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;
129     }
130
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"));
136     }
137
138     private void secondRegistration(String vnfName) {
139         createPresets = ImmutableList.of(
140                 new PresetMSOCreateVNFInstanceOnlyRelatedServiceInstance(vnfName, retryIds.vnfReqId, firstIds.serviceId, retryIds.vnfId, 0)
141         );
142         inProgressPresets = ImmutableList.of(
143                 new PresetMSOOrchestrationRequestGet("COMPLETE", retryIds.vnfReqId)
144         );
145
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);
152
153
154     }
155
156     public String deployService1FailedVnf(){
157         createServicesWithVnfCompletedWithError();
158         firstTimeAssertion();
159         return getBulkForRetry();
160     }
161
162     public void assertResourceAuditStatus(String bulkForRetry) {
163         String vnfTrackById = extractVnfTrackById(bulkForRetry);
164
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));
169     }
170
171     private String extractVnfTrackById(String bulk) {
172         Map<String, Object> serviceInstantiation = null;
173         try {
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) {
178             return null;
179         }
180     }
181
182
183     public void secondRegistration() {
184         secondRegistration(names.get(VNF_NAME));
185     }
186
187     public void retryJob() {
188         //retry the previous job
189         retryUuids = asyncInstantiationBase.retryJob(originalJobId);
190     }
191
192     public void retryJobWithOtherDataAndAssert(String requestBody){
193         retryUuids = asyncInstantiationBase.retryJobWithChangedData(originalJobId, requestBody);
194         retryAssertion();
195         simulatorCallsAssertion();
196     }
197
198     public String changeSomeDataAndRegisterToSimulator(String payload){
199         payload = payload.replace(names.get(VNF_NAME), vnfEditedName);
200         secondRegistration(vnfEditedName);
201         return payload;
202     }
203
204
205     public void retryAssertion() {
206
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);
211
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);
216     }
217
218     public void simulatorCallsAssertion() {
219         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
220                 hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
221                 hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L)
222         ));
223     }
224
225
226 }