6722941f954312a5d026e107eea43f32de8eb337
[so.git] / mso-api-handlers / mso-api-handler-infra / src / test / java / org / onap / so / apihandlerinfra / tenantisolation / process / ActivateVnfStatusOperationalEnvironmentTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.apihandlerinfra.tenantisolation.process;
22
23 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
24 import static com.github.tomakehurst.wiremock.client.WireMock.get;
25 import static com.github.tomakehurst.wiremock.client.WireMock.post;
26 import static com.github.tomakehurst.wiremock.client.WireMock.put;
27 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
28 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
29 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
30 import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
31 import static com.github.tomakehurst.wiremock.client.WireMock.containing;
32 import static org.hamcrest.Matchers.startsWith;
33 import static org.junit.Assert.assertEquals;
34
35 import static org.junit.Assert.assertThat;
36
37 import com.fasterxml.jackson.core.JsonProcessingException;
38 import com.fasterxml.jackson.databind.ObjectMapper;
39 import org.apache.http.HttpStatus;
40 import org.json.JSONObject;
41 import org.junit.Rule;
42 import org.junit.Test;
43 import org.junit.Ignore;
44 import org.junit.rules.ExpectedException;
45 import org.onap.so.apihandler.common.ErrorNumbers;
46 import org.onap.so.apihandlerinfra.BaseTest;
47 import org.onap.so.apihandlerinfra.exceptions.ApiException;
48 import org.onap.so.apihandlerinfra.tenantisolation.CloudOrchestrationRequest;
49 import org.onap.so.apihandlerinfra.tenantisolationbeans.Distribution;
50 import org.onap.so.apihandlerinfra.tenantisolationbeans.DistributionStatus;
51 import org.onap.so.apihandlerinfra.tenantisolationbeans.Status;
52 import org.onap.so.client.aai.AAIVersion;
53 import org.onap.so.db.request.beans.InfraActiveRequests;
54 import org.onap.so.db.request.beans.OperationalEnvDistributionStatus;
55 import org.onap.so.db.request.beans.OperationalEnvServiceModelStatus;
56 import org.springframework.beans.factory.annotation.Autowired;
57
58 import javax.ws.rs.core.HttpHeaders;
59 import javax.ws.rs.core.MediaType;
60
61 public class ActivateVnfStatusOperationalEnvironmentTest extends BaseTest{
62
63         @Autowired
64         private ActivateVnfStatusOperationalEnvironment activateVnfStatus;
65     @Rule
66     public ExpectedException thrown = ExpectedException.none();
67
68         private final String requestId = "TEST_requestId";
69         private final String requestIdOrig = "TEST_requestIdOrig";      
70         private final String operationalEnvironmentId = "TEST_operationalEnvironmentId";        
71         private final String vnfOperationalEnvironmentId = "VNF_operationalEnvironmentId";      
72         private final CloudOrchestrationRequest request = new CloudOrchestrationRequest();
73         private final String workloadContext = "TEST_workloadContext";
74         private final String recoveryActionRetry  = "RETRY";
75         private final String recoveryActionAbort  = "ABORT";
76         private final String recoveryActionSkip  = "SKIP";
77         private final String serviceModelVersionId = "TEST_serviceModelVersionId";
78         private final String serviceModelVersionId1 = "TEST_serviceModelVersionId1";    
79         private final int retryCountThree = 3;
80         private final int retryCountTwo = 2;    
81         private final int retryCountZero = 0;   
82         private final String sdcDistributionId1 = "TEST_distributionId1";
83         private final String sdcDistributionId = "TEST_distributionId";
84         private final String statusOk = Status.DISTRIBUTION_COMPLETE_OK.toString();
85         private final String statusError = DistributionStatus.DISTRIBUTION_COMPLETE_ERROR.toString();
86         private final String statusSent = "SENT";
87         String json = "{\"operational-environment-status\" : \"INACTIVE\"}";
88         
89         private final ObjectMapper mapper = new ObjectMapper();
90
91         @Test
92         public void checkOrUpdateOverallStatusTest_Ok() throws Exception {
93                 
94                 // two entries, both status Ok & retry 0
95                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
96                 serviceModelDb.setRequestId(requestIdOrig);
97                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
98                 serviceModelDb.setWorkloadContext(workloadContext);
99                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
100                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
101                 serviceModelDb.setRetryCount(retryCountZero);
102                 serviceModelDb.setServiceModelVersionDistrStatus(statusOk);
103                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);
104                 
105                 serviceModelDb.setRequestId(requestIdOrig);
106                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId1);
107                 serviceModelDb.setWorkloadContext(workloadContext);
108                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
109                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
110                 serviceModelDb.setRetryCount(retryCountZero);
111                 serviceModelDb.setServiceModelVersionDistrStatus(statusOk);
112                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);             
113
114                 InfraActiveRequests iar = new InfraActiveRequests();
115                 iar.setRequestId(requestIdOrig);
116                 iar.setRequestStatus("PENDING");
117
118                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
119                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
120                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
121                                                 .withStatus(HttpStatus.SC_OK)));
122                 stubFor(get(urlPathEqualTo("/infraActiveRequests/"+requestIdOrig))
123                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
124                                                 .withBody(mapper.writeValueAsString(iar))
125                                                 .withStatus(HttpStatus.SC_OK)));
126                 
127                 activateVnfStatus.checkOrUpdateOverallStatus(operationalEnvironmentId, requestIdOrig);
128                 
129                 // overall is success
130         }
131
132         @Test
133         public void checkOrUpdateOverallStatusTest_Error() throws JsonProcessingException {
134                 
135                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
136                 serviceModelDb.setRequestId(requestIdOrig);
137                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
138                 serviceModelDb.setWorkloadContext(workloadContext);
139                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
140                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
141                 serviceModelDb.setRetryCount(retryCountZero);
142                 serviceModelDb.setServiceModelVersionDistrStatus(statusError);
143                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);             
144                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
145                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
146                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
147                                                 .withStatus(HttpStatus.SC_OK)));
148                 
149                 InfraActiveRequests iar = new InfraActiveRequests();
150                 iar.setRequestId(requestIdOrig);
151                 iar.setRequestStatus("PENDING");
152
153                 stubFor(get(urlPathEqualTo("/infraActiveRequests/"+requestIdOrig))
154                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
155                                                 .withBody(mapper.writeValueAsString(iar))
156                                                 .withStatus(HttpStatus.SC_OK)));
157
158         try {
159             activateVnfStatus.checkOrUpdateOverallStatus(operationalEnvironmentId, requestIdOrig);
160         }catch(ApiException e){
161             assertThat(e.getMessage(), startsWith("Overall Activation process is a Failure. "));
162             assertEquals(e.getHttpResponseCode(), HttpStatus.SC_BAD_REQUEST);
163             assertEquals(e.getMessageID(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR);
164         }
165                 
166         }       
167         
168         @Test
169         public void checkOrUpdateOverallStatusTest_Waiting() throws Exception {
170                 
171                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
172                 serviceModelDb.setRequestId(requestIdOrig);
173                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
174                 serviceModelDb.setWorkloadContext(workloadContext);
175                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
176                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
177                 serviceModelDb.setRetryCount(retryCountTwo);
178                 serviceModelDb.setServiceModelVersionDistrStatus(statusError);
179                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);             
180                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
181                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
182                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
183                                                 .withStatus(HttpStatus.SC_OK)));
184                 
185                 activateVnfStatus.checkOrUpdateOverallStatus(operationalEnvironmentId, requestIdOrig);
186         }
187         
188         @Test
189         public void executionTest_Ok() throws Exception {
190                 
191                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
192                 serviceModelDb.setRequestId(requestIdOrig);
193                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
194                 serviceModelDb.setWorkloadContext(workloadContext);
195                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
196                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
197                 serviceModelDb.setRetryCount(retryCountThree);
198                 serviceModelDb.setServiceModelVersionDistrStatus(statusSent);
199                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
200                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);             
201
202                 OperationalEnvDistributionStatus distributionDb = new OperationalEnvDistributionStatus();
203                 distributionDb.setDistributionId(sdcDistributionId);
204                 distributionDb.setRequestId(requestIdOrig);
205                 distributionDb.setOperationalEnvId(operationalEnvironmentId);
206                 distributionDb.setDistributionIdStatus(statusSent);
207                 distributionDb.setServiceModelVersionId(serviceModelVersionId);
208                 distributionDb.setDistributionIdErrorReason(null);
209                 
210                 // prepare distribution obj
211                 Distribution distribution = new Distribution();
212                 distribution.setStatus(Status.DISTRIBUTION_COMPLETE_OK);
213                 request.setDistribution(distribution);
214                 request.setDistributionId(sdcDistributionId);
215                 request.setOperationalEnvironmentId(operationalEnvironmentId);
216                 
217                 InfraActiveRequests iar = new InfraActiveRequests();
218                 iar.setRequestId(requestIdOrig);
219                 iar.setRequestStatus("PENDING");
220                 
221                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
222                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
223                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
224                                                 .withStatus(HttpStatus.SC_OK)));
225                 stubFor(get(urlPathEqualTo("/operationalEnvDistributionStatus/"+sdcDistributionId))
226                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
227                                                 .withBody(mapper.writeValueAsString(distributionDb))
228                                                 .withStatus(HttpStatus.SC_OK)));
229                 stubFor(get(urlPathEqualTo("/infraActiveRequests/"+requestIdOrig))
230                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
231                                                 .withBody(mapper.writeValueAsString(iar))
232                                                 .withStatus(HttpStatus.SC_OK)));
233                 stubFor(post(urlPathEqualTo("/operationalEnvServiceModelStatus/"))
234                                 .withRequestBody(equalTo("{\"requestId\":\"TEST_requestIdOrig\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"serviceModelVersionDistrStatus\":\"DISTRIBUTION_COMPLETE_OK\",\"recoveryAction\":\"RETRY\",\"retryCount\":0,\"workloadContext\":\"TEST_workloadContext\",\"createTime\":null,\"modifyTime\":null,\"vnfOperationalEnvId\":\"VNF_operationalEnvironmentId\"}"))
235                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
236                                                 .withStatus(HttpStatus.SC_OK)));
237
238                 stubFor(post(urlPathEqualTo("/operationalEnvDistributionStatus/"))
239                                 .withRequestBody(equalTo("{\"distributionId\":\"TEST_distributionId\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"requestId\":\"TEST_requestIdOrig\",\"distributionIdStatus\":\"DISTRIBUTION_COMPLETE_OK\",\"distributionIdErrorReason\":\"\",\"createTime\":null,\"modifyTime\":null}"))
240                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
241                                                 .withStatus(HttpStatus.SC_OK)));
242                 
243                 stubFor(get(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
244                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(json).withStatus(HttpStatus.SC_ACCEPTED)));
245                 stubFor(put(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
246                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED)));
247                 
248                 activateVnfStatus.execute(requestId, request);          
249         }                               
250         
251         @Test
252         public void executionTest_ERROR_Status_And_RETRY() throws Exception {
253                 
254                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
255                 serviceModelDb.setRequestId(requestIdOrig);
256                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
257                 serviceModelDb.setWorkloadContext(workloadContext);
258                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
259                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
260                 serviceModelDb.setRetryCount(retryCountThree);
261                 serviceModelDb.setServiceModelVersionDistrStatus(statusError);
262                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);
263                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
264                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
265                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
266                                                 .withStatus(HttpStatus.SC_OK)));
267                 
268                 OperationalEnvDistributionStatus distributionDb = new OperationalEnvDistributionStatus();
269                 distributionDb.setDistributionId(sdcDistributionId);
270                 distributionDb.setRequestId(requestIdOrig);
271                 distributionDb.setOperationalEnvId(operationalEnvironmentId);
272                 distributionDb.setDistributionIdStatus(statusError);
273                 distributionDb.setServiceModelVersionId(serviceModelVersionId);
274                 distributionDb.setDistributionIdErrorReason(null);
275                 
276                 
277                 
278                 
279                 // prepare new distribution obj
280                 Distribution distribution = new Distribution();
281                 distribution.setStatus(Status.DISTRIBUTION_COMPLETE_ERROR);
282                 distribution.setErrorReason("Unable to process.");
283                 request.setDistribution(distribution);
284                 request.setDistributionId(sdcDistributionId);
285                 request.setOperationalEnvironmentId(operationalEnvironmentId);
286                 
287                 // prepare sdc return data
288                 JSONObject jsonObject = new JSONObject();
289                 jsonObject.put("statusCode", "202");
290                 jsonObject.put("message", "Success");
291                 jsonObject.put("distributionId", sdcDistributionId1);
292                 
293                 stubFor(post(urlPathMatching("/sdc/v1/catalog/services/.*"))
294                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(jsonObject.toString()).withStatus(HttpStatus.SC_ACCEPTED)));
295                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
296                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
297                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
298                                                 .withStatus(HttpStatus.SC_OK)));
299                 stubFor(get(urlPathEqualTo("/operationalEnvDistributionStatus/"+sdcDistributionId))
300                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
301                                                 .withBody(mapper.writeValueAsString(distributionDb))
302                                                 .withStatus(HttpStatus.SC_OK)));
303                 stubFor(post(urlPathEqualTo("/operationalEnvDistributionStatus/"))
304                                 .withRequestBody(equalTo("{\"distributionId\":\"TEST_distributionId\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"requestId\":\"TEST_requestIdOrig\",\"distributionIdStatus\":\"DISTRIBUTION_COMPLETE_ERROR\",\"distributionIdErrorReason\":\"Unable to process.\",\"createTime\":null,\"modifyTime\":null,\"handler\":{}}"))
305                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
306                                                 .withStatus(HttpStatus.SC_OK)));
307
308                 stubFor(post(urlPathEqualTo("/operationalEnvDistributionStatus/"))
309                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
310                                                 .withStatus(HttpStatus.SC_OK)));
311
312                 stubFor(post(urlPathEqualTo("/operationalEnvServiceModelStatus/"))
313                                 .withRequestBody(equalTo("{\"requestId\":\"TEST_requestIdOrig\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"serviceModelVersionDistrStatus\":\"SENT\",\"recoveryAction\":\"RETRY\",\"retryCount\":2,\"workloadContext\":\"TEST_workloadContext\",\"createTime\":null,\"modifyTime\":null,\"vnfOperationalEnvId\":\"VNF_operationalEnvironmentId\"}"))
314                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
315                                                 .withStatus(HttpStatus.SC_OK)));
316                 
317                 stubFor(get(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
318                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(json).withStatus(HttpStatus.SC_ACCEPTED)));
319                 stubFor(put(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
320                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED)));
321                 
322                 activateVnfStatus.execute(requestId, request);  
323         }
324
325         @Test
326         public void executionTest_ERROR_Status_And_RETRY_And_RetryZero() throws JsonProcessingException {
327                 
328                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
329                 serviceModelDb.setRequestId(requestIdOrig);
330                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
331                 serviceModelDb.setWorkloadContext(workloadContext);
332                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
333                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
334                 serviceModelDb.setRetryCount(retryCountZero);
335                 serviceModelDb.setServiceModelVersionDistrStatus(statusError);
336                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);
337                 
338                 OperationalEnvDistributionStatus distributionDb = new OperationalEnvDistributionStatus();
339                 distributionDb.setDistributionId(sdcDistributionId);
340                 distributionDb.setRequestId(requestIdOrig);
341                 distributionDb.setOperationalEnvId(operationalEnvironmentId);
342                 distributionDb.setDistributionIdStatus(statusError);
343                 distributionDb.setServiceModelVersionId(serviceModelVersionId);
344                 distributionDb.setDistributionIdErrorReason(null);
345                 
346         
347                 
348                 // prepare distribution obj
349                 Distribution distribution = new Distribution();
350                 distribution.setStatus(Status.DISTRIBUTION_COMPLETE_ERROR);
351                 request.setDistribution(distribution);
352                 request.setDistributionId(sdcDistributionId);
353                 request.setOperationalEnvironmentId(operationalEnvironmentId);
354                 
355                 JSONObject jsonObject = new JSONObject();
356                 jsonObject.put("statusCode", "202");
357                 jsonObject.put("message", "Success");
358                 jsonObject.put("distributionId", sdcDistributionId);
359                 
360                 InfraActiveRequests iar = new InfraActiveRequests();
361                 iar.setRequestId(requestIdOrig);
362                 iar.setRequestStatus("PENDING");
363
364                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
365                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
366                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
367                                                 .withStatus(HttpStatus.SC_OK)));
368                 stubFor(get(urlPathEqualTo("/operationalEnvDistributionStatus/"+sdcDistributionId))
369                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
370                                                 .withBody(mapper.writeValueAsString(distributionDb))
371                                                 .withStatus(HttpStatus.SC_OK)));
372                 stubFor(get(urlPathEqualTo("/infraActiveRequests/"+requestIdOrig))
373                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
374                                                 .withBody(mapper.writeValueAsString(iar))
375                                                 .withStatus(HttpStatus.SC_OK)));
376                 
377                 stubFor(post(urlPathMatching("/sdc/v1/catalog/services/.*"))
378                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(jsonObject.toString()).withStatus(HttpStatus.SC_ACCEPTED)));
379
380                 stubFor(post(urlPathEqualTo("/operationalEnvServiceModelStatus/"))
381                                 .withRequestBody(equalTo("{\"requestId\":\"TEST_requestIdOrig\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"serviceModelVersionDistrStatus\":\"SENT\",\"recoveryAction\":\"RETRY\",\"retryCount\":2,\"workloadContext\":\"TEST_workloadContext\",\"createTime\":null,\"modifyTime\":null,\"handler\":{}}"))
382                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
383                                                 .withStatus(HttpStatus.SC_OK)));
384
385                 stubFor(get(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
386                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(json).withStatus(HttpStatus.SC_ACCEPTED)));
387                 stubFor(put(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
388                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED)));
389                 
390         try {
391             activateVnfStatus.execute(requestId, request);
392         }catch(ApiException e){
393             assertThat(e.getMessage(), startsWith("Overall Activation process is a Failure. "));
394             assertEquals(e.getHttpResponseCode(), HttpStatus.SC_BAD_REQUEST);
395             assertEquals(e.getMessageID(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR);
396         }
397
398                 
399         }       
400         
401         @Test
402         public void executionTest_ERROR_Status_And_RETRY_And_ErrorSdc() throws JsonProcessingException {
403                 
404                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
405                 serviceModelDb.setRequestId(requestIdOrig);
406                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
407                 serviceModelDb.setWorkloadContext(workloadContext);
408                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
409                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
410                 serviceModelDb.setRetryCount(retryCountThree);
411                 serviceModelDb.setServiceModelVersionDistrStatus(statusError);
412                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);
413                 
414                 OperationalEnvDistributionStatus distributionDb = new OperationalEnvDistributionStatus();
415                 distributionDb.setDistributionId(sdcDistributionId);
416                 distributionDb.setRequestId(requestIdOrig);
417                 distributionDb.setOperationalEnvId(operationalEnvironmentId);
418                 distributionDb.setDistributionIdStatus(statusError);
419                 distributionDb.setServiceModelVersionId(serviceModelVersionId);
420                 distributionDb.setDistributionIdErrorReason(null);
421                 
422                 // prepare distribution obj
423                 Distribution distribution = new Distribution();
424                 distribution.setStatus(Status.DISTRIBUTION_COMPLETE_ERROR);
425                 distribution.setErrorReason("Unable to process.");
426                 request.setDistribution(distribution);
427                 request.setDistributionId(sdcDistributionId);
428                 request.setOperationalEnvironmentId(operationalEnvironmentId);
429                 
430                 // ERROR in sdc
431                 JSONObject jsonMessages = new JSONObject();
432                 jsonMessages.put("statusCode", "409");
433                 jsonMessages.put("message", "Undefined Error Message!");
434                 jsonMessages.put("messageId", "SVC4675");
435                 jsonMessages.put("text", "Error: Service state is invalid for this action.");
436                 JSONObject jsonServException = new JSONObject();
437                 jsonServException.put("serviceException", jsonMessages);
438                 JSONObject jsonErrorRequest = new JSONObject();
439                 jsonErrorRequest.put("requestError", jsonServException);
440                 
441                 InfraActiveRequests iar = new InfraActiveRequests();
442                 iar.setRequestId(requestIdOrig);
443                 iar.setRequestStatus("PENDING");
444                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
445                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
446                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
447                                                 .withStatus(HttpStatus.SC_OK)));
448                 stubFor(get(urlPathEqualTo("/operationalEnvDistributionStatus/"+sdcDistributionId))
449                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
450                                                 .withBody(mapper.writeValueAsString(distributionDb))
451                                                 .withStatus(HttpStatus.SC_OK)));
452                 stubFor(get(urlPathEqualTo("/infraActiveRequests/"+requestIdOrig))
453                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
454                                                 .withBody(mapper.writeValueAsString(iar))
455                                                 .withStatus(HttpStatus.SC_OK)));
456                 stubFor(post(urlPathEqualTo("/infraActiveRequests/"))
457                                 .withRequestBody(containing("operationalEnvId\":\"VNF_operationalEnvironmentId\""))
458                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
459                                                 .withStatus(HttpStatus.SC_OK)));
460                 
461                 stubFor(post(urlPathMatching("/sdc/v1/catalog/services/.*"))
462                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(jsonMessages.toString()).withStatus(HttpStatus.SC_CONFLICT)));
463
464                 stubFor(get(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
465                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(json).withStatus(HttpStatus.SC_ACCEPTED)));
466                 stubFor(put(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
467                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED)));
468                 
469                 try {
470             activateVnfStatus.execute(requestId, request);
471         }catch(ApiException e){
472             assertThat(e.getMessage(), startsWith("Failure calling SDC: statusCode: "));
473             assertEquals(e.getHttpResponseCode(), HttpStatus.SC_BAD_REQUEST);
474             assertEquals(e.getMessageID(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR);
475         }
476         }       
477         
478         @Test
479         public void executionTest_ERROR_Status_And_SKIP() throws Exception {
480                 
481                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
482                 serviceModelDb.setRequestId(requestIdOrig);
483                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
484                 serviceModelDb.setWorkloadContext(workloadContext);
485                 serviceModelDb.setRecoveryAction(recoveryActionSkip);
486                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
487                 serviceModelDb.setRetryCount(retryCountThree);
488                 serviceModelDb.setServiceModelVersionDistrStatus(statusError);
489                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);
490
491                 OperationalEnvDistributionStatus distributionDb = new OperationalEnvDistributionStatus();
492                 distributionDb.setDistributionId(sdcDistributionId);
493                 distributionDb.setRequestId(requestIdOrig);
494                 distributionDb.setOperationalEnvId(operationalEnvironmentId);
495                 distributionDb.setDistributionIdStatus(statusError);
496                 distributionDb.setServiceModelVersionId(serviceModelVersionId);
497                 distributionDb.setDistributionIdErrorReason(null);
498                 
499                 // prepare distribution obj
500                 OperationalEnvDistributionStatus  distributionStatus = new OperationalEnvDistributionStatus(sdcDistributionId,operationalEnvironmentId,serviceModelVersionId);
501                 distributionStatus.setDistributionIdStatus(Status.DISTRIBUTION_COMPLETE_ERROR.name());
502                 
503                 Distribution distribution = new Distribution();
504                 distribution.setStatus(Status.DISTRIBUTION_COMPLETE_ERROR);
505                 request.setDistribution(distribution);
506                 request.setDistributionId(sdcDistributionId);
507                 request.setOperationalEnvironmentId(operationalEnvironmentId);
508                 InfraActiveRequests iar = new InfraActiveRequests();
509                 iar.setRequestId(requestIdOrig);
510                 iar.setRequestStatus("PENDING");
511
512                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
513                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
514                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
515                                                 .withStatus(HttpStatus.SC_OK)));
516                 stubFor(get(urlPathEqualTo("/operationalEnvDistributionStatus/"+sdcDistributionId))
517                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
518                                                 .withBody(mapper.writeValueAsString(distributionDb))
519                                                 .withStatus(HttpStatus.SC_OK)));
520                 stubFor(get(urlPathEqualTo("/infraActiveRequests/"+requestIdOrig))
521                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
522                                                 .withBody(mapper.writeValueAsString(iar))
523                                                 .withStatus(HttpStatus.SC_OK)));
524                 stubFor(post(urlPathEqualTo("/operationalEnvServiceModelStatus/"))
525                                 .withRequestBody(equalTo("{\"requestId\":\"TEST_requestIdOrig\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"serviceModelVersionDistrStatus\":\"DISTRIBUTION_COMPLETE_OK\",\"recoveryAction\":\"SKIP\",\"retryCount\":0,\"workloadContext\":\"TEST_workloadContext\",\"createTime\":null,\"modifyTime\":null,\"vnfOperationalEnvId\":\"VNF_operationalEnvironmentId\"}"))
526                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
527                                                 .withStatus(HttpStatus.SC_OK)));
528
529                 stubFor(post(urlPathEqualTo("/operationalEnvDistributionStatus/"))
530                                 .withRequestBody(equalTo("{\"distributionId\":\"TEST_distributionId\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"requestId\":\"TEST_requestIdOrig\",\"distributionIdStatus\":\"DISTRIBUTION_COMPLETE_OK\",\"distributionIdErrorReason\":\"\",\"createTime\":null,\"modifyTime\":null}"))
531                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
532                                                 .withStatus(HttpStatus.SC_OK)));
533
534                 stubFor(get(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
535                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(json).withStatus(HttpStatus.SC_ACCEPTED)));
536                 stubFor(put(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
537                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED)));
538                 
539                 activateVnfStatus.execute(requestId, request);                  
540
541         }       
542         
543         @Test
544         public void executionTest_ERROR_Status_And_ABORT() throws JsonProcessingException {
545                 
546                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
547                 serviceModelDb.setRequestId(requestIdOrig);
548                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
549                 serviceModelDb.setWorkloadContext(workloadContext);
550                 serviceModelDb.setRecoveryAction(recoveryActionAbort);
551                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
552                 serviceModelDb.setRetryCount(retryCountThree);
553                 serviceModelDb.setServiceModelVersionDistrStatus(statusError);
554                 serviceModelDb.setVnfOperationalEnvId(vnfOperationalEnvironmentId);
555                 
556                 OperationalEnvDistributionStatus distributionDb = new OperationalEnvDistributionStatus();
557                 distributionDb.setDistributionId(sdcDistributionId);
558                 distributionDb.setRequestId(requestIdOrig);
559                 distributionDb.setOperationalEnvId(operationalEnvironmentId);
560                 distributionDb.setDistributionIdStatus(statusError);
561                 distributionDb.setServiceModelVersionId(serviceModelVersionId);
562                 distributionDb.setDistributionIdErrorReason(null);
563                 
564                 
565                 
566                 // prepare distribution obj
567                 Distribution distribution = new Distribution();
568                 distribution.setStatus(Status.DISTRIBUTION_COMPLETE_ERROR);
569                 request.setDistribution(distribution);
570                 request.setDistributionId(sdcDistributionId);
571                 request.setOperationalEnvironmentId(operationalEnvironmentId);
572                 
573                 InfraActiveRequests iar = new InfraActiveRequests();
574                 iar.setRequestId(requestIdOrig);
575                 iar.setRequestStatus("PENDING");
576
577                 stubFor(get(urlPathEqualTo("/operationalEnvServiceModelStatus/search/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId"))
578                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
579                                                 .withBody(mapper.writeValueAsString(serviceModelDb))
580                                                 .withStatus(HttpStatus.SC_OK)));
581                 stubFor(get(urlPathEqualTo("/operationalEnvDistributionStatus/"+sdcDistributionId))
582                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
583                                                 .withBody(mapper.writeValueAsString(distributionDb))
584                                                 .withStatus(HttpStatus.SC_OK)));
585                 stubFor(get(urlPathEqualTo("/infraActiveRequests/"+requestIdOrig))
586                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
587                                                 .withBody(mapper.writeValueAsString(iar))
588                                                 .withStatus(HttpStatus.SC_OK)));
589
590                 stubFor(post(urlPathEqualTo("/operationalEnvDistributionStatus/"))
591                                 .withRequestBody(containing("{\"distributionId\":\"TEST_distributionId\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"requestId\":\"TEST_requestIdOrig\",\"distributionIdStatus\":\"DISTRIBUTION_COMPLETE_ERROR\""))
592                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
593                                                 .withStatus(HttpStatus.SC_OK)));
594
595                 stubFor(post(urlPathEqualTo("/operationalEnvServiceModelStatus/"))
596                                 .withRequestBody(containing("{\"requestId\":\"TEST_requestIdOrig\",\"operationalEnvId\":\"TEST_operationalEnvironmentId\",\"serviceModelVersionId\":\"TEST_serviceModelVersionId\",\"serviceModelVersionDistrStatus\":\"DISTRIBUTION_COMPLETE_ERROR\""))
597                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
598                                                 .withStatus(HttpStatus.SC_OK)));
599                 
600                 stubFor(get(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
601                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(json).withStatus(HttpStatus.SC_ACCEPTED)));
602                 stubFor(put(urlPathMatching("/aai/" + AAIVersion.LATEST + "/cloud-infrastructure/operational-environments/.*"))
603                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_ACCEPTED)));
604                 
605         try {
606             activateVnfStatus.execute(requestId, request);
607         }catch(ApiException e) {
608                         assertThat(e.getMessage(), startsWith("Overall Activation process is a Failure. "));
609                         assertEquals(e.getHttpResponseCode(), HttpStatus.SC_BAD_REQUEST);
610                         assertEquals(e.getMessageID(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR);
611                 }
612                 
613         }               
614         
615         @Test
616         @Ignore
617         public void callSDClientForRetryTest_202() throws Exception {
618                 OperationalEnvServiceModelStatus serviceModelDb = new OperationalEnvServiceModelStatus();
619                 serviceModelDb.setRequestId(requestIdOrig);
620                 serviceModelDb.setServiceModelVersionId(serviceModelVersionId);
621                 serviceModelDb.setWorkloadContext(workloadContext);
622                 serviceModelDb.setRecoveryAction(recoveryActionRetry);
623                 serviceModelDb.setOperationalEnvId(operationalEnvironmentId);
624                 serviceModelDb.setRetryCount(retryCountThree);
625                 serviceModelDb.setServiceModelVersionDistrStatus(statusSent);
626
627                 OperationalEnvDistributionStatus distributionDb = new OperationalEnvDistributionStatus();
628                 distributionDb.setDistributionId(sdcDistributionId);
629                 distributionDb.setRequestId(requestIdOrig);
630                 distributionDb.setOperationalEnvId(operationalEnvironmentId);
631                 distributionDb.setDistributionIdStatus(statusSent);
632                 distributionDb.setServiceModelVersionId(serviceModelVersionId);
633                 distributionDb.setDistributionIdErrorReason(null);              
634                 
635         
636                 
637                 JSONObject jsonObject = new JSONObject();
638                 jsonObject.put("statusCode", "202");
639                 jsonObject.put("message", "Success");
640                 jsonObject.put("distributionId", sdcDistributionId1);
641         
642                 // prepare distribution obj
643                 Distribution distribution = new Distribution();
644                 distribution.setStatus(Status.DISTRIBUTION_COMPLETE_OK);
645                 request.setDistribution(distribution);
646                 request.setDistributionId(sdcDistributionId);
647                 request.setOperationalEnvironmentId(operationalEnvironmentId);          
648                 
649                 stubFor(post(urlPathMatching("/sdc/v1/catalog/services/TEST_serviceModelVersionId/distr.*"))
650                                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withBody(jsonObject.toString()).withStatus(HttpStatus.SC_ACCEPTED)));
651                 
652                 JSONObject jsonResponse = activateVnfStatus.callSDClientForRetry(distributionDb, serviceModelDb, distribution); 
653                 
654                 assertEquals("TEST_distributionId1", jsonResponse.get("distributionId")); 
655                 assertEquals("Success", jsonResponse.get("message"));
656                 assertEquals("202", jsonResponse.get("statusCode"));            
657
658         }
659 }