From 05733ab5105f440e44eb56dc37e6d14615c36454 Mon Sep 17 00:00:00 2001 From: EzekielaRakotoarijaona Date: Fri, 11 Jan 2019 14:53:30 +0100 Subject: Fix unit testing instability Migration of most of the unit tests from JUnit to Karate Framework Remove of the scheduling tasks for testing. Change-Id: Ic51378443bd6c12f247fa50b2b08ee881264dac4 Issue-ID: EXTAPI-178 Signed-off-by: EzekielaRakotoarijaona --- src/main/java/org/onap/nbi/Application.java | 21 ++++++---- .../apis/serviceorder/ServiceOrderResource.java | 46 +++++++++++---------- .../workflow/ExecutionTaskProcessorScheduler.java | 44 ++++++++++++++++++++ .../apis/serviceorder/workflow/SOTaskManager.java | 15 ++----- .../workflow/ServiceOrderCheckScheduler.java | 48 ++++++++++++++++++++++ .../onap/nbi/configuration/RestConfiguration.java | 1 + 6 files changed, 134 insertions(+), 41 deletions(-) create mode 100644 src/main/java/org/onap/nbi/apis/serviceorder/workflow/ExecutionTaskProcessorScheduler.java create mode 100644 src/main/java/org/onap/nbi/apis/serviceorder/workflow/ServiceOrderCheckScheduler.java (limited to 'src/main/java') diff --git a/src/main/java/org/onap/nbi/Application.java b/src/main/java/org/onap/nbi/Application.java index 05588b4..9f77ffe 100644 --- a/src/main/java/org/onap/nbi/Application.java +++ b/src/main/java/org/onap/nbi/Application.java @@ -1,22 +1,21 @@ /** * Copyright (c) 2018 Orange *

- * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

- * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. */ package org.onap.nbi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication @@ -24,7 +23,11 @@ import org.springframework.scheduling.annotation.EnableAsync; public class Application { public static void main(String[] args) { - SpringApplication.run(Application.class, args); + run(args); + } + + public static ConfigurableApplicationContext run(String[] args) { + return SpringApplication.run(Application.class, args); } } diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/ServiceOrderResource.java b/src/main/java/org/onap/nbi/apis/serviceorder/ServiceOrderResource.java index e3f4442..2cd1c9a 100644 --- a/src/main/java/org/onap/nbi/apis/serviceorder/ServiceOrderResource.java +++ b/src/main/java/org/onap/nbi/apis/serviceorder/ServiceOrderResource.java @@ -33,8 +33,6 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.util.MultiValueMap; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.*; @@ -44,11 +42,8 @@ import java.util.List; @RestController @RequestMapping("/serviceOrder") -@EnableScheduling public class ServiceOrderResource extends ResourceManagement { - - @Autowired ServiceOrderService serviceOrderService; @@ -71,6 +66,8 @@ public class ServiceOrderResource extends ResourceManagement { MultiCriteriaRequestBuilder multiCriteriaRequestBuilder; + + @GetMapping(value = "/{serviceOrderId}", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getServiceOrder(@PathVariable String serviceOrderId, @RequestParam MultiValueMap params) { @@ -123,26 +120,33 @@ public class ServiceOrderResource extends ResourceManagement { } - @Scheduled(fixedDelay = 5000) - public void scheduleCheckServiceOrders() { - List acknowledgedOrders = serviceOrderService.findServiceOrdersByState(StateType.ACKNOWLEDGED); - for (ServiceOrder serviceOrder : acknowledgedOrders) { - ServiceOrderInfo serviceOrderInfo = checkOrderConsistenceManager.checkServiceOrder(serviceOrder); - if (serviceOrderInfo.isServiceOrderRejected()) { - serviceOrderService.updateOrderState(serviceOrder, StateType.REJECTED); - } else if (serviceOrderInfo.isAllItemsCompleted()) { - serviceOrderService.updateOrderState(serviceOrder, StateType.COMPLETED); - } else { - createAAICustomer.createAAICustomer(serviceOrder,serviceOrderInfo); + + @PutMapping(value = "/test/{serviceOrderId}",consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity checkServiceOrderRessource(@PathVariable String serviceOrderId,@RequestParam MultiValueMap params){ + ServiceOrder serviceOrder = serviceOrderService.findServiceOrderById(serviceOrderId); + serviceOrder = checkServiceOrder(serviceOrder); + JsonRepresentation filter = new JsonRepresentation(params); + return this.createResponse(serviceOrder,filter); + } + + + public ServiceOrder checkServiceOrder(ServiceOrder serviceOrder) { + ServiceOrderInfo serviceOrderInfo = checkOrderConsistenceManager.checkServiceOrder(serviceOrder); + if (serviceOrderInfo.isServiceOrderRejected()) { + serviceOrderService.updateOrderState(serviceOrder, StateType.REJECTED); + } else if (serviceOrderInfo.isAllItemsCompleted()) { + serviceOrderService.updateOrderState(serviceOrder, StateType.COMPLETED); + } else { + createAAICustomer.createAAICustomer(serviceOrder,serviceOrderInfo); + if(StateType.ACKNOWLEDGED==serviceOrder.getState()) { + createAAIServiceType.createAAIServiceType(serviceOrder, serviceOrderInfo); if(StateType.ACKNOWLEDGED==serviceOrder.getState()) { - createAAIServiceType.createAAIServiceType(serviceOrder, serviceOrderInfo); - if(StateType.ACKNOWLEDGED==serviceOrder.getState()) { - serviceOrchestratorManager.registerServiceOrder(serviceOrder, serviceOrderInfo); - } + serviceOrchestratorManager.registerServiceOrder(serviceOrder, serviceOrderInfo); } - } + } + return serviceOrder; } } diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/ExecutionTaskProcessorScheduler.java b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/ExecutionTaskProcessorScheduler.java new file mode 100644 index 0000000..ee72515 --- /dev/null +++ b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/ExecutionTaskProcessorScheduler.java @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2018 Orange + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ +package org.onap.nbi.apis.serviceorder.workflow; + +import java.util.List; +import org.onap.nbi.apis.serviceorder.model.orchestrator.ExecutionTask; +import org.onap.nbi.apis.serviceorder.repositories.ExecutionTaskRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +@Profile("default") +@Service +@EnableScheduling +public class ExecutionTaskProcessorScheduler { + + @Autowired + ExecutionTaskRepository executionTaskRepository; + + @Autowired + SOTaskProcessor soTaskProcessor; + + // Using fixedDelay to mitigate against Scheduler queue backlog with fixedRate + @Scheduled(fixedDelayString = "${executionTask.schedule}", initialDelayString = "${executionTask.initial}") + private void processExecutionPlan() throws InterruptedException { + List taskToExecute = executionTaskRepository.findByReliedTasksIsEmpty(); + for (ExecutionTask executionTask : taskToExecute) { + soTaskProcessor.processOrderItem(executionTask); + } + } +} diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskManager.java b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskManager.java index be8bdc0..26569f6 100644 --- a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskManager.java +++ b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/SOTaskManager.java @@ -12,8 +12,6 @@ */ package org.onap.nbi.apis.serviceorder.workflow; -import java.util.*; -import java.util.Map.Entry; import org.onap.nbi.apis.serviceorder.model.OrderItemRelationship; import org.onap.nbi.apis.serviceorder.model.ServiceOrder; import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem; @@ -25,9 +23,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.Map.Entry; + @Service @EnableScheduling public class SOTaskManager { @@ -94,12 +94,5 @@ public class SOTaskManager { registerOrderItemExecutionPlan(serviceOrder.getOrderItem(), serviceOrderInfoJson); } - // Using fixedDelay to mitigate against Scheduler queue backlog with fixedRate - @Scheduled(fixedDelay = 2000) - private void processExecutionPlan() throws InterruptedException { - List taskToExecute = executionTaskRepository.findByReliedTasksIsEmpty(); - for (ExecutionTask executionTask : taskToExecute) { - soTaskProcessor.processOrderItem(executionTask); - } - } + } diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/workflow/ServiceOrderCheckScheduler.java b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/ServiceOrderCheckScheduler.java new file mode 100644 index 0000000..0d9f050 --- /dev/null +++ b/src/main/java/org/onap/nbi/apis/serviceorder/workflow/ServiceOrderCheckScheduler.java @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2018 Orange + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ +package org.onap.nbi.apis.serviceorder.workflow; + +import java.util.List; +import org.onap.nbi.apis.serviceorder.ServiceOrderResource; +import org.onap.nbi.apis.serviceorder.model.ServiceOrder; +import org.onap.nbi.apis.serviceorder.model.StateType; +import org.onap.nbi.apis.serviceorder.service.ServiceOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +@Profile("default") +@Service +@EnableScheduling +public class ServiceOrderCheckScheduler { + + @Autowired + ServiceOrderService serviceOrderService; + + @Autowired + ServiceOrderResource serviceOrderResource; + + + @Scheduled(fixedDelayString = "${serviceOrder.schedule}", initialDelayString = "${serviceOrder.initial}") + public void scheduleCheckServiceOrders() { + List acknowledgedOrders = serviceOrderService + .findServiceOrdersByState(StateType.ACKNOWLEDGED); + for (ServiceOrder serviceOrder : acknowledgedOrders) { + serviceOrderResource.checkServiceOrder(serviceOrder); + } + } + +} diff --git a/src/main/java/org/onap/nbi/configuration/RestConfiguration.java b/src/main/java/org/onap/nbi/configuration/RestConfiguration.java index 835ce24..92108a4 100644 --- a/src/main/java/org/onap/nbi/configuration/RestConfiguration.java +++ b/src/main/java/org/onap/nbi/configuration/RestConfiguration.java @@ -21,6 +21,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; + @Configuration public class RestConfiguration { -- cgit 1.2.3-korg