aboutsummaryrefslogtreecommitdiffstats
path: root/runtime-controlloop
diff options
context:
space:
mode:
Diffstat (limited to 'runtime-controlloop')
-rw-r--r--runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProvider.java82
-rw-r--r--runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProvider.java84
-rw-r--r--runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/CommissioningController.java5
-rw-r--r--runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/InstantiationController.java66
-rw-r--r--runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java27
-rw-r--r--runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantUpdatePublisher.java25
-rw-r--r--runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProviderTest.java34
-rw-r--r--runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProviderTest.java72
-rw-r--r--runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/InstantiationUtils.java25
-rw-r--r--runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/rest/InstantiationControllerTest.java65
-rw-r--r--runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/SupervisionMessagesTest.java14
-rw-r--r--runtime-controlloop/src/test/resources/META-INF/persistence.xml1
-rwxr-xr-x[-rw-r--r--]runtime-controlloop/src/test/resources/testscripts/listenOnTopic.sh0
13 files changed, 436 insertions, 64 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 e676cbe0e..74b5394f4 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
@@ -33,8 +33,13 @@ import java.util.stream.Collectors;
import javax.ws.rs.core.Response.Status;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
+import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
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.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.clamp.controlloop.models.messages.rest.commissioning.CommissioningResponse;
+import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.provider.PolicyModelsProvider;
import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType;
@@ -62,6 +67,8 @@ public class CommissioningProvider {
private final PolicyModelsProvider modelsProvider;
private final ControlLoopProvider clProvider;
private final ObjectMapper mapper = new ObjectMapper();
+ private final ParticipantProvider participantProvider;
+ private final SupervisionHandler supervisionHandler;
private static final Object lockit = new Object();
@@ -71,9 +78,14 @@ public class CommissioningProvider {
* @param modelsProvider the PolicyModelsProvider
* @param clProvider the ControlLoopProvider
*/
- public CommissioningProvider(PolicyModelsProvider modelsProvider, ControlLoopProvider clProvider) {
+ public CommissioningProvider(PolicyModelsProvider modelsProvider,
+ ControlLoopProvider clProvider,
+ SupervisionHandler supervisionHandler,
+ ParticipantProvider participantProvider) {
this.modelsProvider = modelsProvider;
this.clProvider = clProvider;
+ this.supervisionHandler = supervisionHandler;
+ this.participantProvider = participantProvider;
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
}
@@ -85,9 +97,33 @@ public class CommissioningProvider {
* @throws PfModelException on creation errors
*/
public CommissioningResponse createControlLoopDefinitions(ToscaServiceTemplate serviceTemplate)
- throws PfModelException {
+ throws PfModelException, ControlLoopException {
+
+ if (verifyIfInstancePropertiesExists()) {
+ throw new ControlLoopException(Status.BAD_REQUEST,
+ "Delete instances, to commission control loop definitions");
+ }
+
synchronized (lockit) {
modelsProvider.createServiceTemplate(serviceTemplate);
+ List<Participant> participantList =
+ participantProvider.getParticipants(null,
+ null);
+
+ if (participantList != null) {
+ for (Participant participant: participantList) {
+ var participantType = new ToscaConceptIdentifier();
+ participantType.setName(participant.getType());
+ participantType.setVersion(participant.getTypeVersion());
+
+ var participantUpdate = new ParticipantUpdate();
+ participantUpdate.setParticipantId(participant.getDefinition());
+ participantUpdate.setParticipantType(participantType);
+
+ this.supervisionHandler.handleSendCommissionMessage(participantUpdate);
+ }
+ }
+
}
var response = new CommissioningResponse();
@@ -110,8 +146,33 @@ public class CommissioningProvider {
* @return the result of the deletion
* @throws PfModelException on deletion errors
*/
- public CommissioningResponse deleteControlLoopDefinition(String name, String version) throws PfModelException {
+ public CommissioningResponse deleteControlLoopDefinition(String name, String version)
+ throws PfModelException, ControlLoopException {
+
+ if (verifyIfInstancePropertiesExists()) {
+ throw new ControlLoopException(Status.BAD_REQUEST,
+ "Delete instances, to commission control loop definitions");
+ }
+
synchronized (lockit) {
+ List<Participant> participantList =
+ participantProvider.getParticipants(null,
+ null);
+
+ if (participantList != null) {
+ for (Participant participant : participantList) {
+ var participantType = new ToscaConceptIdentifier();
+ participantType.setName(participant.getType());
+ participantType.setVersion(participant.getTypeVersion());
+
+ var participantUpdate = new ParticipantUpdate();
+ participantUpdate.setParticipantId(participant.getDefinition());
+ participantUpdate.setParticipantType(participantType);
+
+ this.supervisionHandler.handleSendDeCommissionMessage(participantUpdate);
+ }
+ }
+
modelsProvider.deleteServiceTemplate(name, version);
}
@@ -365,7 +426,9 @@ public class CommissioningProvider {
* @return the tosca service template
* @throws PfModelException on errors getting tosca service template
*/
- public String getToscaServiceTemplateReduced(String name, String version) throws PfModelException {
+ public String getToscaServiceTemplateReduced(String name, String version)
+ throws PfModelException {
+
var serviceTemplates = new ToscaServiceTemplates();
serviceTemplates.setServiceTemplates(modelsProvider.getServiceTemplateList(name, version));
@@ -431,4 +494,15 @@ public class CommissioningProvider {
throw new PfModelException(Status.BAD_REQUEST, "Converion to Json Schema failed", e);
}
}
+
+ /**
+ * Validates to see if there is any instance properties saved.
+ *
+ * @return true if exists instance properties
+ */
+ private Boolean verifyIfInstancePropertiesExists() {
+ return clProvider.getNodeTemplates(null, null).stream()
+ .anyMatch(nodeTemplate -> nodeTemplate.getKey().getName().contains("_Instance"));
+
+ }
}
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 cb22132b4..da85b0a83 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
@@ -37,6 +37,7 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop
import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
import org.onap.policy.clamp.controlloop.models.messages.rest.GenericNameVersion;
import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopOrderStateResponse;
+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.commissioning.CommissioningProvider;
@@ -48,6 +49,7 @@ import org.onap.policy.common.parameters.ValidationStatus;
import org.onap.policy.models.base.PfModelException;
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;
import org.springframework.stereotype.Component;
/**
@@ -62,6 +64,44 @@ public class ControlLoopInstantiationProvider {
private static final Object lockit = new Object();
+ private static final String CL_ELEMENT_NAME = "name";
+
+ /**
+ * Create Instance Properties.
+ *
+ * @param serviceTemplate the service template
+ * @return the result of the instantiation operation
+ * @throws PfModelException on creation errors
+ */
+ public InstancePropertiesResponse saveInstanceProperties(ToscaServiceTemplate serviceTemplate) {
+
+ String instanceName = generateSequentialInstanceName();
+
+ Map<String, ToscaNodeTemplate> nodeTemplates = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+
+ nodeTemplates.forEach((key, template) -> {
+ String name = key + instanceName;
+ String description = template.getDescription() + instanceName;
+ template.setName(name);
+ template.setDescription(description);
+
+ changeInstanceElementsName(template, instanceName);
+
+ });
+
+ Map<String, ToscaNodeTemplate> toscaSavedNodeTemplate = controlLoopProvider
+ .saveInstanceProperties(serviceTemplate);
+
+ var response = new InstancePropertiesResponse();
+
+ // @formatter:off
+ response.setAffectedInstanceProperties(toscaSavedNodeTemplate.values().stream().map(template ->
+ template.getKey().asIdentifier()).collect(Collectors.toList()));
+ // @formatter:on
+
+ return response;
+ }
+
/**
* Create control loops.
*
@@ -267,10 +307,10 @@ public class ControlLoopInstantiationProvider {
List<ControlLoop> controlLoops = controlLoopProvider.getControlLoops(name, version);
- ControlLoopOrderStateResponse response = new ControlLoopOrderStateResponse();
+ var response = new ControlLoopOrderStateResponse();
controlLoops.forEach(controlLoop -> {
- GenericNameVersion genericNameVersion = new GenericNameVersion();
+ var genericNameVersion = new GenericNameVersion();
genericNameVersion.setName(controlLoop.getName());
genericNameVersion.setVersion(controlLoop.getVersion());
response.getControlLoopIdentifierList().add(genericNameVersion);
@@ -278,4 +318,44 @@ public class ControlLoopInstantiationProvider {
return response;
}
+
+ /**
+ * Creates instance element name.
+ *
+ * @param serviceTemplate the service serviceTemplate
+ * @param instanceName to amend to the element name
+ */
+ private void changeInstanceElementsName(ToscaNodeTemplate serviceTemplate, String instanceName) {
+
+ @SuppressWarnings("unchecked")
+ List<Map<String, String>> controlLoopElements = (List<Map<String, String>>) serviceTemplate.getProperties()
+ .get("elements");
+
+ if (controlLoopElements != null) {
+ controlLoopElements.forEach(clElement -> {
+ String name = clElement.get(CL_ELEMENT_NAME) + instanceName;
+ clElement.replace(CL_ELEMENT_NAME, name);
+ });
+ }
+ }
+
+
+ /**
+ * Generates Instance Name in sequential order and return it to append to the Node Template Name.
+ *
+ * @return instanceName
+ */
+ private String generateSequentialInstanceName() {
+ List<ToscaNodeTemplate> nodeTemplates = controlLoopProvider.getNodeTemplates(null, null);
+
+ int instanceNumber =
+ nodeTemplates.stream().map(ToscaNodeTemplate::getName)
+ .filter(name -> name.contains("_Instance")).map(n -> {
+ String[] defNameArr = n.split("_Instance");
+
+ return Integer.parseInt(defNameArr[1]);
+ }).reduce(0, Math::max);
+
+ return "_Instance" + (instanceNumber + 1);
+ }
}
diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/CommissioningController.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/CommissioningController.java
index ec7f14d8b..2c3a41e26 100644
--- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/CommissioningController.java
+++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/CommissioningController.java
@@ -33,6 +33,7 @@ import java.util.Map;
import java.util.UUID;
import javax.ws.rs.core.Response.Status;
import lombok.RequiredArgsConstructor;
+import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
import org.onap.policy.clamp.controlloop.models.messages.rest.commissioning.CommissioningResponse;
import org.onap.policy.clamp.controlloop.runtime.commissioning.CommissioningProvider;
import org.onap.policy.clamp.controlloop.runtime.main.web.AbstractRestController;
@@ -120,7 +121,7 @@ public class CommissioningController extends AbstractRestController {
name = REQUEST_ID_NAME,
required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
@ApiParam(value = "Entity Body of Control Loop", required = true) @RequestBody ToscaServiceTemplate body)
- throws PfModelException {
+ throws PfModelException, ControlLoopException {
return ResponseEntity.ok().body(provider.createControlLoopDefinitions(body));
}
@@ -187,7 +188,7 @@ public class CommissioningController extends AbstractRestController {
@ApiParam(
value = "Control Loop definition version",
required = true) @RequestParam("version") String version)
- throws PfModelException {
+ throws PfModelException, ControlLoopException {
return ResponseEntity.ok().body(provider.deleteControlLoopDefinition(name, version));
}
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 6f0c859da..d2a85c46d 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
@@ -33,11 +33,13 @@ import lombok.RequiredArgsConstructor;
import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopOrderStateResponse;
+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;
import org.onap.policy.clamp.controlloop.runtime.main.web.AbstractRestController;
import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -127,6 +129,70 @@ public class InstantiationController extends AbstractRestController {
}
/**
+ * Saves instance properties.
+ *
+ * @param requestId request ID used in ONAP logging
+ * @param body the body of control loop following TOSCA definition
+ * @return a response
+ */
+ // @formatter:off
+ @PostMapping(value = "/instanceProperties",
+ consumes = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML},
+ produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
+ @ApiOperation(
+ value = "Saves instance properties",
+ notes = "Saves instance properties, returning the saved instances properties and it's version",
+ response = InstancePropertiesResponse.class,
+ tags = {TAGS},
+ authorizations = @Authorization(value = AUTHORIZATION_TYPE),
+ responseHeaders = {
+ @ResponseHeader(
+ name = VERSION_MINOR_NAME,
+ description = VERSION_MINOR_DESCRIPTION,
+ response = String.class),
+ @ResponseHeader(
+ name = VERSION_PATCH_NAME,
+ description = VERSION_PATCH_DESCRIPTION,
+ response = String.class),
+ @ResponseHeader(
+ name = VERSION_LATEST_NAME,
+ description = VERSION_LATEST_DESCRIPTION,
+ response = String.class),
+ @ResponseHeader(
+ name = REQUEST_ID_NAME,
+ description = REQUEST_ID_HDR_DESCRIPTION,
+ response = UUID.class)
+ },
+ extensions = {
+ @Extension
+ (
+ name = EXTENSION_NAME,
+ properties = {
+ @ExtensionProperty(name = API_VERSION_NAME, value = API_VERSION),
+ @ExtensionProperty(name = LAST_MOD_NAME, value = LAST_MOD_RELEASE)
+ }
+ )
+ }
+ )
+ @ApiResponses(
+ value = {
+ @ApiResponse(code = AUTHENTICATION_ERROR_CODE, message = AUTHENTICATION_ERROR_MESSAGE),
+ @ApiResponse(code = AUTHORIZATION_ERROR_CODE, message = AUTHORIZATION_ERROR_MESSAGE),
+ @ApiResponse(code = SERVER_ERROR_CODE, message = SERVER_ERROR_MESSAGE)
+ }
+ )
+ // @formatter:on
+ public ResponseEntity<InstancePropertiesResponse> createInstanceProperties(
+ @RequestHeader(
+ 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 {
+
+ return ResponseEntity.ok().body(provider.saveInstanceProperties(body));
+ }
+
+ /**
* Queries details of all control loops.
*
* @param requestId request ID used in ONAP logging
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 db7d34895..d06698ec4 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
@@ -34,6 +34,7 @@ import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider;
import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopStateChangePublisher;
@@ -140,7 +141,7 @@ public class SupervisionHandler {
participantRegisterAckPublisher.send(participantRegisterMessage.getMessageId());
participantUpdatePublisher.send(participantRegisterMessage.getParticipantId(),
- participantRegisterMessage.getParticipantType());
+ participantRegisterMessage.getParticipantType(), true);
}
/**
@@ -165,6 +166,30 @@ public class SupervisionHandler {
}
/**
+ * Send commissioning update message to dmaap.
+ *
+ * @param participantUpdateMessage the ParticipantUpdate message to send
+ */
+ public void handleSendCommissionMessage(ParticipantUpdate participantUpdateMessage) {
+ LOGGER.debug("Participant update message being sent {}", participantUpdateMessage);
+
+ participantUpdatePublisher.send(participantUpdateMessage.getParticipantId(),
+ participantUpdateMessage.getParticipantType(), true);
+ }
+
+ /**
+ * Send decommissioning update message to dmaap.
+ *
+ * @param participantUpdateMessage the ParticipantUpdate message to send
+ */
+ public void handleSendDeCommissionMessage(ParticipantUpdate participantUpdateMessage) {
+ LOGGER.debug("Participant update message being sent {}", participantUpdateMessage);
+
+ participantUpdatePublisher.send(participantUpdateMessage.getParticipantId(),
+ participantUpdateMessage.getParticipantType(), false);
+ }
+
+ /**
* Supervise a control loop, performing whatever actions need to be performed on the control loop.
*
* @param controlLoop the control loop to supervises
diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantUpdatePublisher.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantUpdatePublisher.java
index 5edf528b8..d5dc4a6d0 100644
--- a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantUpdatePublisher.java
+++ b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantUpdatePublisher.java
@@ -22,22 +22,21 @@ package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
import java.time.Instant;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import lombok.AllArgsConstructor;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
-import org.onap.policy.clamp.controlloop.runtime.commissioning.CommissioningProvider;
import org.onap.policy.common.utils.coder.Coder;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
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;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplates;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@@ -51,7 +50,7 @@ public class ParticipantUpdatePublisher extends AbstractParticipantPublisher<Par
private static final Logger LOGGER = LoggerFactory.getLogger(ParticipantUpdatePublisher.class);
private static final String CONTROL_LOOP_ELEMENT = "ControlLoopElement";
- private final CommissioningProvider commissioningProvider;
+ private final PolicyModelsProvider modelsProvider;
private static final Coder CODER = new StandardCoder();
/**
@@ -60,7 +59,8 @@ public class ParticipantUpdatePublisher extends AbstractParticipantPublisher<Par
* @param participantId the participant Id
* @param participantType the participant Type
*/
- public void send(ToscaConceptIdentifier participantId, ToscaConceptIdentifier participantType) {
+ public void send(ToscaConceptIdentifier participantId, ToscaConceptIdentifier participantType,
+ boolean commissionFlag) {
var message = new ParticipantUpdate();
message.setParticipantId(participantId);
message.setParticipantType(participantType);
@@ -68,7 +68,7 @@ public class ParticipantUpdatePublisher extends AbstractParticipantPublisher<Par
ToscaServiceTemplate toscaServiceTemplate;
try {
- toscaServiceTemplate = commissioningProvider.getToscaServiceTemplate(null, null);
+ toscaServiceTemplate = modelsProvider.getServiceTemplateList(null, null).get(0);
} catch (PfModelException pfme) {
LOGGER.warn("Get of tosca service template failed, cannot send participantupdate", pfme);
return;
@@ -91,8 +91,15 @@ public class ParticipantUpdatePublisher extends AbstractParticipantPublisher<Par
}
}
- message.setParticipantDefinitionUpdates(participantDefinitionUpdates);
- message.setToscaServiceTemplate(toscaServiceTemplate);
+ if (commissionFlag) {
+ // Commission the controlloop but sending participantdefinitions to participants
+ message.setParticipantDefinitionUpdates(participantDefinitionUpdates);
+ message.setToscaServiceTemplate(toscaServiceTemplate);
+ } else {
+ // DeCommission the controlloop but deleting participantdefinitions on participants
+ message.setParticipantDefinitionUpdates(null);
+ message.setToscaServiceTemplate(null);
+ }
LOGGER.debug("Participant Update sent {}", message);
super.send(message);
}
@@ -127,7 +134,7 @@ public class ParticipantUpdatePublisher extends AbstractParticipantPublisher<Par
private ParticipantDefinition getParticipantDefinition(ControlLoopElementDefinition clDefinition,
ToscaConceptIdentifier clParticipantId,
List<ControlLoopElementDefinition> controlLoopElementDefinitionList) {
- ParticipantDefinition participantDefinition = new ParticipantDefinition();
+ var participantDefinition = new ParticipantDefinition();
participantDefinition.setParticipantId(clParticipantId);
controlLoopElementDefinitionList.add(clDefinition);
participantDefinition.setControlLoopElementDefinitionList(controlLoopElementDefinitionList);
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 232d6d83c..5c49b8523 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
@@ -33,6 +33,7 @@ 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.runtime.main.parameters.ClRuntimeParameterGroup;
import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData;
import org.onap.policy.common.utils.coder.Coder;
@@ -62,7 +63,7 @@ class CommissioningProviderTest {
private ControlLoopProvider clProvider = null;
private static final Coder CODER = new StandardCoder();
private final ObjectMapper mapper = new ObjectMapper();
-
+ private ParticipantProvider participantProvider;
@AfterEach
void close() throws Exception {
@@ -72,6 +73,9 @@ class CommissioningProviderTest {
if (clProvider != null) {
clProvider.close();
}
+ if (participantProvider != null) {
+ participantProvider.close();
+ }
}
/**
@@ -85,8 +89,10 @@ class CommissioningProviderTest {
modelsProvider =
CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
- CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
+ CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider,
+ null, participantProvider);
ToscaServiceTemplate serviceTemplate = yamlTranslator
.fromYaml(ResourceUtils.getResourceAsString(TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
@@ -122,8 +128,10 @@ class CommissioningProviderTest {
modelsProvider =
CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
- CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
+ CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider,
+ null, participantProvider);
// Test Service template is null
assertThatThrownBy(() -> provider.createControlLoopDefinitions(null)).hasMessageMatching(TEMPLATE_IS_NULL);
List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null);
@@ -151,8 +159,10 @@ class CommissioningProviderTest {
modelsProvider =
CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
- CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
+ CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider,
+ null, participantProvider);
ToscaServiceTemplate serviceTemplate = yamlTranslator
.fromYaml(ResourceUtils
.getResourceAsString(COMMON_TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
@@ -179,8 +189,10 @@ class CommissioningProviderTest {
modelsProvider =
CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
- CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
+ CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider,
+ null, participantProvider);
ToscaServiceTemplate serviceTemplate = yamlTranslator
.fromYaml(ResourceUtils
.getResourceAsString(COMMON_TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
@@ -207,8 +219,10 @@ class CommissioningProviderTest {
modelsProvider =
CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
- CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
+ CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider,
+ null, participantProvider);
ToscaServiceTemplate serviceTemplate = yamlTranslator
.fromYaml(ResourceUtils
.getResourceAsString(COMMON_TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
@@ -258,8 +272,10 @@ class CommissioningProviderTest {
modelsProvider =
CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
- CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
+ CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider,
+ null, participantProvider);
ToscaServiceTemplate serviceTemplate = yamlTranslator
.fromYaml(ResourceUtils.getResourceAsString(TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
@@ -286,8 +302,10 @@ class CommissioningProviderTest {
modelsProvider =
CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
- CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
+ CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider,
+ null, participantProvider);
ToscaServiceTemplate serviceTemplate = yamlTranslator
.fromYaml(ResourceUtils.getResourceAsString(TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
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 c414ffa02..d1aaddc5a 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
@@ -26,7 +26,9 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.io.IOException;
import java.util.ArrayList;
import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
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;
@@ -49,9 +51,14 @@ import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantDer
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.common.utils.coder.YamlJsonTranslator;
+import org.onap.policy.common.utils.resources.ResourceUtils;
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.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
/**
* Class to perform unit test of {@link ControlLoopInstantiationProvider}}.
@@ -88,10 +95,21 @@ class ControlLoopInstantiationProviderTest {
+ " item \"ControlLoop\" value \"org.onap.domain.PMSHControlLoopDefinition\" INVALID,"
+ " Commissioned control loop definition not FOUND\n";
+ private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+
+ private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
+
private static SupervisionHandler supervisionHandler;
private static CommissioningProvider commissioningProvider;
private static ControlLoopProvider clProvider;
private static PolicyModelsProvider modelsProvider;
+ private static ParticipantProvider participantProvider;
+
+ @BeforeAll
+ public static void setUpBeforeClass() throws Exception {
+ serviceTemplate = yamlTranslator.fromYaml(ResourceUtils.getResourceAsString(TOSCA_TEMPLATE_YAML),
+ ToscaServiceTemplate.class);
+ }
/**
* setup Db Provider Parameters.
@@ -105,11 +123,13 @@ class ControlLoopInstantiationProviderTest {
modelsProvider =
CommonTestData.getPolicyModelsProvider(controlLoopParameters.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(controlLoopParameters.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(controlLoopParameters.getDatabaseProviderParameters());
+
var participantStatisticsProvider =
new ParticipantStatisticsProvider(controlLoopParameters.getDatabaseProviderParameters());
var clElementStatisticsProvider =
new ClElementStatisticsProvider(controlLoopParameters.getDatabaseProviderParameters());
- commissioningProvider = new CommissioningProvider(modelsProvider, clProvider);
+ commissioningProvider = new CommissioningProvider(modelsProvider, clProvider, null, participantProvider);
var monitoringProvider =
new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider);
var participantProvider = new ParticipantProvider(controlLoopParameters.getDatabaseProviderParameters());
@@ -123,24 +143,31 @@ class ControlLoopInstantiationProviderTest {
participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
}
+ @BeforeEach
+ public void populateDb() throws Exception {
+ createEntryInDB();
+ }
+
@AfterAll
public static void closeDbProvider() throws PfModelException {
clProvider.close();
modelsProvider.close();
}
+ @AfterEach
+ public void cleanDatabase() throws Exception {
+ deleteEntryInDB(serviceTemplate.getName(), serviceTemplate.getVersion());
+ }
+
@Test
void testInstantiationCrud() throws Exception {
+
ControlLoops controlLoopsCreate =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Crud");
ControlLoops controlLoopsDb = getControlLoopsFromDb(controlLoopsCreate);
assertThat(controlLoopsDb.getControlLoopList()).isEmpty();
var instantiationProvider =
new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler);
-
- // to validate control Loop, it needs to define ToscaServiceTemplate
- InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider);
-
InstantiationResponse instantiationResponse = instantiationProvider.createControlLoops(controlLoopsCreate);
InstantiationUtils.assertInstantiationResponse(instantiationResponse, controlLoopsCreate);
@@ -192,11 +219,12 @@ class ControlLoopInstantiationProviderTest {
}
private ControlLoops getControlLoopsFromDb(ControlLoops controlLoopsSource) throws Exception {
+
ControlLoops controlLoopsDb = new ControlLoops();
controlLoopsDb.setControlLoopList(new ArrayList<>());
- var instantiationProvider =
- new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler);
+ var instantiationProvider = new ControlLoopInstantiationProvider(clProvider,
+ commissioningProvider, supervisionHandler);
for (ControlLoop controlLoop : controlLoopsSource.getControlLoopList()) {
ControlLoops controlLoopsFromDb =
@@ -208,6 +236,7 @@ class ControlLoopInstantiationProviderTest {
@Test
void testInstantiationDelete() throws Exception {
+
ControlLoops controlLoops =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
assertThat(getControlLoopsFromDb(controlLoops).getControlLoopList()).isEmpty();
@@ -217,9 +246,6 @@ class ControlLoopInstantiationProviderTest {
var instantiationProvider =
new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler);
- // to validate control Loop, it needs to define ToscaServiceTemplate
- InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider);
-
assertThatThrownBy(
() -> instantiationProvider.deleteControlLoop(controlLoop0.getName(), controlLoop0.getVersion()))
.hasMessageMatching(CONTROL_LOOP_NOT_FOUND);
@@ -263,6 +289,7 @@ class ControlLoopInstantiationProviderTest {
@Test
void testCreateControlLoops_NoDuplicates() throws Exception {
+
ControlLoops controlLoopsCreate =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "NoDuplicates");
@@ -272,9 +299,6 @@ class ControlLoopInstantiationProviderTest {
var instantiationProvider =
new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler);
- // to validate control Loop, it needs to define ToscaServiceTemplate
- InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider);
-
InstantiationResponse instantiationResponse = instantiationProvider.createControlLoops(controlLoopsCreate);
InstantiationUtils.assertInstantiationResponse(instantiationResponse, controlLoopsCreate);
@@ -288,13 +312,14 @@ class ControlLoopInstantiationProviderTest {
@Test
void testCreateControlLoops_CommissionedClElementNotFound() throws Exception {
+
ControlLoops controlLoops = InstantiationUtils
.getControlLoopsFromResource(CL_INSTANTIATION_DEFINITION_NAME_NOT_FOUND_JSON, "ClElementNotFound");
var provider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler);
// to validate control Loop, it needs to define ToscaServiceTemplate
- InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider);
+ // InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider);
assertThat(getControlLoopsFromDb(controlLoops).getControlLoopList()).isEmpty();
@@ -324,7 +349,6 @@ class ControlLoopInstantiationProviderTest {
@Test
void testInstantiationVersions() throws Exception {
-
// create controlLoops V1
ControlLoops controlLoopsV1 =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "V1");
@@ -333,9 +357,6 @@ class ControlLoopInstantiationProviderTest {
var instantiationProvider =
new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler);
- // to validate control Loop, it needs to define ToscaServiceTemplate
- InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider);
-
InstantiationUtils.assertInstantiationResponse(instantiationProvider.createControlLoops(controlLoopsV1),
controlLoopsV1);
@@ -386,4 +407,19 @@ class ControlLoopInstantiationProviderTest {
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/InstantiationUtils.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/InstantiationUtils.java
index 9a9fc1680..8529c0c9b 100644
--- a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/InstantiationUtils.java
+++ b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/InstantiationUtils.java
@@ -25,8 +25,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.File;
+import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
+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.commissioning.CommissioningProvider;
@@ -133,11 +135,32 @@ public class InstantiationUtils {
* @throws PfModelException if an error occurs
*/
public static void storeToscaServiceTemplate(String path, CommissioningProvider commissioningProvider)
- throws PfModelException {
+ throws PfModelException, ControlLoopException {
ToscaServiceTemplate template =
yamlTranslator.fromYaml(ResourceUtils.getResourceAsString(path), ToscaServiceTemplate.class);
+ commissioningProvider.deleteControlLoopDefinition(null, null);
+
commissioningProvider.createControlLoopDefinitions(template);
}
+
+ /**
+ * Assert that instance properties has been properly saved.
+ *
+ * @param response InstancePropertiesResponse
+ * @throws PfModelException if an error occurs
+ */
+ public static void assertInstancePropertiesResponse(InstancePropertiesResponse response) throws PfModelException {
+
+ assertThat(response).isNotNull();
+ assertThat(response.getErrorDetails()).isNull();
+ assertThat(response.getAffectedInstanceProperties()).hasSize(8);
+
+ boolean containsInstance = response.getAffectedInstanceProperties().stream()
+ .anyMatch(identifier -> identifier.getName().contains("_Instance"));
+
+ assertThat(containsInstance).isTrue();
+
+ }
}
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 6c9674dec..41c55dd2d 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
@@ -28,6 +28,9 @@ import static org.junit.jupiter.api.Assertions.assertNull;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.Response;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -35,12 +38,17 @@ import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
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.instantiation.ControlLoopInstantiationProvider;
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.main.rest.InstantiationController;
import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
+import org.onap.policy.common.utils.coder.YamlJsonTranslator;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.provider.PolicyModelsProvider;
+import org.onap.policy.models.provider.PolicyModelsProviderFactory;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@@ -72,24 +80,29 @@ class InstantiationControllerTest extends CommonRestController {
private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command";
+ private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+
+ private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
+
+
@Autowired
- private ControlLoopInstantiationProvider instantiationProvider;
+ private ClRuntimeParameterGroup clRuntimeParameterGroup;
@Autowired
- private CommissioningProvider commissioningProvider;
+ private ControlLoopInstantiationProvider instantiationProvider;
@LocalServerPort
private int randomServerPort;
- /**
- * starts Main and inserts a commissioning template.
- *
- * @throws Exception if an error occurs
- */
+ @BeforeAll
+ public static void setUpBeforeClass() throws Exception {
+ serviceTemplate = yamlTranslator.fromYaml(ResourceUtils.getResourceAsString(TOSCA_TEMPLATE_YAML),
+ ToscaServiceTemplate.class);
+ }
+
@BeforeEach
- public void setUpBeforeClass() throws Exception {
- // to validate control Loop, it needs to define ToscaServiceTemplate
- InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider);
+ public void populateDb() throws Exception {
+ createEntryInDB();
}
@BeforeEach
@@ -97,6 +110,11 @@ class InstantiationControllerTest extends CommonRestController {
super.setHttpPrefix(randomServerPort);
}
+ @AfterEach
+ public void cleanDatabase() throws Exception {
+ deleteEntryInDB(serviceTemplate.getName(), serviceTemplate.getVersion());
+ }
+
@Test
void testSwagger() throws Exception {
super.testSwagger(INSTANTIATION_ENDPOINT);
@@ -138,6 +156,7 @@ class InstantiationControllerTest extends CommonRestController {
@Test
void testCreate() throws Exception {
+
ControlLoops controlLoopsFromRsc =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Create");
@@ -159,6 +178,7 @@ class InstantiationControllerTest extends CommonRestController {
@Test
void testCreateBadRequest() throws Exception {
+
ControlLoops controlLoopsFromRsc =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
@@ -185,7 +205,7 @@ class InstantiationControllerTest extends CommonRestController {
@Test
void testQuery() throws Exception {
- // inserts a ControlLoops to DB
+
var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Query");
instantiationProvider.createControlLoops(controlLoops);
@@ -203,6 +223,7 @@ class InstantiationControllerTest extends CommonRestController {
@Test
void testUpdate() throws Exception {
+
ControlLoops controlLoopsCreate =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Update");
@@ -238,6 +259,7 @@ class InstantiationControllerTest extends CommonRestController {
@Test
void testDelete() throws Exception {
+
ControlLoops controlLoopsFromRsc =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
@@ -259,6 +281,7 @@ class InstantiationControllerTest extends CommonRestController {
@Test
void testDeleteBadRequest() throws Exception {
+
ControlLoops controlLoopsFromRsc =
InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "DelBadRequest");
@@ -293,6 +316,7 @@ class InstantiationControllerTest extends CommonRestController {
@Test
void testCommand() throws Exception {
+
var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
instantiationProvider.createControlLoops(controlLoops);
@@ -313,4 +337,21 @@ class InstantiationControllerTest extends CommonRestController {
assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());
}
}
+
+ private synchronized void deleteEntryInDB(String name, String version) throws Exception {
+ try (PolicyModelsProvider modelsProvider = new PolicyModelsProviderFactory()
+ .createPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters())) {
+ if (!modelsProvider.getServiceTemplateList(null, null).isEmpty()) {
+ modelsProvider.deleteServiceTemplate(name, version);
+ }
+ }
+ }
+
+ private synchronized void createEntryInDB() throws Exception {
+ try (PolicyModelsProvider modelsProvider = new PolicyModelsProviderFactory()
+ .createPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters())) {
+ deleteEntryInDB(serviceTemplate.getName(), serviceTemplate.getVersion());
+ modelsProvider.createServiceTemplate(serviceTemplate);
+ }
+ }
}
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 10116a240..73ec4e482 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
@@ -23,7 +23,6 @@ package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -44,7 +43,6 @@ import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.Parti
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
import org.onap.policy.clamp.controlloop.runtime.commissioning.CommissioningProvider;
-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.monitoring.MonitoringProvider;
import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
@@ -70,10 +68,12 @@ class SupervisionMessagesTest extends CommonRestController {
private static final Object lockit = new Object();
private static final CommInfrastructure INFRA = CommInfrastructure.NOOP;
private static final String TOPIC = "my-topic";
+ private static final long interval = 1000;
private static SupervisionHandler supervisionHandler;
private static CommissioningProvider commissioningProvider;
private static ControlLoopProvider clProvider;
private static PolicyModelsProvider modelsProvider;
+ private static ParticipantProvider participantProvider;
private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
private static final String TOSCA_TEMPLATE_YAML =
"src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml";
@@ -91,11 +91,13 @@ class SupervisionMessagesTest extends CommonRestController {
modelsProvider = CommonTestData.getPolicyModelsProvider(controlLoopParameters.getDatabaseProviderParameters());
clProvider = new ControlLoopProvider(controlLoopParameters.getDatabaseProviderParameters());
+ participantProvider = new ParticipantProvider(controlLoopParameters.getDatabaseProviderParameters());
+
var participantStatisticsProvider =
new ParticipantStatisticsProvider(controlLoopParameters.getDatabaseProviderParameters());
var clElementStatisticsProvider =
new ClElementStatisticsProvider(controlLoopParameters.getDatabaseProviderParameters());
- commissioningProvider = new CommissioningProvider(modelsProvider, clProvider);
+ commissioningProvider = new CommissioningProvider(modelsProvider, clProvider, null, participantProvider);
var monitoringProvider =
new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider);
var participantProvider = new ParticipantProvider(controlLoopParameters.getDatabaseProviderParameters());
@@ -128,6 +130,7 @@ class SupervisionMessagesTest extends CommonRestController {
ToscaServiceTemplate serviceTemplate = yamlTranslator.fromYaml(
ResourceUtils.getResourceAsString(TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
+ // List<ToscaNodeTemplate> listOfTemplates = commissioningProvider.getControlLoopDefinitions(null, null);
commissioningProvider.createControlLoopDefinitions(serviceTemplate);
participantRegisterListener.onTopicEvent(INFRA, TOPIC, null, participantRegisterMsg);
}
@@ -177,9 +180,6 @@ class SupervisionMessagesTest extends CommonRestController {
@Test
void testSendParticipantUpdate() throws Exception {
- InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, commissioningProvider);
- commissioningProvider.getToscaServiceTemplate(null, null);
-
final ParticipantUpdate participantUpdateMsg = new ParticipantUpdate();
participantUpdateMsg.setParticipantId(getParticipantId());
participantUpdateMsg.setTimestamp(Instant.now());
@@ -209,7 +209,7 @@ class SupervisionMessagesTest extends CommonRestController {
participantUpdateMsg.setToscaServiceTemplate(toscaServiceTemplate);
synchronized (lockit) {
ParticipantUpdatePublisher participantUpdatePublisher =
- new ParticipantUpdatePublisher(commissioningProvider);
+ new ParticipantUpdatePublisher(modelsProvider);
participantUpdatePublisher.active(Collections.singletonList(Mockito.mock(TopicSink.class)));
participantUpdatePublisher.send(participantUpdateMsg);
}
diff --git a/runtime-controlloop/src/test/resources/META-INF/persistence.xml b/runtime-controlloop/src/test/resources/META-INF/persistence.xml
index 6e31cca47..c4e2e8d55 100644
--- a/runtime-controlloop/src/test/resources/META-INF/persistence.xml
+++ b/runtime-controlloop/src/test/resources/META-INF/persistence.xml
@@ -104,6 +104,7 @@
<class>org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate</class>
<class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoop</class>
<class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoopElement</class>
+ <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipant</class>
<class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics</class>
<class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics</class>
diff --git a/runtime-controlloop/src/test/resources/testscripts/listenOnTopic.sh b/runtime-controlloop/src/test/resources/testscripts/listenOnTopic.sh
index 5e661777b..5e661777b 100644..100755
--- a/runtime-controlloop/src/test/resources/testscripts/listenOnTopic.sh
+++ b/runtime-controlloop/src/test/resources/testscripts/listenOnTopic.sh