diff options
author | FrancescoFioraEst <francesco.fiora@est.tech> | 2021-11-11 14:57:23 +0000 |
---|---|---|
committer | FrancescoFioraEst <francesco.fiora@est.tech> | 2021-11-25 13:25:48 +0000 |
commit | a41acc89a8c7177014d1377c4457cd402ed7ee93 (patch) | |
tree | 47eb78295c696d7281bc772e346ec260cd114ce1 /runtime-controlloop/src | |
parent | 7443b9a5ddca988ad4338e2b6597d6fdce552909 (diff) |
Add support transaction in CL and ServiceTemplate Providers
Add support transaction
in ControlLoopProvider and ServiceTemplateProvider
Issue-ID: POLICY-3798
Change-Id: I0ab79f28231e329e06c16e01427775077b3ac994
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
Diffstat (limited to 'runtime-controlloop/src')
16 files changed, 403 insertions, 561 deletions
diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProvider.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProvider.java index eac1ac305..7deba651f 100644 --- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProvider.java +++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProvider.java @@ -103,7 +103,7 @@ public class CommissioningProvider { } synchronized (lockit) { - serviceTemplateProvider.createServiceTemplate(serviceTemplate); + serviceTemplate = serviceTemplateProvider.createServiceTemplate(serviceTemplate); List<Participant> participantList = participantProvider.getParticipants(); if (!participantList.isEmpty()) { supervisionHandler.handleSendCommissionMessage(serviceTemplate.getName(), serviceTemplate.getVersion()); @@ -254,6 +254,16 @@ public class CommissioningProvider { } /** + * Get All the requested control loop definitions. + * + * @return the control loop definitions + * @throws PfModelException on errors getting control loop definitions + */ + public List<ToscaServiceTemplate> getAllToscaServiceTemplate() throws PfModelException { + return serviceTemplateProvider.getAllServiceTemplates(); + } + + /** * Get the tosca service template with only required sections. * * @param name the name of the template to get, null for all definitions @@ -363,7 +373,7 @@ public class CommissioningProvider { * @return true if exists instance properties */ private boolean verifyIfInstancePropertiesExists() { - return clProvider.getNodeTemplates(null, null).stream() + return clProvider.getAllNodeTemplates().stream() .anyMatch(nodeTemplate -> nodeTemplate.getKey().getName().contains(INSTANCE_TEXT)); } diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/PolicyModelConfig.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/PolicyModelConfig.java deleted file mode 100644 index 8a151d886..000000000 --- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/PolicyModelConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.clamp.controlloop.runtime.config; - -import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup; -import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.provider.PolicyModelsProvider; -import org.onap.policy.models.provider.PolicyModelsProviderFactory; -import org.onap.policy.models.provider.PolicyModelsProviderParameters; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class PolicyModelConfig { - - @Bean - public PolicyModelsProviderParameters policyModelsProviderParameters( - ClRuntimeParameterGroup clRuntimeParameterGroup) { - return clRuntimeParameterGroup.getDatabaseProviderParameters(); - } - - @Bean - public PolicyModelsProvider policyModelsProvider(PolicyModelsProviderParameters policyModelsProviderParameters) - throws PfModelException { - return new PolicyModelsProviderFactory().createPolicyModelsProvider(policyModelsProviderParameters); - } -} diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProvider.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProvider.java index 40d9b249d..0d7d88803 100644 --- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProvider.java +++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProvider.java @@ -27,7 +27,6 @@ import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -106,7 +105,7 @@ public class ControlLoopInstantiationProvider { ControlLoop controlLoop = new ControlLoop(); Map<UUID, ControlLoopElement> controlLoopElements = new HashMap<>(); - ToscaServiceTemplate toscaServiceTemplate = commissioningProvider.getToscaServiceTemplate(null, null); + ToscaServiceTemplate toscaServiceTemplate = commissioningProvider.getAllToscaServiceTemplate().get(0); Map<String, ToscaNodeTemplate> persistedNodeTemplateMap = toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates(); @@ -155,7 +154,7 @@ public class ControlLoopInstantiationProvider { Map<String, ToscaNodeTemplate> filteredToscaNodeTemplateMap = new HashMap<>(); - ToscaServiceTemplate toscaServiceTemplate = commissioningProvider.getToscaServiceTemplate(name, version); + ToscaServiceTemplate toscaServiceTemplate = commissioningProvider.getAllToscaServiceTemplate().get(0); toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().forEach((key, nodeTemplate) -> { if (!nodeTemplate.getName().contains(instanceName)) { @@ -185,8 +184,8 @@ public class ControlLoopInstantiationProvider { synchronized (lockit) { for (ControlLoop controlLoop : controlLoops.getControlLoopList()) { - var checkControlLoop = controlLoopProvider.getControlLoop(controlLoop.getKey().asIdentifier()); - if (checkControlLoop != null) { + var checkControlLoopOpt = controlLoopProvider.findControlLoop(controlLoop.getKey().asIdentifier()); + if (checkControlLoopOpt.isPresent()) { throw new PfModelException(Response.Status.BAD_REQUEST, controlLoop.getKey().asIdentifier() + " already defined"); } @@ -195,7 +194,7 @@ public class ControlLoopInstantiationProvider { if (!validationResult.isValid()) { throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult()); } - controlLoopProvider.createControlLoops(controlLoops.getControlLoopList()); + controlLoopProvider.saveControlLoops(controlLoops.getControlLoopList()); } var response = new InstantiationResponse(); @@ -218,7 +217,7 @@ public class ControlLoopInstantiationProvider { if (!validationResult.isValid()) { throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult()); } - controlLoopProvider.updateControlLoops(controlLoops.getControlLoopList()); + controlLoopProvider.saveControlLoops(controlLoops.getControlLoopList()); } var response = new InstantiationResponse(); @@ -302,19 +301,18 @@ public class ControlLoopInstantiationProvider { public InstantiationResponse deleteControlLoop(String name, String version) throws PfModelException { var response = new InstantiationResponse(); synchronized (lockit) { - List<ControlLoop> controlLoops = controlLoopProvider.getControlLoops(name, version); - if (controlLoops.isEmpty()) { + var controlLoopOpt = controlLoopProvider.findControlLoop(name, version); + if (controlLoopOpt.isEmpty()) { throw new PfModelException(Response.Status.NOT_FOUND, "Control Loop not found"); } - for (ControlLoop controlLoop : controlLoops) { - if (!ControlLoopState.UNINITIALISED.equals(controlLoop.getState())) { - throw new PfModelException(Response.Status.BAD_REQUEST, - "Control Loop State is still " + controlLoop.getState()); - } + var controlLoop = controlLoopOpt.get(); + if (!ControlLoopState.UNINITIALISED.equals(controlLoop.getState())) { + throw new PfModelException(Response.Status.BAD_REQUEST, + "Control Loop State is still " + controlLoop.getState()); } - response.setAffectedControlLoops(Collections - .singletonList(controlLoopProvider.deleteControlLoop(name, version).getKey().asIdentifier())); + response.setAffectedControlLoops( + List.of(controlLoopProvider.deleteControlLoop(name, version).getKey().asIdentifier())); } return response; } @@ -354,17 +352,26 @@ public class ControlLoopInstantiationProvider { if (participants.isEmpty()) { throw new ControlLoopException(Status.BAD_REQUEST, "No participants registered"); } + var validationResult = new BeanValidationResult("InstantiationCommand", command); List<ControlLoop> controlLoops = new ArrayList<>(command.getControlLoopIdentifierList().size()); for (ToscaConceptIdentifier id : command.getControlLoopIdentifierList()) { - var controlLoop = controlLoopProvider.getControlLoop(id); - controlLoop.setCascadedOrderedState(command.getOrderedState()); - controlLoops.add(controlLoop); + var controlLoopOpt = controlLoopProvider.findControlLoop(id); + if (controlLoopOpt.isEmpty()) { + validationResult.addResult("ToscaConceptIdentifier", id, ValidationStatus.INVALID, + "ControlLoop with id " + id + " not found"); + } else { + var controlLoop = controlLoopOpt.get(); + controlLoop.setCascadedOrderedState(command.getOrderedState()); + controlLoops.add(controlLoop); + } + } + if (validationResult.isValid()) { + validationResult = validateIssueControlLoops(controlLoops, participants); } - BeanValidationResult validationResult = validateIssueControlLoops(controlLoops, participants); if (!validationResult.isValid()) { throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult()); } - controlLoopProvider.updateControlLoops(controlLoops); + controlLoopProvider.saveControlLoops(controlLoops); } supervisionHandler.triggerControlLoopSupervision(command.getControlLoopIdentifierList()); @@ -473,8 +480,8 @@ public class ControlLoopInstantiationProvider { synchronized (lockit) { for (ControlLoop controlLoop : controlLoops.getControlLoopList()) { - var checkControlLoop = controlLoopProvider.getControlLoop(controlLoop.getKey().asIdentifier()); - if (checkControlLoop != null) { + var checkControlLoopOpt = controlLoopProvider.findControlLoop(controlLoop.getKey().asIdentifier()); + if (checkControlLoopOpt.isPresent()) { throw new PfModelException(Response.Status.BAD_REQUEST, "Control loop with id " + controlLoop.getKey().asIdentifier() + " already defined"); } @@ -482,7 +489,7 @@ public class ControlLoopInstantiationProvider { toscaSavedNodeTemplate = controlLoopProvider.saveInstanceProperties(serviceTemplate); - controlLoopProvider.createControlLoops(controlLoops.getControlLoopList()); + controlLoopProvider.saveControlLoops(controlLoops.getControlLoopList()); } diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/InstantiationController.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/InstantiationController.java index b65d3b784..d229e68cb 100644 --- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/InstantiationController.java +++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/InstantiationController.java @@ -186,10 +186,10 @@ public class InstantiationController extends AbstractRestController { // @formatter:on public ResponseEntity<InstancePropertiesResponse> createInstanceProperties( @RequestHeader( - name = REQUEST_ID_NAME, - required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, + name = REQUEST_ID_NAME, + required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, @ApiParam(value = "Body of instance properties", required = true) @RequestBody ToscaServiceTemplate body) - throws PfModelException { + throws PfModelException { return ResponseEntity.ok().body(provider.createInstanceProperties(body)); } @@ -249,13 +249,14 @@ public class InstantiationController extends AbstractRestController { // @formatter:on public ResponseEntity<InstantiationResponse> deleteInstanceProperties( - @RequestHeader( - name = REQUEST_ID_NAME, - required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, - @ApiParam(value = "Control Loop definition name", required = true) @RequestParam("name") String name, - @ApiParam(value = "Control Loop definition version") @RequestParam( - value = "version", - required = true) String version) throws PfModelException { + @RequestHeader( + name = REQUEST_ID_NAME, + required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, + @ApiParam(value = "Control Loop definition name", required = true) @RequestParam("name") String name, + @ApiParam(value = "Control Loop definition version") @RequestParam( + value = "version", + required = true) String version) + throws PfModelException { return ResponseEntity.ok().body(provider.deleteInstanceProperties(name, version)); } @@ -447,7 +448,7 @@ public class InstantiationController extends AbstractRestController { @ApiParam(value = "Control Loop definition name", required = true) @RequestParam("name") String name, @ApiParam(value = "Control Loop definition version") @RequestParam( value = "version", - required = false) String version) + required = true) String version) throws PfModelException { return ResponseEntity.ok().body(provider.deleteControlLoop(name, version)); @@ -559,16 +560,16 @@ public class InstantiationController extends AbstractRestController { ) // @formatter:on public ResponseEntity<ControlLoopOrderStateResponse> getInstantiationOrderState( - @RequestHeader( - name = REQUEST_ID_NAME, - required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, - @ApiParam(value = "Control Loop name", required = false) @RequestParam( - value = "name", - required = false) String name, - @ApiParam(value = "Control Loop version", required = false) @RequestParam( - value = "version", - required = false) String version) - throws PfModelException { + @RequestHeader( + name = REQUEST_ID_NAME, + required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, + @ApiParam(value = "Control Loop name", required = false) @RequestParam( + value = "name", + required = false) String name, + @ApiParam(value = "Control Loop version", required = false) @RequestParam( + value = "version", + required = false) String version) + throws PfModelException { return ResponseEntity.ok().body(provider.getInstantiationOrderState(name, version)); } @@ -620,16 +621,16 @@ public class InstantiationController extends AbstractRestController { ) // @formatter:on public ResponseEntity<ControlLoopPrimedResponse> getControlLoopPriming( - @RequestHeader( - name = REQUEST_ID_NAME, - required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, - @ApiParam(value = "Control Loop definition name", required = false) @RequestParam( - value = "name", - required = false) String name, - @ApiParam(value = "Control Loop definition version", required = false) @RequestParam( - value = "version", - required = false) String version) - throws PfModelException { + @RequestHeader( + name = REQUEST_ID_NAME, + required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId, + @ApiParam(value = "Control Loop definition name", required = false) @RequestParam( + value = "name", + required = false) String name, + @ApiParam(value = "Control Loop definition version", required = false) @RequestParam( + value = "version", + required = false) String version) + throws PfModelException { return ResponseEntity.ok().body(provider.getControlLoopPriming(name, version)); } diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/monitoring/MonitoringProvider.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/monitoring/MonitoringProvider.java index 802413a6a..cd9309422 100644 --- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/monitoring/MonitoringProvider.java +++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/monitoring/MonitoringProvider.java @@ -174,9 +174,9 @@ public class MonitoringProvider { try { List<ControlLoopElement> clElements = new ArrayList<>(); // Fetch all control loop elements for the control loop - var controlLoop = controlLoopProvider.getControlLoop(new ToscaConceptIdentifier(name, version)); - if (controlLoop != null) { - clElements.addAll(controlLoop.getElements().values()); + var controlLoopOpt = controlLoopProvider.findControlLoop(new ToscaConceptIdentifier(name, version)); + if (controlLoopOpt.isPresent()) { + clElements.addAll(controlLoopOpt.get().getElements().values()); // Collect control loop element statistics for each cl element. for (ControlLoopElement clElement : clElements) { clElementStats.addAll(fetchFilteredClElementStatistics(clElement.getParticipantId().getName(), @@ -203,9 +203,9 @@ public class MonitoringProvider { public List<ToscaConceptIdentifier> getAllParticipantIdsPerControlLoop(String name, String version) throws PfModelException { List<ToscaConceptIdentifier> participantIds = new ArrayList<>(); - var controlLoop = controlLoopProvider.getControlLoop(new ToscaConceptIdentifier(name, version)); - if (controlLoop != null) { - for (ControlLoopElement clElement : controlLoop.getElements().values()) { + var controlLoopOpt = controlLoopProvider.findControlLoop(new ToscaConceptIdentifier(name, version)); + if (controlLoopOpt.isPresent()) { + for (ControlLoopElement clElement : controlLoopOpt.get().getElements().values()) { participantIds.add(clElement.getParticipantId()); } } @@ -224,9 +224,9 @@ public class MonitoringProvider { public Map<String, ToscaConceptIdentifier> getAllClElementsIdPerControlLoop(String name, String version) throws PfModelException { Map<String, ToscaConceptIdentifier> clElementId = new HashMap<>(); - var controlLoop = controlLoopProvider.getControlLoop(new ToscaConceptIdentifier(name, version)); - if (controlLoop != null) { - for (ControlLoopElement clElement : controlLoop.getElements().values()) { + var controlLoopOpt = controlLoopProvider.findControlLoop(new ToscaConceptIdentifier(name, version)); + if (controlLoopOpt.isPresent()) { + for (ControlLoopElement clElement : controlLoopOpt.get().getElements().values()) { clElementId.put(clElement.getId().toString(), clElement.getParticipantId()); } } diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java index 7f0b85588..6af2788e6 100644 --- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java +++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java @@ -114,7 +114,7 @@ public class SupervisionHandler { superviseControlLoop(controlLoop); - controlLoopProvider.updateControlLoop(controlLoop); + controlLoopProvider.saveControlLoop(controlLoop); } catch (PfModelException pfme) { throw new ControlLoopException(pfme.getErrorResponse().getResponseCode(), pfme.getMessage(), pfme); } @@ -269,7 +269,7 @@ public class SupervisionHandler { var updated = updateState(controlLoop, controlLoopAckMessage.getControlLoopResultMap().entrySet()); updated |= setPrimed(controlLoop); if (updated) { - controlLoopProvider.updateControlLoop(controlLoop); + controlLoopProvider.saveControlLoop(controlLoop); } } else { LOGGER.warn("ControlLoop not found in database {}", controlLoopAckMessage.getControlLoopId()); @@ -425,7 +425,7 @@ public class SupervisionHandler { private int getFirstStartPhase(ControlLoop controlLoop) { ToscaServiceTemplate toscaServiceTemplate = null; try { - toscaServiceTemplate = serviceTemplateProvider.getServiceTemplateList(null, null).get(0); + toscaServiceTemplate = serviceTemplateProvider.getAllServiceTemplates().get(0); } catch (PfModelException e) { throw new PfModelRuntimeException(Status.BAD_REQUEST, "Canont load ToscaServiceTemplate from DB", e); } diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScanner.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScanner.java index 5ebacdac7..01e035b87 100644 --- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScanner.java +++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScanner.java @@ -130,11 +130,11 @@ public class SupervisionScanner { } try { - var list = serviceTemplateProvider.getServiceTemplateList(null, null); + var list = serviceTemplateProvider.getAllServiceTemplates(); if (list != null && !list.isEmpty()) { ToscaServiceTemplate toscaServiceTemplate = list.get(0); - for (ControlLoop controlLoop : controlLoopProvider.getControlLoops(null, null)) { + for (ControlLoop controlLoop : controlLoopProvider.getControlLoops()) { scanControlLoop(controlLoop, toscaServiceTemplate, counterCheck); } } @@ -241,7 +241,7 @@ public class SupervisionScanner { controlLoop.getOrderedState()); controlLoop.setState(controlLoop.getOrderedState().asState()); - controlLoopProvider.updateControlLoop(controlLoop); + controlLoopProvider.saveControlLoop(controlLoop); // Clear missed report counter on Control Loop clearFaultAndCounter(controlLoop); @@ -254,8 +254,7 @@ public class SupervisionScanner { : maxSpNotCompleted; var firstStartPhase = ControlLoopState.UNINITIALISED2PASSIVE.equals(controlLoop.getState()) - || ControlLoopState.PASSIVE2RUNNING.equals(controlLoop.getState()) ? defaultMin - : defaultMax; + || ControlLoopState.PASSIVE2RUNNING.equals(controlLoop.getState()) ? defaultMin : defaultMax; if (nextSpNotCompleted != phaseMap.getOrDefault(controlLoop.getKey().asIdentifier(), firstStartPhase)) { phaseMap.put(controlLoop.getKey().asIdentifier(), nextSpNotCompleted); diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ControlLoopUpdatePublisher.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ControlLoopUpdatePublisher.java index 32c0638af..24f60eafc 100644 --- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ControlLoopUpdatePublisher.java +++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ControlLoopUpdatePublisher.java @@ -72,7 +72,7 @@ public class ControlLoopUpdatePublisher extends AbstractParticipantPublisher<Con controlLoopUpdateMsg.setTimestamp(Instant.now()); ToscaServiceTemplate toscaServiceTemplate; try { - toscaServiceTemplate = serviceTemplateProvider.getServiceTemplateList(null, null).get(0); + toscaServiceTemplate = serviceTemplateProvider.getAllServiceTemplates().get(0); } catch (PfModelException pfme) { LOGGER.warn("Get of tosca service template failed, cannot send participantupdate", pfme); return; diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProviderTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProviderTest.java index 22fb51cb5..843985e7d 100644 --- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProviderTest.java +++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProviderTest.java @@ -22,27 +22,24 @@ package org.onap.policy.clamp.controlloop.runtime.commissioning; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper; -import java.util.ArrayList; import java.util.List; import java.util.Map; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider; import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils; -import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup; -import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData; import org.onap.policy.common.utils.coder.Coder; import org.onap.policy.common.utils.coder.StandardCoder; -import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType; @@ -58,23 +55,10 @@ class CommissioningProviderTest { "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml"; private static final String COMMON_TOSCA_SERVICE_TEMPLATE_YAML = "src/test/resources/rest/servicetemplates/full-tosca-with-common-properties.yaml"; - private static final String TEMPLATE_IS_NULL = ".*serviceTemplate is marked non-null but is null"; - private PolicyModelsProvider modelsProvider = null; - private ControlLoopProvider clProvider = null; private static final Coder CODER = new StandardCoder(); private final ObjectMapper mapper = new ObjectMapper(); - @AfterEach - void close() throws Exception { - if (modelsProvider != null) { - modelsProvider.close(); - } - if (clProvider != null) { - clProvider.close(); - } - } - /** * Test the fetching of control loop definitions (ToscaServiceTemplates). * @@ -82,35 +66,20 @@ class CommissioningProviderTest { */ @Test void testGetControlLoopDefinitions() throws Exception { - ClRuntimeParameterGroup clRuntimeParameterGroup = CommonTestData.geParameterGroup("getCLDefinitions"); - modelsProvider = - CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); + var clProvider = mock(ControlLoopProvider.class); var participantProvider = mock(ParticipantProvider.class); + var serviceTemplateProvider = mock(ServiceTemplateProvider.class); - CommissioningProvider provider = new CommissioningProvider(new ServiceTemplateProvider(modelsProvider), - clProvider, null, participantProvider); - ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML); + CommissioningProvider provider = + new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider); List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null); assertThat(listOfTemplates).isEmpty(); - provider.createControlLoopDefinitions(serviceTemplate); + when(clProvider.getFilteredNodeTemplates(any())) + .thenReturn(List.of(new ToscaNodeTemplate(), new ToscaNodeTemplate())); listOfTemplates = provider.getControlLoopDefinitions(null, null); assertThat(listOfTemplates).hasSize(2); - - // Test Filtering - listOfTemplates = provider.getControlLoopDefinitions("org.onap.domain.pmsh.PMSHControlLoopDefinition", "1.2.3"); - assertThat(listOfTemplates).hasSize(1); - for (ToscaNodeTemplate template : listOfTemplates) { - // Other CL elements contain PMSD instead of PMSH in their name - assertThat(template.getName()).doesNotContain("PMSD"); - } - - // Test Wrong Name - listOfTemplates = provider.getControlLoopDefinitions("WrongControlLoopName", "0.0.0"); - assertThat(listOfTemplates).isEmpty(); - } /** @@ -120,25 +89,27 @@ class CommissioningProviderTest { */ @Test void testCreateControlLoopDefinitions() throws Exception { - ClRuntimeParameterGroup clRuntimeParameterGroup = CommonTestData.geParameterGroup("createCLDefinitions"); - modelsProvider = - CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); + var serviceTemplateProvider = mock(ServiceTemplateProvider.class); + var clProvider = mock(ControlLoopProvider.class); var participantProvider = mock(ParticipantProvider.class); - CommissioningProvider provider = new CommissioningProvider(new ServiceTemplateProvider(modelsProvider), - clProvider, null, participantProvider); - // Test Service template is null - assertThatThrownBy(() -> provider.createControlLoopDefinitions(null)).hasMessageMatching(TEMPLATE_IS_NULL); + CommissioningProvider provider = + new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider); + List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null); assertThat(listOfTemplates).isEmpty(); ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML); + when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate); // Response should return the number of node templates present in the service template List<ToscaConceptIdentifier> affectedDefinitions = provider.createControlLoopDefinitions(serviceTemplate).getAffectedControlLoopDefinitions(); assertThat(affectedDefinitions).hasSize(13); + + when(clProvider.getFilteredNodeTemplates(any())) + .thenReturn(List.of(new ToscaNodeTemplate(), new ToscaNodeTemplate())); + listOfTemplates = provider.getControlLoopDefinitions(null, null); assertThat(listOfTemplates).hasSize(2); } @@ -150,18 +121,20 @@ class CommissioningProviderTest { */ @Test void testGetToscaServiceTemplate() throws Exception { - ClRuntimeParameterGroup clRuntimeParameterGroup = CommonTestData.geParameterGroup("getCLDefinitions"); - modelsProvider = - CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); + var serviceTemplateProvider = mock(ServiceTemplateProvider.class); + var clProvider = mock(ControlLoopProvider.class); var participantProvider = mock(ParticipantProvider.class); - CommissioningProvider provider = new CommissioningProvider(new ServiceTemplateProvider(modelsProvider), - clProvider, null, participantProvider); + CommissioningProvider provider = + new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider); ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML); + when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate); provider.createControlLoopDefinitions(serviceTemplate); + verify(serviceTemplateProvider).createServiceTemplate(serviceTemplate); + + when(serviceTemplateProvider.getToscaServiceTemplate(eq(null), eq(null))).thenReturn(serviceTemplate); ToscaServiceTemplate returnedServiceTemplate = provider.getToscaServiceTemplate(null, null); assertThat(returnedServiceTemplate).isNotNull(); @@ -179,19 +152,20 @@ class CommissioningProviderTest { */ @Test void testGetToscaServiceTemplateReduced() throws Exception { - ClRuntimeParameterGroup clRuntimeParameterGroup = CommonTestData.geParameterGroup("getCLDefinitions"); - modelsProvider = - CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); + var serviceTemplateProvider = mock(ServiceTemplateProvider.class); + var clProvider = mock(ControlLoopProvider.class); var participantProvider = mock(ParticipantProvider.class); - CommissioningProvider provider = new CommissioningProvider(new ServiceTemplateProvider(modelsProvider), - clProvider, null, participantProvider); + CommissioningProvider provider = + new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider); ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML); + when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate); provider.createControlLoopDefinitions(serviceTemplate); + when(serviceTemplateProvider.getServiceTemplateList(any(), any())).thenReturn(List.of(serviceTemplate)); + String returnedServiceTemplate = provider.getToscaServiceTemplateReduced(null, null); assertThat(returnedServiceTemplate).isNotNull(); ToscaServiceTemplate parsedServiceTemplate = CODER.decode(returnedServiceTemplate, ToscaServiceTemplate.class); @@ -207,17 +181,15 @@ class CommissioningProviderTest { */ @Test void testGetToscaServiceTemplateSchema() throws Exception { - - ClRuntimeParameterGroup clRuntimeParameterGroup = CommonTestData.geParameterGroup("getCLDefinitions"); - modelsProvider = - CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); + var serviceTemplateProvider = mock(ServiceTemplateProvider.class); + var clProvider = mock(ControlLoopProvider.class); var participantProvider = mock(ParticipantProvider.class); - CommissioningProvider provider = new CommissioningProvider(new ServiceTemplateProvider(modelsProvider), - clProvider, null, participantProvider); + CommissioningProvider provider = + new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider); ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML); + when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate); provider.createControlLoopDefinitions(serviceTemplate); @@ -246,89 +218,4 @@ class CommissioningProviderTest { assertThat(localServiceTemplateSchema).isEqualTo(returnedServiceTemplateSchema); } } - - /** - * Test the deletion of control loop definitions (ToscaServiceTemplate). - * - * @throws Exception . - */ - @Test - void testDeleteControlLoopDefinitions() throws Exception { - ClRuntimeParameterGroup clRuntimeParameterGroup = CommonTestData.geParameterGroup("deleteCLDefinitions"); - modelsProvider = - CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - var participantProvider = mock(ParticipantProvider.class); - - CommissioningProvider provider = new CommissioningProvider(new ServiceTemplateProvider(modelsProvider), - clProvider, null, participantProvider); - ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML); - - List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null); - assertThat(listOfTemplates).isEmpty(); - - provider.createControlLoopDefinitions(serviceTemplate); - listOfTemplates = provider.getControlLoopDefinitions(null, null); - assertThat(listOfTemplates).hasSize(2); - - provider.deleteControlLoopDefinition(serviceTemplate.getName(), serviceTemplate.getVersion()); - listOfTemplates = provider.getControlLoopDefinitions(null, null); - assertThat(listOfTemplates).isEmpty(); - } - - /** - * Test the fetching of control loop element definitions. - * - * @throws Exception . - */ - @Test - void testGetControlLoopElementDefinitions() throws Exception { - ClRuntimeParameterGroup clRuntimeParameterGroup = CommonTestData.geParameterGroup("getCLElDefinitions"); - modelsProvider = - CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters()); - var participantProvider = mock(ParticipantProvider.class); - - CommissioningProvider provider = new CommissioningProvider(new ServiceTemplateProvider(modelsProvider), - clProvider, null, participantProvider); - ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML); - - provider.getControlLoopDefinitions(null, null); - - provider.createControlLoopDefinitions(serviceTemplate); - List<ToscaNodeTemplate> controlLoopDefinitionList = - provider.getControlLoopDefinitions("org.onap.domain.pmsh.PMSHControlLoopDefinition", "1.2.3"); - - List<ToscaNodeTemplate> controlLoopElementNodeTemplates = - provider.getControlLoopElementDefinitions(controlLoopDefinitionList.get(0)); - - // 4 PMSH control loop elements definitions. - assertThat(controlLoopElementNodeTemplates).hasSize(4); - - List<ToscaNodeType> derivedTypes = getDerivedNodeTypes(serviceTemplate); - for (ToscaNodeTemplate template : controlLoopElementNodeTemplates) { - assertTrue(checkNodeType(template, derivedTypes)); - } - } - - private boolean checkNodeType(ToscaNodeTemplate template, List<ToscaNodeType> derivedNodeTypes) { - String controlLoopElementType = "org.onap.policy.clamp.controlloop.ControlLoopElement"; - for (ToscaNodeType derivedType : derivedNodeTypes) { - if (template.getType().equals(derivedType.getName()) || template.getType().equals(controlLoopElementType)) { - return true; - } - } - return false; - } - - private List<ToscaNodeType> getDerivedNodeTypes(ToscaServiceTemplate serviceTemplate) { - String type = "org.onap.policy.clamp.controlloop.ControlLoopElement"; - List<ToscaNodeType> nodeTypes = new ArrayList<>(); - for (ToscaNodeType nodeType : serviceTemplate.getNodeTypes().values()) { - if (nodeType.getDerivedFrom().equals(type)) { - nodeTypes.add(nodeType); - } - } - return nodeTypes; - } } diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/rest/CommissioningControllerTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/rest/CommissioningControllerTest.java index 9d1435e7c..e4a121439 100644 --- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/rest/CommissioningControllerTest.java +++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/rest/CommissioningControllerTest.java @@ -93,8 +93,7 @@ class CommissioningControllerTest extends CommonRestController { @AfterEach public void cleanDatabase() throws Exception { - deleteEntryInDB(serviceTemplate.getName(), serviceTemplate.getVersion()); - deleteEntryInDB(commonPropertiesServiceTemplate.getName(), commonPropertiesServiceTemplate.getVersion()); + deleteEntryInDB(); } @Test @@ -272,33 +271,33 @@ class CommissioningControllerTest extends CommonRestController { @Test void testDelete() throws Exception { - createEntryInDB(); + var serviceTemplateCreated = createEntryInDB(); Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "?name=" - + serviceTemplate.getName() + "&version=" + serviceTemplate.getVersion()); + + serviceTemplateCreated.getName() + "&version=" + serviceTemplateCreated.getVersion()); // Call delete with no info Response resp = invocationBuilder.delete(); assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); - List<ToscaServiceTemplate> templatesInDB = serviceTemplateProvider.getServiceTemplateList(null, null); + List<ToscaServiceTemplate> templatesInDB = serviceTemplateProvider.getAllServiceTemplates(); assertThat(templatesInDB).isEmpty(); - } - private synchronized void createEntryInDB() throws Exception { - deleteEntryInDB(commonPropertiesServiceTemplate.getName(), commonPropertiesServiceTemplate.getVersion()); - serviceTemplateProvider.createServiceTemplate(serviceTemplate); + private synchronized ToscaServiceTemplate createEntryInDB() throws Exception { + deleteEntryInDB(); + return serviceTemplateProvider.createServiceTemplate(serviceTemplate); } // Delete entries from the DB after relevant tests - private synchronized void deleteEntryInDB(String name, String version) throws Exception { - if (!serviceTemplateProvider.getServiceTemplateList(null, null).isEmpty()) { - serviceTemplateProvider.deleteServiceTemplate(name, version); + private synchronized void deleteEntryInDB() throws Exception { + var list = serviceTemplateProvider.getAllServiceTemplates(); + if (!list.isEmpty()) { + serviceTemplateProvider.deleteServiceTemplate(list.get(0).getName(), list.get(0).getVersion()); } } private synchronized void createFullEntryInDbWithCommonProps() throws Exception { - deleteEntryInDB(commonPropertiesServiceTemplate.getName(), commonPropertiesServiceTemplate.getVersion()); + deleteEntryInDB(); serviceTemplateProvider.createServiceTemplate(commonPropertiesServiceTemplate); } } diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProviderTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProviderTest.java index caad5a4e9..ba1cc0813 100644 --- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProviderTest.java +++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProviderTest.java @@ -24,17 +24,16 @@ package org.onap.policy.clamp.controlloop.runtime.instantiation; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.IOException; -import java.util.ArrayList; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; +import java.util.List; +import java.util.Optional; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException; @@ -42,26 +41,15 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops; -import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ClElementStatisticsProvider; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider; -import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantStatisticsProvider; -import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider; import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand; import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse; import org.onap.policy.clamp.controlloop.runtime.commissioning.CommissioningProvider; -import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup; -import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider; import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler; -import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopStateChangePublisher; -import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopUpdatePublisher; -import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantDeregisterAckPublisher; -import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantRegisterAckPublisher; -import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantUpdatePublisher; import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData; -import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; +import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** @@ -102,80 +90,45 @@ class ControlLoopInstantiationProviderTest { private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(); - private static SupervisionHandler supervisionHandler; - private static CommissioningProvider commissioningProvider; - private static ControlLoopProvider clProvider; - private static PolicyModelsProvider modelsProvider; - @BeforeAll public static void setUpBeforeClass() throws Exception { serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_TEMPLATE_YAML); } - /** - * setup Db Provider Parameters. - * - * @throws PfModelException if an error occurs - */ - @BeforeAll - public static void setupDbProviderParameters() throws PfModelException { - ClRuntimeParameterGroup controlLoopParameters = CommonTestData.geParameterGroup("instantproviderdb"); - - modelsProvider = CommonTestData.getPolicyModelsProvider(controlLoopParameters.getDatabaseProviderParameters()); - clProvider = new ControlLoopProvider(controlLoopParameters.getDatabaseProviderParameters()); + @Test + void testIntanceResponses() throws Exception { var participantProvider = Mockito.mock(ParticipantProvider.class); + var clProvider = mock(ControlLoopProvider.class); + var supervisionHandler = mock(SupervisionHandler.class); + var commissioningProvider = mock(CommissioningProvider.class); - var participantStatisticsProvider = Mockito.mock(ParticipantStatisticsProvider.class); - var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class); - commissioningProvider = new CommissioningProvider(new ServiceTemplateProvider(modelsProvider), clProvider, null, - participantProvider); - var monitoringProvider = - new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider); - var controlLoopUpdatePublisher = Mockito.mock(ControlLoopUpdatePublisher.class); - var controlLoopStateChangePublisher = Mockito.mock(ControlLoopStateChangePublisher.class); - var participantRegisterAckPublisher = Mockito.mock(ParticipantRegisterAckPublisher.class); - var participantDeregisterAckPublisher = Mockito.mock(ParticipantDeregisterAckPublisher.class); - var participantUpdatePublisher = Mockito.mock(ParticipantUpdatePublisher.class); - var serviceTemplateProvider = Mockito.mock(ServiceTemplateProvider.class); - - supervisionHandler = new SupervisionHandler(clProvider, participantProvider, monitoringProvider, - serviceTemplateProvider, controlLoopUpdatePublisher, controlLoopStateChangePublisher, - participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher); - } - - @BeforeEach - public void populateDb() throws Exception { - createEntryInDB(); - } - - @AfterAll - public static void closeDbProvider() throws PfModelException { - clProvider.close(); - modelsProvider.close(); - } + when(commissioningProvider.getAllToscaServiceTemplate()).thenReturn(List.of(serviceTemplate)); + when(commissioningProvider.getToscaServiceTemplate(ID_NAME, ID_VERSION)).thenReturn(serviceTemplate); - @AfterEach - public void cleanDatabase() throws Exception { - deleteEntryInDB(serviceTemplate.getName(), serviceTemplate.getVersion()); - } - - @Test - void testIntanceResponses() throws PfModelException { - var participantProvider = Mockito.mock(ParticipantProvider.class); var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, participantProvider); var instancePropertyList = instantiationProvider.createInstanceProperties(serviceTemplate); assertNull(instancePropertyList.getErrorDetails()); var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION); assertEquals(id, instancePropertyList.getAffectedInstanceProperties().get(0)); + + ControlLoops controlLoops = + InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Crud"); + var controlLoop = controlLoops.getControlLoopList().get(0); + controlLoop.setName(ID_NAME); + controlLoop.setVersion(ID_VERSION); + when(clProvider.getControlLoops(ID_NAME, ID_VERSION)).thenReturn(List.of(controlLoop)); + var instanceOrderState = instantiationProvider.getInstantiationOrderState(ID_NAME, ID_VERSION); assertEquals(ControlLoopOrderedState.UNINITIALISED, instanceOrderState.getOrderedState()); assertEquals(ID_NAME, instanceOrderState.getControlLoopIdentifierList().get(0).getName()); - assertNotNull(clProvider.getControlLoop(id)); + when(clProvider.findControlLoop(ID_NAME, ID_VERSION)).thenReturn(Optional.of(controlLoop)); + when(clProvider.deleteControlLoop(ID_NAME, ID_VERSION)).thenReturn(controlLoop); + var instanceResponse = instantiationProvider.deleteInstanceProperties(ID_NAME, ID_VERSION); assertEquals(ID_NAME, instanceResponse.getAffectedControlLoops().get(0).getName()); - assertNull(clProvider.getControlLoop(id)); + } @Test @@ -184,20 +137,41 @@ class ControlLoopInstantiationProviderTest { var participants = CommonTestData.createParticipants(); when(participantProvider.getParticipants()).thenReturn(participants); - ControlLoops controlLoopsCreate = - InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Crud"); - ControlLoops controlLoopsDb = getControlLoopsFromDb(controlLoopsCreate); - assertThat(controlLoopsDb.getControlLoopList()).isEmpty(); + var commissioningProvider = mock(CommissioningProvider.class); + var toscaNodeTemplate1 = new ToscaNodeTemplate(); + toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement"); + toscaNodeTemplate1.setVersion("1.2.3"); + when(commissioningProvider.getControlLoopDefinitions(anyString(), anyString())) + .thenReturn(List.of(toscaNodeTemplate1)); + + var toscaNodeTemplate2 = new ToscaNodeTemplate(); + toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement"); + toscaNodeTemplate2.setVersion("1.2.3"); + var toscaNodeTemplate3 = new ToscaNodeTemplate(); + toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement"); + toscaNodeTemplate3.setVersion("1.2.3"); + var toscaNodeTemplate4 = new ToscaNodeTemplate(); + toscaNodeTemplate4.setName("org.onap.domain.pmsh.PMSH_DCAEMicroservice"); + toscaNodeTemplate4.setVersion("1.2.3"); + + when(commissioningProvider.getControlLoopElementDefinitions(toscaNodeTemplate1)) + .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3, toscaNodeTemplate4)); + + var supervisionHandler = mock(SupervisionHandler.class); + var clProvider = mock(ControlLoopProvider.class); var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, participantProvider); + ControlLoops controlLoopsCreate = + InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Crud"); InstantiationResponse instantiationResponse = instantiationProvider.createControlLoops(controlLoopsCreate); InstantiationUtils.assertInstantiationResponse(instantiationResponse, controlLoopsCreate); - controlLoopsDb = getControlLoopsFromDb(controlLoopsCreate); - assertThat(controlLoopsDb.getControlLoopList()).isNotEmpty(); - assertThat(controlLoopsCreate).isEqualTo(controlLoopsDb); + verify(clProvider).saveControlLoops(controlLoopsCreate.getControlLoopList()); + + for (var controlLoop : controlLoopsCreate.getControlLoopList()) { + when(clProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion())) + .thenReturn(List.of(controlLoop)); - for (ControlLoop controlLoop : controlLoopsCreate.getControlLoopList()) { ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion()); assertThat(controlLoopsGet.getControlLoopList()).hasSize(1); @@ -206,27 +180,25 @@ class ControlLoopInstantiationProviderTest { ControlLoops controlLoopsUpdate = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Crud"); - assertThat(controlLoopsUpdate).isNotEqualTo(controlLoopsDb); instantiationResponse = instantiationProvider.updateControlLoops(controlLoopsUpdate); InstantiationUtils.assertInstantiationResponse(instantiationResponse, controlLoopsUpdate); - controlLoopsDb = getControlLoopsFromDb(controlLoopsCreate); - assertThat(controlLoopsDb.getControlLoopList()).isNotEmpty(); - assertThat(controlLoopsUpdate).isEqualTo(controlLoopsDb); + verify(clProvider).saveControlLoops(controlLoopsUpdate.getControlLoopList()); + + for (var controlLoop : controlLoopsUpdate.getControlLoopList()) { + when(clProvider.findControlLoop(controlLoop.getKey().asIdentifier())).thenReturn(Optional.of(controlLoop)); + when(clProvider.findControlLoop(controlLoop.getName(), controlLoop.getVersion())) + .thenReturn(Optional.of(controlLoop)); + when(clProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion())).thenReturn(controlLoop); + } InstantiationCommand instantiationCommand = InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Crud"); instantiationResponse = instantiationProvider.issueControlLoopCommand(instantiationCommand); InstantiationUtils.assertInstantiationResponse(instantiationResponse, instantiationCommand); - for (ToscaConceptIdentifier toscaConceptIdentifier : instantiationCommand.getControlLoopIdentifierList()) { - ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(), - toscaConceptIdentifier.getVersion()); - assertThat(controlLoopsGet.getControlLoopList()).hasSize(1); - assertThat(instantiationCommand.getOrderedState()) - .isEqualTo(controlLoopsGet.getControlLoopList().get(0).getOrderedState()); - } + verify(supervisionHandler).triggerControlLoopSupervision(instantiationCommand.getControlLoopIdentifierList()); // in order to delete a controlLoop the state must be UNINITIALISED controlLoopsCreate.getControlLoopList().forEach(cl -> cl.setState(ControlLoopState.UNINITIALISED)); @@ -234,27 +206,9 @@ class ControlLoopInstantiationProviderTest { for (ControlLoop controlLoop : controlLoopsCreate.getControlLoopList()) { instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion()); - } - - controlLoopsDb = getControlLoopsFromDb(controlLoopsCreate); - assertThat(controlLoopsDb.getControlLoopList()).isEmpty(); - } - - private ControlLoops getControlLoopsFromDb(ControlLoops controlLoopsSource) throws Exception { - - ControlLoops controlLoopsDb = new ControlLoops(); - controlLoopsDb.setControlLoopList(new ArrayList<>()); - var participantProvider = Mockito.mock(ParticipantProvider.class); - - var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, - supervisionHandler, participantProvider); - for (ControlLoop controlLoop : controlLoopsSource.getControlLoopList()) { - ControlLoops controlLoopsFromDb = - instantiationProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion()); - controlLoopsDb.getControlLoopList().addAll(controlLoopsFromDb.getControlLoopList()); + verify(clProvider).deleteControlLoop(controlLoop.getName(), controlLoop.getVersion()); } - return controlLoopsDb; } @Test @@ -262,10 +216,12 @@ class ControlLoopInstantiationProviderTest { ControlLoops controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete"); - assertThat(getControlLoopsFromDb(controlLoops).getControlLoopList()).isEmpty(); ControlLoop controlLoop0 = controlLoops.getControlLoopList().get(0); var participantProvider = Mockito.mock(ParticipantProvider.class); + var clProvider = mock(ControlLoopProvider.class); + var supervisionHandler = mock(SupervisionHandler.class); + var commissioningProvider = mock(CommissioningProvider.class); var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, participantProvider); @@ -274,26 +230,19 @@ class ControlLoopInstantiationProviderTest { () -> instantiationProvider.deleteControlLoop(controlLoop0.getName(), controlLoop0.getVersion())) .hasMessageMatching(CONTROL_LOOP_NOT_FOUND); - InstantiationUtils.assertInstantiationResponse(instantiationProvider.createControlLoops(controlLoops), - controlLoops); - for (ControlLoopState state : ControlLoopState.values()) { if (!ControlLoopState.UNINITIALISED.equals(state)) { assertThatDeleteThrownBy(controlLoops, state); } } - controlLoop0.setState(ControlLoopState.UNINITIALISED); - instantiationProvider.updateControlLoops(controlLoops); for (ControlLoop controlLoop : controlLoops.getControlLoopList()) { - instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion()); - } + when(clProvider.findControlLoop(controlLoop.getName(), controlLoop.getVersion())) + .thenReturn(Optional.of(controlLoop)); + when(clProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion())).thenReturn(controlLoop); - for (ControlLoop controlLoop : controlLoops.getControlLoopList()) { - ControlLoops controlLoopsGet = - instantiationProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion()); - assertThat(controlLoopsGet.getControlLoopList()).isEmpty(); + instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion()); } } @@ -301,11 +250,16 @@ class ControlLoopInstantiationProviderTest { ControlLoop controlLoop = controlLoops.getControlLoopList().get(0); controlLoop.setState(state); var participantProvider = Mockito.mock(ParticipantProvider.class); + var clProvider = mock(ControlLoopProvider.class); + var supervisionHandler = mock(SupervisionHandler.class); + var commissioningProvider = mock(CommissioningProvider.class); var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, participantProvider); - instantiationProvider.updateControlLoops(controlLoops); + when(clProvider.findControlLoop(controlLoop.getName(), controlLoop.getVersion())) + .thenReturn(Optional.of(controlLoop)); + assertThatThrownBy( () -> instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion())) .hasMessageMatching(String.format(DELETE_BAD_REQUEST, state)); @@ -313,45 +267,82 @@ class ControlLoopInstantiationProviderTest { @Test void testCreateControlLoops_NoDuplicates() throws Exception { + var commissioningProvider = mock(CommissioningProvider.class); + + var toscaNodeTemplate1 = new ToscaNodeTemplate(); + toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement"); + toscaNodeTemplate1.setVersion("1.2.3"); + when(commissioningProvider.getControlLoopDefinitions(anyString(), anyString())) + .thenReturn(List.of(toscaNodeTemplate1)); + + var toscaNodeTemplate2 = new ToscaNodeTemplate(); + toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement"); + toscaNodeTemplate2.setVersion("1.2.3"); + var toscaNodeTemplate3 = new ToscaNodeTemplate(); + toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement"); + toscaNodeTemplate3.setVersion("1.2.3"); + var toscaNodeTemplate4 = new ToscaNodeTemplate(); + toscaNodeTemplate4.setName("org.onap.domain.pmsh.PMSH_DCAEMicroservice"); + toscaNodeTemplate4.setVersion("1.2.3"); + + when(commissioningProvider.getControlLoopElementDefinitions(toscaNodeTemplate1)) + .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3, toscaNodeTemplate4)); ControlLoops controlLoopsCreate = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "NoDuplicates"); - ControlLoops controlLoopsDb = getControlLoopsFromDb(controlLoopsCreate); - assertThat(controlLoopsDb.getControlLoopList()).isEmpty(); - + var clProvider = mock(ControlLoopProvider.class); var participantProvider = Mockito.mock(ParticipantProvider.class); + var supervisionHandler = mock(SupervisionHandler.class); + var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, participantProvider); InstantiationResponse instantiationResponse = instantiationProvider.createControlLoops(controlLoopsCreate); InstantiationUtils.assertInstantiationResponse(instantiationResponse, controlLoopsCreate); + when(clProvider.findControlLoop(controlLoopsCreate.getControlLoopList().get(0).getKey().asIdentifier())) + .thenReturn(Optional.of(controlLoopsCreate.getControlLoopList().get(0))); + assertThatThrownBy(() -> instantiationProvider.createControlLoops(controlLoopsCreate)).hasMessageMatching( controlLoopsCreate.getControlLoopList().get(0).getKey().asIdentifier() + " already defined"); - - for (ControlLoop controlLoop : controlLoopsCreate.getControlLoopList()) { - instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion()); - } } @Test void testCreateControlLoops_CommissionedClElementNotFound() throws Exception { - + var toscaNodeTemplate1 = new ToscaNodeTemplate(); + toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement"); + toscaNodeTemplate1.setVersion("1.2.3"); + + var toscaNodeTemplate2 = new ToscaNodeTemplate(); + toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement"); + toscaNodeTemplate2.setVersion("1.2.3"); + var toscaNodeTemplate3 = new ToscaNodeTemplate(); + toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement"); + toscaNodeTemplate3.setVersion("1.2.3"); + var commissioningProvider = mock(CommissioningProvider.class); ControlLoops controlLoops = InstantiationUtils .getControlLoopsFromResource(CL_INSTANTIATION_DEFINITION_NAME_NOT_FOUND_JSON, "ClElementNotFound"); - var participantProvider = Mockito.mock(ParticipantProvider.class); - var provider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, - participantProvider); + when(commissioningProvider.getControlLoopDefinitions( + controlLoops.getControlLoopList().get(0).getDefinition().getName(), + controlLoops.getControlLoopList().get(0).getDefinition().getVersion())) + .thenReturn(List.of(toscaNodeTemplate1)); - // to validate control Loop, it needs to define ToscaServiceTemplate - // InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider); + when(commissioningProvider.getControlLoopElementDefinitions(toscaNodeTemplate1)) + .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3)); - assertThat(getControlLoopsFromDb(controlLoops).getControlLoopList()).isEmpty(); + var clProvider = mock(ControlLoopProvider.class); + var participantProvider = mock(ParticipantProvider.class); + var supervisionHandler = mock(SupervisionHandler.class); + var provider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, + participantProvider); assertThatThrownBy(() -> provider.createControlLoops(controlLoops)) .hasMessageMatching(CONTROLLOOP_ELEMENT_NAME_NOT_FOUND); + + assertThatThrownBy(() -> provider.updateControlLoops(controlLoops)) + .hasMessageMatching(CONTROLLOOP_ELEMENT_NAME_NOT_FOUND); } @Test @@ -359,98 +350,29 @@ class ControlLoopInstantiationProviderTest { ControlLoops controlLoops = InstantiationUtils .getControlLoopsFromResource(CL_INSTANTIATION_CONTROLLOOP_DEFINITION_NOT_FOUND_JSON, "ClNotFound"); - assertThat(getControlLoopsFromDb(controlLoops).getControlLoopList()).isEmpty(); - var participantProvider = Mockito.mock(ParticipantProvider.class); + var clProvider = mock(ControlLoopProvider.class); + var supervisionHandler = mock(SupervisionHandler.class); + var commissioningProvider = mock(CommissioningProvider.class); var provider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, participantProvider); + assertThatThrownBy(() -> provider.createControlLoops(controlLoops)) .hasMessageMatching(CONTROLLOOP_DEFINITION_NOT_FOUND); + + assertThatThrownBy(() -> provider.updateControlLoops(controlLoops)) + .hasMessageMatching(CONTROLLOOP_DEFINITION_NOT_FOUND); } @Test void testIssueControlLoopCommand_OrderedStateInvalid() throws ControlLoopRuntimeException, IOException { var participantProvider = Mockito.mock(ParticipantProvider.class); + var clProvider = mock(ControlLoopProvider.class); + var supervisionHandler = mock(SupervisionHandler.class); + var commissioningProvider = mock(CommissioningProvider.class); var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler, participantProvider); assertThatThrownBy(() -> instantiationProvider.issueControlLoopCommand(new InstantiationCommand())) .hasMessageMatching(ORDERED_STATE_INVALID); } - - @Test - void testInstantiationVersions() throws Exception { - // create controlLoops V1 - ControlLoops controlLoopsV1 = - InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "V1"); - assertThat(getControlLoopsFromDb(controlLoopsV1).getControlLoopList()).isEmpty(); - - var participantProvider = Mockito.mock(ParticipantProvider.class); - var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, - supervisionHandler, participantProvider); - - InstantiationUtils.assertInstantiationResponse(instantiationProvider.createControlLoops(controlLoopsV1), - controlLoopsV1); - - // create controlLoops V2 - ControlLoops controlLoopsV2 = - InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "V2"); - assertThat(getControlLoopsFromDb(controlLoopsV2).getControlLoopList()).isEmpty(); - InstantiationUtils.assertInstantiationResponse(instantiationProvider.createControlLoops(controlLoopsV2), - controlLoopsV2); - - // GET controlLoops V2 - for (ControlLoop controlLoop : controlLoopsV2.getControlLoopList()) { - ControlLoops controlLoopsGet = - instantiationProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion()); - assertThat(controlLoopsGet.getControlLoopList()).hasSize(1); - assertThat(controlLoop).isEqualTo(controlLoopsGet.getControlLoopList().get(0)); - } - - // DELETE controlLoops V1 - for (ControlLoop controlLoop : controlLoopsV1.getControlLoopList()) { - instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion()); - } - - // GET controlLoops V1 is not available - for (ControlLoop controlLoop : controlLoopsV1.getControlLoopList()) { - ControlLoops controlLoopsGet = - instantiationProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion()); - assertThat(controlLoopsGet.getControlLoopList()).isEmpty(); - } - - // GET controlLoops V2 is still available - for (ControlLoop controlLoop : controlLoopsV2.getControlLoopList()) { - ControlLoops controlLoopsGet = - instantiationProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion()); - assertThat(controlLoopsGet.getControlLoopList()).hasSize(1); - assertThat(controlLoop).isEqualTo(controlLoopsGet.getControlLoopList().get(0)); - } - - // DELETE controlLoops V2 - for (ControlLoop controlLoop : controlLoopsV2.getControlLoopList()) { - instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion()); - } - - // GET controlLoops V2 is not available - for (ControlLoop controlLoop : controlLoopsV2.getControlLoopList()) { - ControlLoops controlLoopsGet = - instantiationProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion()); - assertThat(controlLoopsGet.getControlLoopList()).isEmpty(); - } - } - - private synchronized void deleteEntryInDB(String name, String version) throws Exception { - if (!modelsProvider.getServiceTemplateList(null, null).isEmpty()) { - modelsProvider.deleteServiceTemplate(name, version); - } - } - - private synchronized void createEntryInDB() throws Exception { - try { - deleteEntryInDB(serviceTemplate.getName(), serviceTemplate.getVersion()); - modelsProvider.createServiceTemplate(serviceTemplate); - } catch (Exception e) { - e.printStackTrace(); - } - } } diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/rest/InstantiationControllerTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/rest/InstantiationControllerTest.java index 0fc473106..ebd25c3c1 100644 --- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/rest/InstantiationControllerTest.java +++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/rest/InstantiationControllerTest.java @@ -35,10 +35,13 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop; +import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider; +import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopOrderStateResponse; import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopPrimedResponse; +import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstancePropertiesResponse; import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand; import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse; import org.onap.policy.clamp.controlloop.runtime.instantiation.ControlLoopInstantiationProvider; @@ -64,6 +67,9 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @TestPropertySource(locations = {"classpath:application_test.properties"}) class InstantiationControllerTest extends CommonRestController { + private static final String ID_NAME = "PMSH_Instance1"; + private static final String ID_VERSION = "1.2.3"; + private static final String CL_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/controlloops/ControlLoops.json"; private static final String CL_INSTANTIATION_UPDATE_JSON = @@ -76,10 +82,10 @@ class InstantiationControllerTest extends CommonRestController { "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml"; private static final String INSTANTIATION_ENDPOINT = "instantiation"; - private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command"; - private static final String PRIMING_ENDPOINT = "controlLoopPriming"; + private static final String INSTANTIATION_PROPERTIES = "instanceProperties"; + private static final String INSTANTIATION_STATE = "instantiationState"; private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(); @@ -112,7 +118,7 @@ class InstantiationControllerTest extends CommonRestController { @AfterEach public void cleanDatabase() throws Exception { - deleteEntryInDB(serviceTemplate.getName(), serviceTemplate.getVersion()); + deleteEntryInDB(); } @Test @@ -256,7 +262,8 @@ class InstantiationControllerTest extends CommonRestController { @Test void testDelete_NoResultWithThisName() throws Exception { - Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName"); + Invocation.Builder invocationBuilder = + super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName&version=1.0.1"); Response resp = invocationBuilder.delete(); assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus()); InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class); @@ -298,8 +305,7 @@ class InstantiationControllerTest extends CommonRestController { Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName()); Response resp = invocationBuilder.delete(); - // should be BAD_REQUEST - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), resp.getStatus()); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus()); } } @@ -349,14 +355,43 @@ class InstantiationControllerTest extends CommonRestController { } } - private synchronized void deleteEntryInDB(String name, String version) throws Exception { - if (!serviceTemplateProvider.getServiceTemplateList(null, null).isEmpty()) { - serviceTemplateProvider.deleteServiceTemplate(name, version); + @Test + void testIntanceProperties() throws Exception { + Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES); + Response resp = invocationBuilder.post(Entity.json(serviceTemplate)); + assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); + var instancePropertyList = resp.readEntity(InstancePropertiesResponse.class); + assertNull(instancePropertyList.getErrorDetails()); + var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION); + assertEquals(id, instancePropertyList.getAffectedInstanceProperties().get(0)); + + invocationBuilder = super.sendRequest(INSTANTIATION_STATE + "?name=" + ID_NAME + "&version=" + ID_VERSION); + resp = invocationBuilder.buildGet().invoke(); + assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); + var instanceOrderState = resp.readEntity(ControlLoopOrderStateResponse.class); + assertEquals(ControlLoopOrderedState.UNINITIALISED, instanceOrderState.getOrderedState()); + assertEquals(ID_NAME, instanceOrderState.getControlLoopIdentifierList().get(0).getName()); + ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(ID_NAME, ID_VERSION); + assertThat(controlLoopsGet.getControlLoopList()).hasSize(1); + + invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + ID_NAME + "&version=" + ID_VERSION); + resp = invocationBuilder.delete(); + assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); + var instanceResponse = resp.readEntity(InstantiationResponse.class); + assertEquals(ID_NAME, instanceResponse.getAffectedControlLoops().get(0).getName()); + controlLoopsGet = instantiationProvider.getControlLoops(ID_NAME, ID_VERSION); + assertThat(controlLoopsGet.getControlLoopList()).isEmpty(); + } + + private synchronized void deleteEntryInDB() throws Exception { + var list = serviceTemplateProvider.getAllServiceTemplates(); + if (!list.isEmpty()) { + serviceTemplateProvider.deleteServiceTemplate(list.get(0).getName(), list.get(0).getVersion()); } } private synchronized void createEntryInDB() throws Exception { - deleteEntryInDB(serviceTemplate.getName(), serviceTemplate.getVersion()); + deleteEntryInDB(); serviceTemplateProvider.createServiceTemplate(serviceTemplate); } } diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/monitoring/TestMonitoringProvider.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/monitoring/TestMonitoringProvider.java index 2233e862c..cbc4c7104 100644 --- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/monitoring/TestMonitoringProvider.java +++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/monitoring/TestMonitoringProvider.java @@ -35,9 +35,9 @@ import java.time.Instant; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; import javax.ws.rs.core.Response; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -48,8 +48,6 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ClElementStatisticsProvider; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantStatisticsProvider; -import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup; -import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData; import org.onap.policy.common.utils.coder.Coder; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; @@ -85,8 +83,6 @@ class TestMonitoringProvider { private static ClElementStatisticsList inputClElementStatistics; private static ClElementStatisticsList invalidClElementInput; - private ControlLoopProvider clProvider = null; - @BeforeAll public static void beforeSetupStatistics() throws CoderException { // Reading input json for statistics data @@ -98,19 +94,11 @@ class TestMonitoringProvider { invalidClElementInput = CODER.decode(new File(INVALID_CL_ELEMENT_JSON_INPUT), ClElementStatisticsList.class); } - @AfterEach - void close() throws Exception { - if (clProvider != null) { - clProvider.close(); - } - } - @Test void testCreateParticipantStatistics() throws Exception { var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class); var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class); - ClRuntimeParameterGroup parameters = CommonTestData.geParameterGroup("createparStat"); - clProvider = new ControlLoopProvider(parameters.getDatabaseProviderParameters()); + var clProvider = mock(ControlLoopProvider.class); MonitoringProvider provider = new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider); @@ -152,8 +140,7 @@ class TestMonitoringProvider { when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME2), any(), any(), any(), eq(null), eq(SORT_DESC), eq(1))).thenReturn(List.of(inputParticipantStatistics.getStatisticsList().get(2))); - ClRuntimeParameterGroup parameters = CommonTestData.geParameterGroup("getparStat"); - clProvider = new ControlLoopProvider(parameters.getDatabaseProviderParameters()); + var clProvider = mock(ControlLoopProvider.class); var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class); MonitoringProvider provider = new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider); @@ -190,8 +177,7 @@ class TestMonitoringProvider { when(clElementStatisticsProvider.createClElementStatistics(eq(null))) .thenThrow(new PfModelRuntimeException(Response.Status.BAD_REQUEST, CL_LIST_IS_NULL)); - ClRuntimeParameterGroup parameters = CommonTestData.geParameterGroup("createelemstat"); - clProvider = new ControlLoopProvider(parameters.getDatabaseProviderParameters()); + var clProvider = mock(ControlLoopProvider.class); var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class); MonitoringProvider provider = @@ -218,8 +204,12 @@ class TestMonitoringProvider { void testGetClElementStatistics() throws Exception { var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class); var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class); - ClRuntimeParameterGroup parameters = CommonTestData.geParameterGroup("getelemstat"); - clProvider = new ControlLoopProvider(parameters.getDatabaseProviderParameters()); + var clProvider = mock(ControlLoopProvider.class); + + when(clElementStatisticsProvider.getFilteredClElementStatistics(eq(ID_NAME1), any(), any(), any(), anyMap(), + eq(SORT_DESC), eq(0))) + .thenReturn(List.of(inputClElementStatistics.getClElementStatistics().get(0), + inputClElementStatistics.getClElementStatistics().get(1))); when(clElementStatisticsProvider.getFilteredClElementStatistics(eq(ID_NAME1), any(), any(), any(), anyMap(), eq(SORT_DESC), eq(0))) @@ -266,7 +256,8 @@ class TestMonitoringProvider { var element = new ControlLoopElement(); element.setParticipantId(new ToscaConceptIdentifier(ID_NAME1, ID_VERSION1)); controlLoop.setElements(Map.of(UUID.randomUUID(), element)); - when(mockClProvider.getControlLoop(new ToscaConceptIdentifier(ID_NAME2, ID_VERSION1))).thenReturn(controlLoop); + when(mockClProvider.findControlLoop(new ToscaConceptIdentifier(ID_NAME2, ID_VERSION1))) + .thenReturn(Optional.of(controlLoop)); when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME1), eq(ID_VERSION1), any(), any(), eq(null), eq(SORT_DESC), eq(0))) @@ -300,7 +291,8 @@ class TestMonitoringProvider { new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, mockClProvider); // Mock controlloop data to be returned for the given CL Id - when(mockClProvider.getControlLoop(new ToscaConceptIdentifier(ID_NAME3, ID_VERSION1))).thenReturn(mockCL); + when(mockClProvider.findControlLoop(new ToscaConceptIdentifier(ID_NAME3, ID_VERSION1))) + .thenReturn(Optional.of(mockCL)); when(clElementStatisticsProvider.getFilteredClElementStatistics(eq(ID_NAME1), eq(ID_VERSION1), any(), any(), anyMap(), eq(SORT_DESC), eq(0))) diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandlerTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandlerTest.java index 5ed4a4fc0..21a826743 100644 --- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandlerTest.java +++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandlerTest.java @@ -92,7 +92,7 @@ class SupervisionHandlerTest { handler.triggerControlLoopSupervision(List.of(identifier)); verify(controlLoopUpdatePublisher).send(any(ControlLoop.class)); - verify(controlLoopProvider).updateControlLoop(any(ControlLoop.class)); + verify(controlLoopProvider).saveControlLoop(any(ControlLoop.class)); } @Test @@ -134,7 +134,7 @@ class SupervisionHandlerTest { handler.handleControlLoopStateChangeAckMessage(controlLoopAckMessage); - verify(controlLoopProvider).updateControlLoop(any(ControlLoop.class)); + verify(controlLoopProvider).saveControlLoop(any(ControlLoop.class)); } @Test @@ -152,7 +152,7 @@ class SupervisionHandlerTest { handler.handleControlLoopUpdateAckMessage(controlLoopAckMessage); - verify(controlLoopProvider).updateControlLoop(any(ControlLoop.class)); + verify(controlLoopProvider).saveControlLoop(any(ControlLoop.class)); } @Test @@ -290,14 +290,15 @@ class SupervisionHandlerTest { var controlLoop = controlLoopsCreate.getControlLoopList().get(0); controlLoop.setOrderedState(orderedState); - var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class); - + when(controlLoopProvider.findControlLoop(identifier)).thenReturn(Optional.of(controlLoop)); when(controlLoopProvider.getControlLoop(identifier)).thenReturn(controlLoop); var serviceTemplateProvider = Mockito.mock(ServiceTemplateProvider.class); when(serviceTemplateProvider.getServiceTemplateList(any(), any())) .thenReturn(List.of(InstantiationUtils.getToscaServiceTemplate(TOSCA_TEMPLATE_YAML))); + var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class); + return new SupervisionHandler(controlLoopProvider, participantProvider, monitoringProvider, serviceTemplateProvider, controlLoopUpdatePublisher, controlLoopStateChangePublisher, participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher); diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScannerTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScannerTest.java index 62029f009..b7a3fe005 100644 --- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScannerTest.java +++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScannerTest.java @@ -61,7 +61,7 @@ class SupervisionScannerTest { @BeforeAll public static void setUpBeforeAll() throws Exception { ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML); - when(serviceTemplateProvider.getServiceTemplateList(null, null)).thenReturn(List.of(serviceTemplate)); + when(serviceTemplateProvider.getAllServiceTemplates()).thenReturn(List.of(serviceTemplate)); } @Test @@ -76,14 +76,14 @@ class SupervisionScannerTest { var controlLoops = InstantiationUtils.getControlLoopsFromResource(CONTROLLOOP_JSON, "Crud").getControlLoopList(); - when(controlLoopProvider.getControlLoops(null, null)).thenReturn(controlLoops); + when(controlLoopProvider.getControlLoops()).thenReturn(controlLoops); var supervisionScanner = new SupervisionScanner(controlLoopProvider, serviceTemplateProvider, controlLoopStateChangePublisher, controlLoopUpdatePublisher, participantProvider, participantStatusReqPublisher, participantUpdatePublisher, clRuntimeParameterGroup); supervisionScanner.run(false); - verify(controlLoopProvider, times(0)).updateControlLoop(any(ControlLoop.class)); + verify(controlLoopProvider, times(0)).saveControlLoop(any(ControlLoop.class)); } @Test @@ -93,7 +93,7 @@ class SupervisionScannerTest { controlLoops.get(0).setState(ControlLoopState.UNINITIALISED2PASSIVE); controlLoops.get(0).setOrderedState(ControlLoopOrderedState.UNINITIALISED); var controlLoopProvider = mock(ControlLoopProvider.class); - when(controlLoopProvider.getControlLoops(null, null)).thenReturn(controlLoops); + when(controlLoopProvider.getControlLoops()).thenReturn(controlLoops); var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class); var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class); @@ -107,14 +107,14 @@ class SupervisionScannerTest { participantStatusReqPublisher, participantUpdatePublisher, clRuntimeParameterGroup); supervisionScanner.run(false); - verify(controlLoopProvider, times(1)).updateControlLoop(any(ControlLoop.class)); + verify(controlLoopProvider, times(1)).saveControlLoop(any(ControlLoop.class)); } @Test void testScanner() throws PfModelException { var controlLoopProvider = mock(ControlLoopProvider.class); var controlLoop = new ControlLoop(); - when(controlLoopProvider.getControlLoops(null, null)).thenReturn(List.of(controlLoop)); + when(controlLoopProvider.getControlLoops()).thenReturn(List.of(controlLoop)); var participantProvider = mock(ParticipantProvider.class); var participant = new Participant(); @@ -134,7 +134,7 @@ class SupervisionScannerTest { supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier()); supervisionScanner.run(true); - verify(controlLoopProvider, times(0)).updateControlLoop(any(ControlLoop.class)); + verify(controlLoopProvider, times(0)).saveControlLoop(any(ControlLoop.class)); verify(participantStatusReqPublisher, times(0)).send(any(ToscaConceptIdentifier.class)); } @@ -156,7 +156,7 @@ class SupervisionScannerTest { } var controlLoopProvider = mock(ControlLoopProvider.class); - when(controlLoopProvider.getControlLoops(null, null)).thenReturn(controlLoops); + when(controlLoopProvider.getControlLoops()).thenReturn(controlLoops); var participantProvider = mock(ParticipantProvider.class); var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class); @@ -178,7 +178,7 @@ class SupervisionScannerTest { void testScanParticipant() throws PfModelException { var controlLoopProvider = mock(ControlLoopProvider.class); var controlLoop = new ControlLoop(); - when(controlLoopProvider.getControlLoops(null, null)).thenReturn(List.of(controlLoop)); + when(controlLoopProvider.getControlLoops()).thenReturn(List.of(controlLoop)); var clRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanParticipant"); clRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().setMaxWaitMs(-1); diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/SupervisionMessagesTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/SupervisionMessagesTest.java index b64bd9fbe..a465aa254 100644 --- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/SupervisionMessagesTest.java +++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/SupervisionMessagesTest.java @@ -25,13 +25,13 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.time.Instant; import java.util.Collections; import java.util.List; import java.util.UUID; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -46,10 +46,8 @@ import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.Parti import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck; import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck; -import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup; import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider; import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler; -import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData; import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; import org.onap.policy.common.endpoints.event.comm.TopicSink; @@ -63,7 +61,6 @@ class SupervisionMessagesTest extends CommonRestController { private static final CommInfrastructure INFRA = CommInfrastructure.NOOP; private static final String TOPIC = "my-topic"; private static SupervisionHandler supervisionHandler; - private static ControlLoopProvider clProvider; /** * setup Db Provider Parameters. @@ -72,10 +69,7 @@ class SupervisionMessagesTest extends CommonRestController { */ @BeforeAll public static void setupDbProviderParameters() throws PfModelException { - ClRuntimeParameterGroup controlLoopParameters = CommonTestData.geParameterGroup("instantproviderdb"); - - clProvider = new ControlLoopProvider(controlLoopParameters.getDatabaseProviderParameters()); - + var clProvider = mock(ControlLoopProvider.class); var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class); var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class); var monitoringProvider = @@ -92,11 +86,6 @@ class SupervisionMessagesTest extends CommonRestController { participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher); } - @AfterAll - public static void closeDbProvider() throws PfModelException { - clProvider.close(); - } - @Test void testSendParticipantRegisterAck() throws Exception { final ParticipantRegisterAck participantRegisterAckMsg = new ParticipantRegisterAck(); @@ -106,7 +95,7 @@ class SupervisionMessagesTest extends CommonRestController { synchronized (lockit) { ParticipantRegisterAckPublisher clRegisterAckPublisher = new ParticipantRegisterAckPublisher(); - clRegisterAckPublisher.active(Collections.singletonList(Mockito.mock(TopicSink.class))); + clRegisterAckPublisher.active(List.of(Mockito.mock(TopicSink.class))); assertThatCode(() -> clRegisterAckPublisher.send(participantRegisterAckMsg)).doesNotThrowAnyException(); } } @@ -173,6 +162,51 @@ class SupervisionMessagesTest extends CommonRestController { verify(topicSink).send(anyString()); } + @Test + void testParticipantUpdatePublisherDecomisioning() { + var publisher = new ParticipantUpdatePublisher(mock(ServiceTemplateProvider.class)); + var topicSink = mock(TopicSink.class); + publisher.active(List.of(topicSink)); + publisher.sendDecomisioning(); + verify(topicSink).send(anyString()); + } + + @Test + void testParticipantUpdatePublisherComissioning() { + var publisher = new ParticipantUpdatePublisher(mock(ServiceTemplateProvider.class)); + var topicSink = mock(TopicSink.class); + publisher.active(List.of(topicSink)); + publisher.sendComissioningBroadcast("NAME", "1.0.0"); + verify(topicSink, times(0)).send(anyString()); + } + + @Test + void testParticipantStatusReqPublisher() { + var publisher = new ParticipantStatusReqPublisher(); + var topicSink = mock(TopicSink.class); + publisher.active(List.of(topicSink)); + publisher.send(getParticipantId()); + verify(topicSink).send(anyString()); + } + + @Test + void testParticipantRegisterAckPublisher() { + var publisher = new ParticipantRegisterAckPublisher(); + var topicSink = mock(TopicSink.class); + publisher.active(List.of(topicSink)); + publisher.send(UUID.randomUUID(), getParticipantId(), getParticipantType()); + verify(topicSink).send(anyString()); + } + + @Test + void testParticipantDeregisterAckPublisher() { + var publisher = new ParticipantDeregisterAckPublisher(); + var topicSink = mock(TopicSink.class); + publisher.active(List.of(topicSink)); + publisher.send(UUID.randomUUID()); + verify(topicSink).send(anyString()); + } + private ControlLoop getControlLoop() { var controlLoop = new ControlLoop(); controlLoop.setName("NAME"); |