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 + src/main/resources/application-test.properties | 72 ++++++++++++++ src/main/resources/application.properties | 104 +++++++++++---------- 8 files changed, 263 insertions(+), 88 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 create mode 100644 src/main/resources/application-test.properties (limited to 'src/main') 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 { diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties new file mode 100644 index 0000000..b890216 --- /dev/null +++ b/src/main/resources/application-test.properties @@ -0,0 +1,72 @@ +# +# 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. +# + +nbi.version = v3 + +# SERVER +server.contextPath = /nbi/api/${nbi.version} +server.port = 8080 + +# LOGGING +logging.level. = ERROR + +# ONAP +onap.lcpCloudRegionId = RegionOne +onap.tenantId = 31047205ce114b60833b23e400d6a535 +onap.cloudOwner = CloudOwner + +# NBI +nbi.url = http://localhost:${server.port}${server.contextPath} +nbi.callForVNF = false + +# SCHEDULER +scheduler.pollingDurationInMins = 0.1 +serviceOrder.schedule = 5000 +serviceOrder.initial = 1 +executionTask.schedule = 2000 +executionTask.initial = 1 + + + +# SDC +sdc.host = http://127.0.0.1:8091 +sdc.header.ecompInstanceId = Rene +sdc.header.authorization = Basic YWFpOktwOGJKNFNYc3pNMFdYbGhhazNlSGxjc2UyZ0F3ODR2YW9HR21KdlV5MlU= + +# AAI +aai.host = http://127.0.0.1:8091 +aai.header.authorization = Basic QUFJOkFBSQ== +aai.api.id = AAI +aai.header.transaction.id = 808b54e3-e563-4144-a1b9-e24e2ed93d4f + +# SO +so.host = http://127.0.0.1:8091 +so.header.authorization = +so.api.id = SO +so.owning.entity.id = 6b5b6b70-4e9a-4f6f-8b7b-cbd7cf990c6e +so.owning.entity.name = OE-generic +so.project.name = Project-generic + +# MSB +msb.enabled = false + +# H2 +spring.datasource.url = jdbc:h2:mem:~/db;DB_CLOSE_ON_EXIT=false +spring.datasource.username = sa +spring.datasource.password = +spring.datasource.driver-class-name = org.h2.Driver +spring.h2.console.enabled = true +spring.h2.console.path = /h2-console \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a6184f0..6a66737 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,71 +14,81 @@ # limitations under the License. # -nbi.version=v3 + +# PROFILE +# used for scheduling +spring.profiles.active = default + +# VERSION +nbi.version = v3 # SERVER -server.contextPath=/nbi/api/${nbi.version} -server.port=8080 +server.contextPath = /nbi/api/${nbi.version} +server.port = 8080 # LOGGING -logging.level.=INFO +logging.level. = INFO # ONAP -onap.lcpCloudRegionId=RegionOne -onap.tenantId=6e97a2bd51d74f6db5671d8dc1517d82 -onap.cloudOwner=CloudOwner +onap.lcpCloudRegionId = RegionOne +onap.tenantId = 6e97a2bd51d74f6db5671d8dc1517d82 +onap.cloudOwner = CloudOwner # NBI -nbi.url=http://localhost:${server.port}${server.contextPath} -nbi.callForVNF=false +nbi.url = http://localhost:${server.port}${server.contextPath} +nbi.callForVNF = false # SCHEDULER -scheduler.pollingDurationInMins=360 +scheduler.pollingDurationInMins = 360 +serviceOrder.schedule = 5000 +serviceOrder.initial = 1 +executionTask.schedule = 2000 +executionTask.initial = 1 # SDC -sdc.host=http://10.0.3.1:8080 -sdc.header.ecompInstanceId=demo -sdc.header.authorization=Basic YWFpOktwOGJKNFNYc3pNMFdYbGhhazNlSGxjc2UyZ0F3ODR2YW9HR21KdlV5MlU= - +sdc.host = http://10.0.3.1:8080 +sdc.header.ecompInstanceId = demo +sdc.header.authorization = Basic YWFpOktwOGJKNFNYc3pNMFdYbGhhazNlSGxjc2UyZ0F3ODR2YW9HR21KdlV5MlU= # AAI -aai.host=https://10.0.1.1:8443 -aai.header.authorization=Basic QUFJOkFBSQ== -aai.api.id=NBI -aai.header.transaction.id=808b54e3-e563-4144-a1b9-e24e2ed93d4f +aai.host = https://10.0.1.1:8443 +aai.header.authorization = Basic QUFJOkFBSQ== +aai.api.id = NBI +aai.header.transaction.id = 808b54e3-e563-4144-a1b9-e24e2ed93d4f # SO -so.host=http://10.0.5.1:8080 -so.header.authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== -so.api.id=SO -so.owning.entity.id=6b5b6b70-4e9a-4f6f-8b7b-cbd7cf990c6e -so.owning.entity.name=OE-generic -so.project.name=Project-generic + +so.host = http://10.0.5.1:8080 +so.header.authorization = Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== +so.api.id = SO +so.owning.entity.id = 6b5b6b70-4e9a-4f6f-8b7b-cbd7cf990c6e +so.owning.entity.name = OE-generic +so.project.name = Project-generic # MSB -msb.enabled=true -msb.discovery.host=msb_discovery -msb.discovery.port=10081 -msb.discovery.retry=5 -msb.discovery.retry_interval=5000 -msb.service.host= -msb.service.name=nbi -msb.service.custom_path= -msb.service.protocol=REST -msb.service.visual_range=1 -msb.service.enable_ssl=false +msb.enabled = true +msb.discovery.host = msb_discovery +msb.discovery.port = 10081 +msb.discovery.retry = 1 +msb.discovery.retry_interval = 5000 +msb.service.host = +msb.service.name = nbi +msb.service.custom_path = +msb.service.protocol = REST +msb.service.visual_range = 1 +msb.service.enable_ssl = false # MONGO -spring.data.mongodb.host=localhost -spring.data.mongodb.port=27017 -spring.data.mongodb.database=ServiceOrderDB +spring.data.mongodb.host = localhost +spring.data.mongodb.port = 27017 +spring.data.mongodb.database = ServiceOrderDB # MYSQL -spring.datasource.url=jdbc:mariadb://localhost:3306/nbi -spring.datasource.username=root -spring.datasource.password=secret -spring.datasource.testWhileIdle=true -spring.datasource.validationQuery=SELECT 1 -spring.datasource.driver-class-name=org.mariadb.jdbc.Driver -spring.jpa.show-sql=false -spring.jpa.hibernate.ddl-auto=update -spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy \ No newline at end of file +spring.datasource.url = jdbc:mariadb://localhost:3306/nbi +spring.datasource.username = root +spring.datasource.password = secret +spring.datasource.testWhileIdle = true +spring.datasource.validationQuery = SELECT 1 +spring.datasource.driver-class-name = org.mariadb.jdbc.Driver +spring.jpa.show-sql = false +spring.jpa.hibernate.ddl-auto = update +spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy \ No newline at end of file -- cgit 1.2.3-korg