2 * Copyright (c) 2018 Orange
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.onap.nbi.test;
19 import static org.assertj.core.api.Assertions.assertThat;
21 import com.github.tomakehurst.wiremock.admin.model.ListStubMappingsResult;
22 import com.github.tomakehurst.wiremock.http.ResponseDefinition;
23 import com.github.tomakehurst.wiremock.stubbing.StubMapping;
24 import java.util.Calendar;
25 import java.util.Date;
26 import java.util.List;
27 import java.util.Optional;
28 import javax.validation.Validation;
29 import javax.validation.Validator;
30 import javax.validation.ValidatorFactory;
31 import org.junit.After;
32 import org.junit.AfterClass;
33 import org.junit.Before;
34 import org.junit.BeforeClass;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.onap.nbi.apis.assertions.ServiceOrderExecutionTaskAssertions;
38 import org.onap.nbi.apis.serviceorder.model.ActionType;
39 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
40 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
41 import org.onap.nbi.apis.serviceorder.model.StateType;
42 import org.onap.nbi.apis.serviceorder.model.orchestrator.ExecutionTask;
43 import org.onap.nbi.apis.serviceorder.repositories.ExecutionTaskRepository;
44 import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
45 import org.onap.nbi.apis.serviceorder.workflow.SOTaskProcessor;
46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.boot.test.context.SpringBootTest;
48 import org.springframework.mock.web.MockHttpServletRequest;
49 import org.springframework.test.annotation.DirtiesContext;
50 import org.springframework.test.annotation.DirtiesContext.ClassMode;
51 import org.springframework.test.context.ActiveProfiles;
52 import org.springframework.test.context.junit4.SpringRunner;
53 import org.springframework.web.context.request.RequestContextHolder;
54 import org.springframework.web.context.request.ServletRequestAttributes;
56 @RunWith(SpringRunner.class)
57 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
58 @ActiveProfiles("test")
59 @DirtiesContext(classMode= ClassMode.AFTER_CLASS)
60 public class ExecutionTaskTest {
63 ServiceOrderRepository serviceOrderRepository;
66 ExecutionTaskRepository executionTaskRepository;
69 SOTaskProcessor SoTaskProcessor;
72 static Validator validator;
75 public void before() {
76 MockHttpServletRequest request = new MockHttpServletRequest();
77 RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
81 public static void setUp() throws Exception {
82 ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
83 validator = factory.getValidator();
84 Context.startWiremock();
88 public static void tearsDown() throws Exception {
89 Context.stopServers();
94 public void tearsDownUpPort() throws Exception {
95 executionTaskRepository.deleteAll();
96 serviceOrderRepository.deleteAll();
97 Context.wireMockServer.resetToDefaultMappings();
102 public ExecutionTask getExecutionTask(String orderItemId) {
103 for (ExecutionTask executionTask : executionTaskRepository.findAll()) {
104 if (executionTask.getOrderItemId().equalsIgnoreCase(orderItemId)) {
105 return executionTask;
112 private void changeWireMockResponse(String s,int statusCode, String bodyContent) {
113 ListStubMappingsResult listStubMappingsResult = Context.wireMockServer.listAllStubMappings();
114 ResponseDefinition responseDefinition = new ResponseDefinition(statusCode,bodyContent);
115 List<StubMapping> mappings = listStubMappingsResult.getMappings();
116 for (StubMapping mapping : mappings) {
117 if (mapping.getRequest().getUrl().equals(s)) {
118 mapping.setResponse(responseDefinition);
124 private ServiceOrder getServiceOrder(String serviceOrderId) {
125 Optional<ServiceOrder> serviceOrderChecked = serviceOrderRepository.findById(serviceOrderId);
126 return serviceOrderChecked.get();
132 public void testExecutionTaskSuccess() throws Exception {
134 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
135 executionTaskRepository, ActionType.ADD);
136 ExecutionTask executionTaskB;
139 SoTaskProcessor.processOrderItem(executionTaskA);
140 ServiceOrder serviceOrderChecked = getServiceOrder("test");
141 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
142 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
143 if (serviceOrderItem.getId().equals("A")) {
144 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
146 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
150 executionTaskB = getExecutionTask("B");
151 assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
152 executionTaskA = getExecutionTask("A");
153 assertThat(executionTaskA).isNull();
155 SoTaskProcessor.processOrderItem(executionTaskB);
156 serviceOrderChecked = getServiceOrder("test");
157 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
158 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
159 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
163 assertThat(executionTaskRepository.count()).isEqualTo(0);
170 public void testE2EExecutionTaskSuccess() throws Exception {
172 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForE2EExecutionTaskSucess(serviceOrderRepository,
173 executionTaskRepository, ActionType.ADD);
174 ExecutionTask executionTaskB;
177 SoTaskProcessor.processOrderItem(executionTaskA);
178 ServiceOrder serviceOrderChecked = getServiceOrder("test");
179 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
180 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
181 if (serviceOrderItem.getId().equals("A")) {
182 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
184 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
188 executionTaskB = getExecutionTask("B");
189 assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
190 executionTaskA = getExecutionTask("A");
191 assertThat(executionTaskA).isNull();
193 SoTaskProcessor.processOrderItem(executionTaskB);
194 serviceOrderChecked = getServiceOrder("test");
195 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
196 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
197 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
201 assertThat(executionTaskRepository.count()).isEqualTo(0);
208 public void testExecutionTaskDeleteSuccess() throws Exception {
210 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
211 executionTaskRepository, ActionType.DELETE);
212 ExecutionTask executionTaskB;
215 SoTaskProcessor.processOrderItem(executionTaskA);
216 ServiceOrder serviceOrderChecked = getServiceOrder("test");
217 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
218 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
219 if (serviceOrderItem.getId().equals("A")) {
220 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
222 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
226 executionTaskB = getExecutionTask("B");
227 assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
228 executionTaskA = getExecutionTask("A");
229 assertThat(executionTaskA).isNull();
231 SoTaskProcessor.processOrderItem(executionTaskB);
232 serviceOrderChecked = getServiceOrder("test");
233 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
234 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
235 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
239 assertThat(executionTaskRepository.count()).isEqualTo(0);
246 public void testE2EExecutionTaskDeleteSuccess() throws Exception {
248 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForE2EExecutionTaskSucess(serviceOrderRepository,
249 executionTaskRepository, ActionType.DELETE);
250 ExecutionTask executionTaskB;
253 SoTaskProcessor.processOrderItem(executionTaskA);
254 ServiceOrder serviceOrderChecked = getServiceOrder("test");
255 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
256 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
257 if (serviceOrderItem.getId().equals("A")) {
258 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
260 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
264 executionTaskB = getExecutionTask("B");
265 assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
266 executionTaskA = getExecutionTask("A");
267 assertThat(executionTaskA).isNull();
269 SoTaskProcessor.processOrderItem(executionTaskB);
270 serviceOrderChecked = getServiceOrder("test");
271 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
272 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
273 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
277 assertThat(executionTaskRepository.count()).isEqualTo(0);
285 public void testExecutionTaskFailed() throws Exception {
287 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
288 executionTaskRepository, ActionType.ADD);
290 Context.removeWireMockMapping("/onap/so/infra/orchestrationRequests/v7/requestId");
293 SoTaskProcessor.processOrderItem(executionTaskA);
294 ServiceOrder serviceOrderChecked = getServiceOrder("test");
295 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
296 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
297 if (serviceOrderItem.getId().equals("A")) {
298 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS);
300 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
303 executionTaskA = getExecutionTask("A");
304 Date createDate = executionTaskA.getCreateDate();
305 assertThat(executionTaskA.getLastAttemptDate().getTime()> createDate.getTime()).isTrue();
307 changeCreationDate(executionTaskA);
308 SoTaskProcessor.processOrderItem(executionTaskA);
310 serviceOrderChecked = getServiceOrder("test");
311 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
312 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
313 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
317 assertThat(executionTaskRepository.count()).isEqualTo(0);
322 private void changeCreationDate(ExecutionTask executionTaskA) {
323 Calendar cal = Calendar.getInstance();
324 cal.setTime(executionTaskA.getCreateDate());
325 cal.add(Calendar.SECOND, -30);
326 executionTaskA.setCreateDate(cal.getTime());
331 public void testE2EExecutionTaskFailed() throws Exception {
333 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForE2EExecutionTaskSucess(serviceOrderRepository,
334 executionTaskRepository, ActionType.ADD);
336 Context.removeWireMockMapping("/onap/so/infra/e2eServiceInstances/v3/serviceId/operations/operationId");
339 SoTaskProcessor.processOrderItem(executionTaskA);
340 ServiceOrder serviceOrderChecked = getServiceOrder("test");
341 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
342 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
343 if (serviceOrderItem.getId().equals("A")) {
344 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS);
346 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
349 executionTaskA = getExecutionTask("A");
350 assertThat(executionTaskA.getLastAttemptDate().getTime()>executionTaskA.getCreateDate().getTime()).isTrue();
351 changeCreationDate(executionTaskA);
352 SoTaskProcessor.processOrderItem(executionTaskA);
354 serviceOrderChecked = getServiceOrder("test");
355 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
356 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
357 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
361 assertThat(executionTaskRepository.count()).isEqualTo(0);
367 public void testExecutionTaskFailedNoSoResponse() throws Exception {
369 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
370 executionTaskRepository, ActionType.ADD);
372 Context.removeWireMockMapping("/onap/so/infra/serviceInstantiation/v7/serviceInstances/");
375 SoTaskProcessor.processOrderItem(executionTaskA);
376 ServiceOrder serviceOrderChecked = getServiceOrder("test");
377 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
378 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
379 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
382 assertThat(executionTaskRepository.count()).isEqualTo(0);
389 public void testExecutionTaskFailedNoSoAndStatusResponse() throws Exception {
391 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
392 executionTaskRepository, ActionType.ADD);
394 Context.removeWireMockMapping("/onap/so/infra/serviceInstantiation/v7/serviceInstances/");
395 Context.removeWireMockMapping("/onap/so/infra/orchestrationRequests/v7/requestId");
398 SoTaskProcessor.processOrderItem(executionTaskA);
399 ServiceOrder serviceOrderChecked = getServiceOrder("test");
400 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
401 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
402 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
405 assertThat(executionTaskRepository.count()).isEqualTo(0);
410 public void testE2EExecutionTaskFailedNoSoAndStatusResponse() throws Exception {
412 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForE2EExecutionTaskSucess(serviceOrderRepository,
413 executionTaskRepository, ActionType.ADD);
415 Context.removeWireMockMapping("/onap/so/infra/e2eServiceInstances/v3");
416 Context.removeWireMockMapping("/onap/so/infra/e2eServiceInstances/v3/serviceId/operations/operationId");
419 SoTaskProcessor.processOrderItem(executionTaskA);
420 ServiceOrder serviceOrderChecked = getServiceOrder("test");
421 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
422 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
423 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
426 assertThat(executionTaskRepository.count()).isEqualTo(0);
432 public void testExecutionTaskFailedBadRequestSo() throws Exception {
434 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
435 executionTaskRepository, ActionType.ADD);
438 changeWireMockResponse("/onap/so/infra/serviceInstantiation/v7/serviceInstances/",400,"\"serviceException\": {\n"
439 + " \"messageId\": \"SVC0002\",\n"
440 + " \"text\": \"Error parsing request. org.openecomp.mso.apihandler.common.ValidationException: serviceInstance already existsd\"\n"
444 SoTaskProcessor.processOrderItem(executionTaskA);
445 ServiceOrder serviceOrderChecked = getServiceOrder("test");
446 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
447 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
448 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
451 assertThat(executionTaskRepository.count()).isEqualTo(0);
453 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
454 if(serviceOrderItem.getId().equals("A")) {
455 assertThat(serviceOrderItem.getOrderItemMessage().size()).isEqualTo(1);
456 assertThat(serviceOrderItem.getOrderItemMessage().get(0).getCode()).isEqualTo("105");
457 assertThat(serviceOrderItem.getOrderItemMessage().get(0).getField()).isEqualTo("service.name");
465 public void testExecutionTaskModifySuccess() throws Exception {
467 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
468 executionTaskRepository, ActionType.MODIFY);
469 ExecutionTask executionTaskB;
472 SoTaskProcessor.processOrderItem(executionTaskA);
473 ServiceOrder serviceOrderChecked = getServiceOrder("test");
474 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
475 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
476 if (serviceOrderItem.getId().equals("A")) {
477 //assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS);
478 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS_MODIFY_ITEM_TO_CREATE);
480 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
483 SoTaskProcessor.processOrderItem(executionTaskA);
484 serviceOrderChecked = getServiceOrder("test");
485 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
486 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
487 if (serviceOrderItem.getId().equals("A")) {
488 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
490 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
494 executionTaskB = getExecutionTask("B");
495 assertThat(executionTaskB.getReliedTasks()).isNullOrEmpty();
496 executionTaskA = getExecutionTask("A");
497 assertThat(executionTaskA).isNull();
499 SoTaskProcessor.processOrderItem(executionTaskB);
500 SoTaskProcessor.processOrderItem(executionTaskB);
502 serviceOrderChecked = getServiceOrder("test");
503 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.COMPLETED);
504 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
505 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.COMPLETED);
509 assertThat(executionTaskRepository.count()).isEqualTo(0);
517 public void testExecutionTaskModifyFailed() throws Exception {
519 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
520 executionTaskRepository, ActionType.MODIFY);
521 ExecutionTask executionTaskB;
522 Context.removeWireMockMapping("/onap/so/infra/orchestrationRequests/v7/requestId");
525 SoTaskProcessor.processOrderItem(executionTaskA);
526 ServiceOrder serviceOrderChecked = getServiceOrder("test");
527 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.INPROGRESS);
528 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
529 if (serviceOrderItem.getId().equals("A")) {
530 //assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS);
531 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.INPROGRESS_MODIFY_REQUEST_DELETE_SEND);
533 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.ACKNOWLEDGED);
536 executionTaskA = getExecutionTask("A");
537 assertThat(executionTaskA.getLastAttemptDate().getTime()>executionTaskA.getCreateDate().getTime()).isTrue();
538 changeCreationDate(executionTaskA);
539 SoTaskProcessor.processOrderItem(executionTaskA);
541 serviceOrderChecked = getServiceOrder("test");
542 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
543 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
544 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
548 assertThat(executionTaskRepository.count()).isEqualTo(0);
553 public void testExecutionTaskWithoutOnap() throws Exception {
554 Context.stopWiremock();
555 ExecutionTask executionTaskA = ServiceOrderExecutionTaskAssertions.setUpBddForExecutionTaskSucess(serviceOrderRepository,
556 executionTaskRepository, ActionType.ADD);
558 SoTaskProcessor.processOrderItem(executionTaskA);
559 ServiceOrder serviceOrderChecked = getServiceOrder("test");
560 assertThat(serviceOrderChecked.getState()).isEqualTo(StateType.FAILED);
561 for (ServiceOrderItem serviceOrderItem : serviceOrderChecked.getOrderItem()) {
562 assertThat(serviceOrderItem.getState()).isEqualTo(StateType.FAILED);
564 assertThat(serviceOrderChecked.getOrderMessage().size()).isGreaterThan(0);
565 assertThat(serviceOrderChecked.getOrderMessage().get(0).getCode()).isEqualTo("502");
566 assertThat(serviceOrderChecked.getOrderMessage().get(0).getMessageInformation()).isEqualTo("Problem with SO API");
568 assertThat(executionTaskRepository.count()).isEqualTo(0);
569 Context.startWiremock();