26328724ac85419a49c81b68cdb094d74869f27c
[externalapi/nbi.git] / src / test / java / org / onap / nbi / test / ExecutionTaskTest.java
1 /**
2  * Copyright (c) 2018 Orange
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the License
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11  * or implied. See the License for the specific language governing permissions and limitations under
12  * the License.
13  */
14
15 package org.onap.nbi.test;
16
17 import static org.assertj.core.api.Assertions.assertThat;
18 import java.util.Calendar;
19 import java.util.Date;
20 import java.util.List;
21 import java.util.Optional;
22 import javax.validation.Validation;
23 import javax.validation.Validator;
24 import javax.validation.ValidatorFactory;
25 import org.junit.After;
26 import org.junit.AfterClass;
27 import org.junit.Before;
28 import org.junit.BeforeClass;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.onap.nbi.apis.assertions.ServiceOrderExecutionTaskAssertions;
32 import org.onap.nbi.apis.serviceorder.model.ActionType;
33 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
34 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
35 import org.onap.nbi.apis.serviceorder.model.StateType;
36 import org.onap.nbi.apis.serviceorder.model.orchestrator.ExecutionTask;
37 import org.onap.nbi.apis.serviceorder.repositories.ExecutionTaskRepository;
38 import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
39 import org.onap.nbi.apis.serviceorder.workflow.SOTaskProcessor;
40 import org.springframework.beans.factory.annotation.Autowired;
41 import org.springframework.boot.test.context.SpringBootTest;
42 import org.springframework.mock.web.MockHttpServletRequest;
43 import org.springframework.test.annotation.DirtiesContext;
44 import org.springframework.test.annotation.DirtiesContext.ClassMode;
45 import org.springframework.test.context.ActiveProfiles;
46 import org.springframework.test.context.junit4.SpringRunner;
47 import org.springframework.web.context.request.RequestContextHolder;
48 import org.springframework.web.context.request.ServletRequestAttributes;
49 import com.github.tomakehurst.wiremock.admin.model.ListStubMappingsResult;
50 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
51 import com.github.tomakehurst.wiremock.stubbing.StubMapping;
52
53 @RunWith(SpringRunner.class)
54 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
55 @ActiveProfiles("test")
56 @DirtiesContext(classMode = ClassMode.AFTER_CLASS)
57 public class ExecutionTaskTest {
58
59     @Autowired
60     ServiceOrderRepository serviceOrderRepository;
61
62     @Autowired
63     ExecutionTaskRepository executionTaskRepository;
64
65     @Autowired
66     SOTaskProcessor SoTaskProcessor;
67
68     static Validator validator;
69
70     @Before
71     public void before() {
72         MockHttpServletRequest request = new MockHttpServletRequest();
73         RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
74     }
75
76     @BeforeClass
77     public static void setUp() throws Exception {
78         ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
79         validator = factory.getValidator();
80         Context.startWiremock();
81     }
82
83     @AfterClass
84     public static void tearsDown() throws Exception {
85         Context.stopServers();
86
87     }
88
89     @After
90     public void tearsDownUpPort() throws Exception {
91         executionTaskRepository.deleteAll();
92         serviceOrderRepository.deleteAll();
93         Context.wireMockServer.resetToDefaultMappings();
94
95     }
96
97     public ExecutionTask getExecutionTask(String orderItemId) {
98         for (ExecutionTask executionTask : executionTaskRepository.findAll()) {
99             if (executionTask.getOrderItemId().equalsIgnoreCase(orderItemId)) {
100                 return executionTask;
101             }
102
103         }
104         return null;
105     }
106
107     private void changeWireMockResponse(String s, int statusCode, String bodyContent) {
108         ListStubMappingsResult listStubMappingsResult = Context.wireMockServer.listAllStubMappings();
109         ResponseDefinition responseDefinition = new ResponseDefinition(statusCode, bodyContent);
110         List<StubMapping> mappings = listStubMappingsResult.getMappings();
111         for (StubMapping mapping : mappings) {
112             if (mapping.getRequest().getUrl().equals(s)) {
113                 mapping.setResponse(responseDefinition);
114             }
115         }
116     }
117
118     private ServiceOrder getServiceOrder(String serviceOrderId) {
119         Optional<ServiceOrder> serviceOrderChecked = serviceOrderRepository.findById(serviceOrderId);
120         return serviceOrderChecked.get();
121     }
122
123     @Test
124     public void testExecutionTaskSuccess() throws Exception {
125
126         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
127                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
128         ExecutionTask executionTaskB;
129
130         SoTaskProcessor.processOrderItem(executionTaskA);
131         ServiceOrder serviceOrderChecked = getServiceOrder("test");
132         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
133         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
134             if (serviceOrderItem.getId().equals("A")) {
135                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
136             } else {
137                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
138             }
139         }
140
141         executionTaskB = getExecutionTask("B");
142         assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
143         executionTaskA = getExecutionTask("A");
144         assertThat(executionTaskA).isNull();
145
146         SoTaskProcessor.processOrderItem(executionTaskB);
147         serviceOrderChecked = getServiceOrder("test");
148         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
149         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
150             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
151
152         }
153
154         assertThat(executionTaskRepository.count()).isEqualTo(0);
155
156     }
157
158     @Test
159     public void testE2EExecutionTaskSuccess() throws Exception {
160
161         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
162                 .setUpBddForE2EExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
163         ExecutionTask executionTaskB;
164
165         SoTaskProcessor.processOrderItem(executionTaskA);
166         ServiceOrder serviceOrderChecked = getServiceOrder("test");
167         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
168         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
169             if (serviceOrderItem.getId().equals("A")) {
170                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
171             } else {
172                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
173             }
174         }
175
176         executionTaskB = getExecutionTask("B");
177         assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
178         executionTaskA = getExecutionTask("A");
179         assertThat(executionTaskA).isNull();
180
181         SoTaskProcessor.processOrderItem(executionTaskB);
182         serviceOrderChecked = getServiceOrder("test");
183         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
184         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
185             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
186
187         }
188
189         assertThat(executionTaskRepository.count()).isEqualTo(0);
190
191     }
192
193     @Test
194     public void testE2EExecutionTaskSuccessWithObject() throws Exception {
195
196         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForE2EExecutionTaskSucessWithObject(
197                 serviceOrderRepository, executionTaskRepository, ActionType.ADD);
198         ExecutionTask executionTaskB;
199
200         SoTaskProcessor.processOrderItem(executionTaskA);
201         ServiceOrder serviceOrderChecked = getServiceOrder("test");
202         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
203         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
204             if (serviceOrderItem.getId().equals("A")) {
205                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
206             } else {
207                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
208             }
209         }
210
211         executionTaskB = getExecutionTask("B");
212         assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
213         executionTaskA = getExecutionTask("A");
214         assertThat(executionTaskA).isNull();
215
216         SoTaskProcessor.processOrderItem(executionTaskB);
217         serviceOrderChecked = getServiceOrder("test");
218         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
219         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
220             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
221
222         }
223
224         assertThat(executionTaskRepository.count()).isEqualTo(0);
225
226     }
227
228     @Test
229     public void testE2EExecutionTaskSuccessWithComplexObject() throws Exception {
230         // A Service Order with complex object including arrays
231         ExecutionTask executionTaskA =
232                 ServiceOrderExecutionTaskAssertions.setUpBddForE2EExecutionTaskSucessWithComplexObject(
233                         serviceOrderRepository, executionTaskRepository, ActionType.ADD);
234         ExecutionTask executionTaskB;
235
236         SoTaskProcessor.processOrderItem(executionTaskA);
237         ServiceOrder serviceOrderChecked = getServiceOrder("test");
238         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
239         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
240             if (serviceOrderItem.getId().equals("A")) {
241                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
242             } else {
243                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
244             }
245         }
246
247         executionTaskB = getExecutionTask("B");
248         assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
249         executionTaskA = getExecutionTask("A");
250         assertThat(executionTaskA).isNull();
251
252         SoTaskProcessor.processOrderItem(executionTaskB);
253         serviceOrderChecked = getServiceOrder("test");
254         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
255         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
256             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
257
258         }
259
260         assertThat(executionTaskRepository.count()).isEqualTo(0);
261
262     }
263
264     @Test
265     public void testExecutionTaskDeleteSuccess() throws Exception {
266
267         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
268                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.DELETE);
269         ExecutionTask executionTaskB;
270
271         SoTaskProcessor.processOrderItem(executionTaskA);
272         ServiceOrder serviceOrderChecked = getServiceOrder("test");
273         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
274         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
275             if (serviceOrderItem.getId().equals("A")) {
276                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
277             } else {
278                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
279             }
280         }
281
282         executionTaskB = getExecutionTask("B");
283         assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
284         executionTaskA = getExecutionTask("A");
285         assertThat(executionTaskA).isNull();
286
287         SoTaskProcessor.processOrderItem(executionTaskB);
288         serviceOrderChecked = getServiceOrder("test");
289         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
290         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
291             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
292
293         }
294
295         assertThat(executionTaskRepository.count()).isEqualTo(0);
296
297     }
298
299     @Test
300     public void testE2EExecutionTaskDeleteSuccess() throws Exception {
301
302         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
303                 .setUpBddForE2EExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.DELETE);
304         ExecutionTask executionTaskB;
305
306         SoTaskProcessor.processOrderItem(executionTaskA);
307         ServiceOrder serviceOrderChecked = getServiceOrder("test");
308         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
309         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
310             if (serviceOrderItem.getId().equals("A")) {
311                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
312             } else {
313                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
314             }
315         }
316
317         executionTaskB = getExecutionTask("B");
318         assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
319         executionTaskA = getExecutionTask("A");
320         assertThat(executionTaskA).isNull();
321
322         SoTaskProcessor.processOrderItem(executionTaskB);
323         serviceOrderChecked = getServiceOrder("test");
324         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
325         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
326             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
327
328         }
329
330         assertThat(executionTaskRepository.count()).isEqualTo(0);
331
332     }
333     
334  // Macro Flow Execution Task
335         @Test
336         public void testMacroExecutionTaskSuccess() throws Exception {
337
338                 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
339                                 .setUpBddForMacroExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
340                 ExecutionTask executionTaskB;
341
342                 SoTaskProcessor.processOrderItem(executionTaskA);
343                 ServiceOrder serviceOrderChecked = getServiceOrder("test");
344                 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
345                 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
346                         if (serviceOrderItem.getId().equals("A")) {
347                                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
348                         } else {
349                                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
350                         }
351                 }
352
353                 executionTaskB = getExecutionTask("B");
354                 assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
355                 executionTaskA = getExecutionTask("A");
356                 assertThat(executionTaskA).isNull();
357
358                 SoTaskProcessor.processOrderItem(executionTaskB);
359                 serviceOrderChecked = getServiceOrder("test");
360
361                 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
362                 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
363                         assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
364
365                 }
366         }
367         
368         // Macro Flow Execution Task for VNF with Service and VNF level Params
369          @Test
370             public void testMacroExecutionTaskSuccessForVNFWithServceAndVnfLevelParams() throws Exception {
371
372                 ExecutionTask executionTaskA =
373                     ServiceOrderExecutionTaskAssertions.setUpBddForMacroExecutionTaskSucessVnf(
374                         serviceOrderRepository, executionTaskRepository, ActionType.ADD);
375                 ExecutionTask executionTaskB;
376
377                 SoTaskProcessor.processOrderItem(executionTaskA);
378                 ServiceOrder serviceOrderChecked = getServiceOrder("test");
379                 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
380                 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
381                     if (serviceOrderItem.getId().equals("A")) {
382                         assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
383                     } else {
384                         assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
385                     }
386                 }
387
388                 executionTaskB = getExecutionTask("B");
389                 assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
390                 executionTaskA = getExecutionTask("A");
391                 assertThat(executionTaskA).isNull();
392
393                 SoTaskProcessor.processOrderItem(executionTaskB);
394                 serviceOrderChecked = getServiceOrder("test");
395
396                 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
397                 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
398                     assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
399
400                 }
401             }
402         
403         // Macro Flow Execution Task with CNF with InstanceParams
404                 @Test
405                 public void testMacroExecutionTaskSuccessforCNFWithServiceAndVNFLevelParams() throws Exception {
406
407                         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
408                                         .setUpBddForMacroExecutionTaskSucessForCNF(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
409                         ExecutionTask executionTaskB;
410
411                         SoTaskProcessor.processOrderItem(executionTaskA);
412                         ServiceOrder serviceOrderChecked = getServiceOrder("test");
413                         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
414                         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
415                                 if (serviceOrderItem.getId().equals("A")) {
416                                         assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
417                                 } else {
418                                         assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
419                                 }
420                         }
421
422                         executionTaskB = getExecutionTask("B");
423                         assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
424                         executionTaskA = getExecutionTask("A");
425                         assertThat(executionTaskA).isNull();
426
427                         SoTaskProcessor.processOrderItem(executionTaskB);
428                         serviceOrderChecked = getServiceOrder("test");
429
430                         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
431                         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
432                                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
433
434                         }
435                 }
436     
437     @Test
438     public void testExecutionTaskFailed() throws Exception {
439
440         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
441                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
442
443         Context.removeWireMockMapping("/onap/so/infra/orchestrationRequests/v7/requestId");
444
445         SoTaskProcessor.processOrderItem(executionTaskA);
446         ServiceOrder serviceOrderChecked = getServiceOrder("test");
447         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
448         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
449             if (serviceOrderItem.getId().equals("A")) {
450                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS);
451             } else {
452                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
453             }
454         }
455         executionTaskA = getExecutionTask("A");
456         Date createDate = executionTaskA.getCreateDate();
457         assertThat(executionTaskA.getLastAttemptDate().getTime() > createDate.getTime()).isTrue();
458
459         changeCreationDate(executionTaskA);
460         SoTaskProcessor.processOrderItem(executionTaskA);
461
462         serviceOrderChecked = getServiceOrder("test");
463         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
464         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
465             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
466
467         }
468
469         assertThat(executionTaskRepository.count()).isEqualTo(0);
470
471     }
472
473     private void changeCreationDate(ExecutionTask executionTaskA) {
474         Calendar cal = Calendar.getInstance();
475         cal.setTime(executionTaskA.getCreateDate());
476         cal.add(Calendar.SECOND, -30);
477         executionTaskA.setCreateDate(cal.getTime());
478     }
479
480     @Test
481     public void testE2EExecutionTaskFailed() throws Exception {
482
483         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
484                 .setUpBddForE2EExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
485
486         Context.removeWireMockMapping("/onap/so/infra/e2eServiceInstances/v3/serviceId/operations/operationId");
487
488         SoTaskProcessor.processOrderItem(executionTaskA);
489         ServiceOrder serviceOrderChecked = getServiceOrder("test");
490         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
491         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
492             if (serviceOrderItem.getId().equals("A")) {
493                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS);
494             } else {
495                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
496             }
497         }
498         executionTaskA = getExecutionTask("A");
499         assertThat(executionTaskA.getLastAttemptDate().getTime() > executionTaskA.getCreateDate().getTime()).isTrue();
500         changeCreationDate(executionTaskA);
501         SoTaskProcessor.processOrderItem(executionTaskA);
502
503         serviceOrderChecked = getServiceOrder("test");
504         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
505         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
506             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
507
508         }
509
510         assertThat(executionTaskRepository.count()).isEqualTo(0);
511
512     }
513
514     @Test
515     public void testExecutionTaskFailedNoSoResponse() throws Exception {
516
517         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
518                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
519
520         Context.removeWireMockMapping("/onap/so/infra/serviceInstantiation/v7/serviceInstances");
521
522         SoTaskProcessor.processOrderItem(executionTaskA);
523         ServiceOrder serviceOrderChecked = getServiceOrder("test");
524         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
525         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
526             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
527         }
528
529         assertThat(executionTaskRepository.count()).isEqualTo(0);
530
531     }
532
533     @Test
534     public void testExecutionTaskFailedNoSoAndStatusResponse() throws Exception {
535
536         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
537                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
538
539         Context.removeWireMockMapping("/onap/so/infra/serviceInstantiation/v7/serviceInstances");
540         Context.removeWireMockMapping("/onap/so/infra/orchestrationRequests/v7/requestId");
541
542         SoTaskProcessor.processOrderItem(executionTaskA);
543         ServiceOrder serviceOrderChecked = getServiceOrder("test");
544         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
545         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
546             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
547         }
548
549         assertThat(executionTaskRepository.count()).isEqualTo(0);
550
551     }
552
553     @Test
554     public void testE2EExecutionTaskFailedNoSoAndStatusResponse() throws Exception {
555
556         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
557                 .setUpBddForE2EExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
558
559         Context.removeWireMockMapping("/onap/so/infra/e2eServiceInstances/v3");
560         Context.removeWireMockMapping("/onap/so/infra/e2eServiceInstances/v3/serviceId/operations/operationId");
561
562         SoTaskProcessor.processOrderItem(executionTaskA);
563         ServiceOrder serviceOrderChecked = getServiceOrder("test");
564         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
565         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
566             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
567         }
568
569         assertThat(executionTaskRepository.count()).isEqualTo(0);
570
571     }
572
573     @Test
574     public void testExecutionTaskFailedBadRequestSo() throws Exception {
575
576         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
577                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
578
579         changeWireMockResponse("/onap/so/infra/serviceInstantiation/v7/serviceInstances", 400,
580                 "\"serviceException\": {\n" + "        \"messageId\": \"SVC0002\",\n"
581                         + "        \"text\": \"Error parsing request.  org.openecomp.mso.apihandler.common.ValidationException: serviceInstance already existsd\"\n"
582                         + "    }");
583
584         SoTaskProcessor.processOrderItem(executionTaskA);
585         ServiceOrder serviceOrderChecked = getServiceOrder("test");
586         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
587         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
588             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
589         }
590
591         assertThat(executionTaskRepository.count()).isEqualTo(0);
592
593         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
594             if (serviceOrderItem.getId().equals("A")) {
595                 assertThat(serviceOrderItem.getOrderItemMessage().size()).isEqualTo(1);
596                 assertThat(serviceOrderItem.getOrderItemMessage().get(0).getCode()).isEqualTo("105");
597                 assertThat(serviceOrderItem.getOrderItemMessage().get(0).getField()).isEqualTo("service.name");
598             }
599         }
600
601     }
602
603     @Test
604     public void testExecutionTaskModifySuccess() throws Exception {
605
606         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
607                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.MODIFY);
608         ExecutionTask executionTaskB;
609
610         SoTaskProcessor.processOrderItem(executionTaskA);
611         ServiceOrder serviceOrderChecked = getServiceOrder("test");
612         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
613         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
614             if (serviceOrderItem.getId().equals("A")) {
615                 // assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS);
616                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS_MODIFY_ITEM_TO_CREATE);
617             } else {
618                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
619             }
620         }
621         SoTaskProcessor.processOrderItem(executionTaskA);
622         serviceOrderChecked = getServiceOrder("test");
623         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
624         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
625             if (serviceOrderItem.getId().equals("A")) {
626                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
627             } else {
628                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
629             }
630         }
631
632         executionTaskB = getExecutionTask("B");
633         assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
634         executionTaskA = getExecutionTask("A");
635         assertThat(executionTaskA).isNull();
636
637         SoTaskProcessor.processOrderItem(executionTaskB);
638         SoTaskProcessor.processOrderItem(executionTaskB);
639
640         serviceOrderChecked = getServiceOrder("test");
641         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
642         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
643             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
644
645         }
646
647         assertThat(executionTaskRepository.count()).isEqualTo(0);
648
649     }
650
651     @Test
652     public void testExecutionTaskModifyFailed() throws Exception {
653
654         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
655                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.MODIFY);
656         ExecutionTask executionTaskB;
657         Context.removeWireMockMapping("/onap/so/infra/orchestrationRequests/v7/requestId");
658
659         SoTaskProcessor.processOrderItem(executionTaskA);
660         ServiceOrder serviceOrderChecked = getServiceOrder("test");
661         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
662         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
663             if (serviceOrderItem.getId().equals("A")) {
664                 // assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS);
665                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS_MODIFY_REQUEST_DELETE_SEND);
666             } else {
667                 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
668             }
669         }
670         executionTaskA = getExecutionTask("A");
671         assertThat(executionTaskA.getLastAttemptDate().getTime() > executionTaskA.getCreateDate().getTime()).isTrue();
672         changeCreationDate(executionTaskA);
673         SoTaskProcessor.processOrderItem(executionTaskA);
674
675         serviceOrderChecked = getServiceOrder("test");
676         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
677         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
678             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
679
680         }
681
682         assertThat(executionTaskRepository.count()).isEqualTo(0);
683
684     }
685
686     @Test
687     public void testExecutionTaskWithoutOnap() throws Exception {
688         Context.stopWiremock();
689         ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions
690                 .setUpBddForExecutionTaskSucess(serviceOrderRepository, executionTaskRepository, ActionType.ADD);
691
692         SoTaskProcessor.processOrderItem(executionTaskA);
693         ServiceOrder serviceOrderChecked = getServiceOrder("test");
694         assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
695         for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
696             assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
697         }
698         assertThat(serviceOrderChecked.getOrderMessage().size()).isGreaterThan(0);
699         assertThat(serviceOrderChecked.getOrderMessage().get(0).getCode()).isEqualTo("502");
700         assertThat(serviceOrderChecked.getOrderMessage().get(0).getMessageInformation())
701                 .isEqualTo("Problem with SO API");
702
703         assertThat(executionTaskRepository.count()).isEqualTo(0);
704         Context.startWiremock();
705
706     }
707
708 }