diff options
9 files changed, 306 insertions, 72 deletions
diff --git a/main/pom.xml b/main/pom.xml index 0c84e27a..b2a31806 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -94,6 +94,11 @@ <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java b/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java index e0b00c71..3c871352 100644 --- a/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java +++ b/main/src/main/java/org/onap/policy/pap/main/comm/PdpStatusMessageHandler.java @@ -23,7 +23,7 @@ package org.onap.policy.pap.main.comm; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import org.apache.commons.lang3.tuple.Pair; + import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.pdp.concepts.Pdp; @@ -38,7 +38,6 @@ import org.onap.policy.models.pdp.enums.PdpState; import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier; -import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; import org.onap.policy.pap.main.PapConstants; import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper; import org.onap.policy.pap.main.PolicyPapException; @@ -64,7 +63,7 @@ public class PdpStatusMessageHandler { final PolicyModelsProviderFactoryWrapper modelProviderWrapper = Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class); try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) { - if (message.getPdpGroup().isEmpty() && message.getPdpSubgroup().isEmpty()) { + if (message.getPdpGroup() == null && message.getPdpSubgroup() == null) { handlePdpRegistration(message, databaseProvider); } else { handlePdpHeartbeat(message, databaseProvider); @@ -89,11 +88,9 @@ public class PdpStatusMessageHandler { throws PfModelException { boolean pdpGroupFound = false; Optional<PdpSubGroup> subGroup = null; - final List<Pair<String, String>> supportedPolicyTypesPair = createSupportedPolictTypesPair(message); - final PdpGroupFilter filter = PdpGroupFilter.builder().pdpType(message.getPdpType()).build(); - // TODO setSupportedTypes(supportedPolicyTypesPair) - final List<PdpGroup> pdpGroups = - databaseProvider.getFilteredPdpGroups(filter); + final PdpGroupFilter filter = PdpGroupFilter.builder().pdpType(message.getPdpType()) + .policyTypeList(message.getSupportedPolicyTypes()).matchPolicyTypesExactly(true).build(); + final List<PdpGroup> pdpGroups = databaseProvider.getFilteredPdpGroups(filter); for (final PdpGroup pdpGroup : pdpGroups) { subGroup = findPdpSubGroup(message, pdpGroup); if (subGroup.isPresent()) { @@ -109,20 +106,12 @@ public class PdpStatusMessageHandler { return pdpGroupFound; } - private List<Pair<String, String>> createSupportedPolictTypesPair(final PdpStatus message) { - final List<Pair<String, String>> supportedPolicyTypesPair = new ArrayList<>(); - for (final ToscaPolicyTypeIdentifier policyTypeIdent : message.getSupportedPolicyTypes()) { - supportedPolicyTypesPair.add(Pair.of(policyTypeIdent.getName(), policyTypeIdent.getVersion())); - } - return supportedPolicyTypesPair; - } - private void updatePdpSubGroup(final PdpGroup pdpGroup, final PdpSubGroup pdpSubGroup, final PdpStatus message, final PolicyModelsProvider databaseProvider) throws PfModelException { final Pdp pdpInstance = new Pdp(); pdpInstance.setInstanceId(message.getName()); - pdpInstance.setPdpState(message.getState()); + pdpInstance.setPdpState(PdpState.ACTIVE); pdpInstance.setHealthy(message.getHealthy()); pdpInstance.setMessage(message.getDescription()); pdpSubGroup.getPdpInstances().add(pdpInstance); @@ -140,8 +129,8 @@ public class PdpStatusMessageHandler { Optional<PdpSubGroup> pdpSubgroup = null; Optional<Pdp> pdpInstance = null; - final PdpGroupFilter filter = PdpGroupFilter.builder().name(message.getPdpGroup()) - .version(PdpGroupFilter.LATEST_VERSION).build(); + final PdpGroupFilter filter = + PdpGroupFilter.builder().name(message.getPdpGroup()).version(PdpGroupFilter.LATEST_VERSION).build(); final List<PdpGroup> pdpGroups = databaseProvider.getFilteredPdpGroups(filter); if (!pdpGroups.isEmpty()) { final PdpGroup pdpGroup = pdpGroups.get(0); @@ -164,7 +153,7 @@ public class PdpStatusMessageHandler { private Optional<PdpSubGroup> findPdpSubGroup(final PdpStatus message, final PdpGroup pdpGroup) { PdpSubGroup pdpSubgroup = null; for (final PdpSubGroup subGroup : pdpGroup.getPdpSubgroups()) { - if (message.getPdpSubgroup().equals(subGroup.getPdpType())) { + if (message.getPdpType().equals(subGroup.getPdpType())) { pdpSubgroup = subGroup; break; } @@ -183,19 +172,30 @@ public class PdpStatusMessageHandler { return Optional.ofNullable(pdpInstance); } - private void processPdpDetails(final PdpStatus message, final PdpSubGroup pdpSubgroup, final Pdp pdpInstance, + private void processPdpDetails(final PdpStatus message, final PdpSubGroup pdpSubGroup, final Pdp pdpInstance, final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException { - if (validatePdpDetails(message, pdpGroup, pdpSubgroup, pdpInstance)) { + if (PdpState.TERMINATED.equals(message.getState())) { + processPdpTermination(message, pdpSubGroup, pdpInstance, pdpGroup, databaseProvider); + } else if (validatePdpDetails(message, pdpGroup, pdpSubGroup, pdpInstance)) { LOGGER.debug("PdpInstance details are correct. Saving current state in DB - {}", pdpInstance); - updatePdpHealthStatus(message, pdpSubgroup, pdpInstance, pdpGroup, databaseProvider); - updatePdpStatistics(message, pdpSubgroup, pdpInstance, pdpGroup, databaseProvider); + updatePdpHealthStatus(message, pdpSubGroup, pdpInstance, pdpGroup, databaseProvider); } else { LOGGER.debug("PdpInstance details are not correct. Sending PdpUpdate message - {}", pdpInstance); - sendPdpMessage(pdpGroup.getName(), pdpSubgroup, pdpInstance.getInstanceId(), pdpInstance.getPdpState(), + sendPdpMessage(pdpGroup.getName(), pdpSubGroup, pdpInstance.getInstanceId(), pdpInstance.getPdpState(), databaseProvider); } } + private void processPdpTermination(final PdpStatus message, final PdpSubGroup pdpSubGroup, final Pdp pdpInstance, + final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException { + pdpSubGroup.getPdpInstances().remove(pdpInstance); + pdpSubGroup.setCurrentInstanceCount(pdpSubGroup.getCurrentInstanceCount() - 1); + databaseProvider.updatePdpSubGroup(pdpGroup.getName(), pdpGroup.getVersion(), pdpSubGroup); + + LOGGER.debug("Deleted PdpInstance - {} belonging to PdpSubGroup - {} and PdpGroup - {}", pdpInstance, + pdpSubGroup, pdpGroup); + } + private boolean validatePdpDetails(final PdpStatus message, final PdpGroup pdpGroup, final PdpSubGroup subGroup, final Pdp pdpInstanceDetails) { @@ -214,23 +214,6 @@ public class PdpStatusMessageHandler { LOGGER.debug("Updated Pdp in DB - {}", pdpInstance); } - private void updatePdpStatistics(final PdpStatus message, final PdpSubGroup pdpSubgroup, final Pdp pdpInstance, - final PdpGroup pdpGroup, final PolicyModelsProvider databaseProvider) throws PfModelException { - final PdpStatistics pdpStatistics = new PdpStatistics(); - pdpStatistics.setPdpInstanceId(message.getName()); - pdpStatistics.setPolicyDeployCount(message.getStatistics().getPolicyDeployCount()); - pdpStatistics.setPolicyDeploySuccessCount(message.getStatistics().getPolicyDeploySuccessCount()); - pdpStatistics.setPolicyDeployFailCount(message.getStatistics().getPolicyDeployFailCount()); - pdpStatistics.setPolicyExecutedCount(message.getStatistics().getPolicyExecutedCount()); - pdpStatistics.setPolicyExecutedSuccessCount(message.getStatistics().getPolicyExecutedSuccessCount()); - pdpStatistics.setPolicyExecutedFailCount(message.getStatistics().getPolicyExecutedFailCount()); - - databaseProvider.updatePdpStatistics(pdpGroup.getName(), pdpGroup.getVersion(), pdpSubgroup.getPdpType(), - pdpInstance.getInstanceId(), pdpStatistics); - - LOGGER.debug("Updated PdpStatistics in DB - {}", pdpStatistics); - } - private void sendPdpMessage(final String pdpGroupName, final PdpSubGroup subGroup, final String pdpInstanceId, final PdpState pdpState, final PolicyModelsProvider databaseProvider) throws PfModelException { final PdpUpdate pdpUpdatemessage = diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupQueryControllerV1.java b/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupQueryControllerV1.java index fb0c2f12..74d6e619 100644 --- a/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupQueryControllerV1.java +++ b/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupQueryControllerV1.java @@ -38,6 +38,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.apache.commons.lang3.tuple.Pair; +import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.pdp.concepts.PdpGroups; /** @@ -83,9 +84,14 @@ public class PdpGroupQueryControllerV1 extends PapRestControllerV1 { public Response queryGroupDetails( @HeaderParam(REQUEST_ID_NAME) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) final UUID requestId) { - final Pair<Status, PdpGroups> pair = provider.fetchPdpGroupDetails(); - - return addLoggingHeaders(addVersionControlHeaders(Response.status(pair.getLeft())), requestId) - .entity(pair.getRight()).build(); + try { + final Pair<Status, PdpGroups> pair = provider.fetchPdpGroupDetails(); + return addLoggingHeaders(addVersionControlHeaders(Response.status(pair.getLeft())), requestId) + .entity(pair.getRight()).build(); + } catch (final PfModelException exp) { + return addLoggingHeaders( + addVersionControlHeaders(Response.status(exp.getErrorResponse().getResponseCode())), requestId) + .entity(exp.getErrorResponse()).build(); + } } } diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupQueryProvider.java b/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupQueryProvider.java index 4dd42af4..1012fbdc 100644 --- a/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupQueryProvider.java +++ b/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupQueryProvider.java @@ -23,7 +23,14 @@ package org.onap.policy.pap.main.rest; import javax.ws.rs.core.Response; import org.apache.commons.lang3.tuple.Pair; +import org.onap.policy.common.utils.services.Registry; +import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.pdp.concepts.PdpGroups; +import org.onap.policy.models.provider.PolicyModelsProvider; +import org.onap.policy.pap.main.PapConstants; +import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Provider for PAP component to query details of all PDP groups. @@ -32,17 +39,23 @@ import org.onap.policy.models.pdp.concepts.PdpGroups; */ public class PdpGroupQueryProvider { + private static final Logger LOGGER = LoggerFactory.getLogger(PdpGroupQueryProvider.class); + /** * Queries details of all PDP groups. * * @return a pair containing the status and the response + * @throws PfModelException in case of errors */ - public Pair<Response.Status, PdpGroups> fetchPdpGroupDetails() { - - /* - * TODO Fetch all the details from DB and create the PdpGroups object. - */ + public Pair<Response.Status, PdpGroups> fetchPdpGroupDetails() throws PfModelException { - return Pair.of(Response.Status.OK, new PdpGroups()); + final PdpGroups pdpGroups = new PdpGroups(); + final PolicyModelsProviderFactoryWrapper modelProviderWrapper = + Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class); + try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) { + pdpGroups.setGroups(databaseProvider.getPdpGroups(null, null)); + } + LOGGER.debug("PdpGroup Query Response - {}", pdpGroups); + return Pair.of(Response.Status.OK, pdpGroups); } } diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeControllerV1.java b/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeControllerV1.java index 72e1fe58..5c53bdc3 100644 --- a/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeControllerV1.java +++ b/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeControllerV1.java @@ -28,7 +28,9 @@ import io.swagger.annotations.Authorization; import io.swagger.annotations.Extension; import io.swagger.annotations.ExtensionProperty; import io.swagger.annotations.ResponseHeader; + import java.util.UUID; + import javax.ws.rs.HeaderParam; import javax.ws.rs.PUT; import javax.ws.rs.Path; @@ -36,7 +38,9 @@ import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; + import org.apache.commons.lang3.tuple.Pair; +import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.pap.concepts.PdpGroupStateChangeResponse; import org.onap.policy.models.pdp.enums.PdpState; @@ -89,9 +93,14 @@ public class PdpGroupStateChangeControllerV1 extends PapRestControllerV1 { @ApiParam(value = "PDP Group Version", required = true) @PathParam("version") final String version, @ApiParam(value = "PDP Group State", required = true) @QueryParam("state") final PdpState state) { - final Pair<Status, PdpGroupStateChangeResponse> pair = provider.changeGroupState(groupName, version, state); - - return addLoggingHeaders(addVersionControlHeaders(Response.status(pair.getLeft())), requestId) - .entity(pair.getRight()).build(); + try { + final Pair<Status, PdpGroupStateChangeResponse> pair = provider.changeGroupState(groupName, version, state); + return addLoggingHeaders(addVersionControlHeaders(Response.status(pair.getLeft())), requestId) + .entity(pair.getRight()).build(); + } catch (final PfModelException exp) { + return addLoggingHeaders( + addVersionControlHeaders(Response.status(exp.getErrorResponse().getResponseCode())), requestId) + .entity(exp.getErrorResponse()).build(); + } } } diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeProvider.java b/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeProvider.java index 49f55e2d..f8032ee3 100644 --- a/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeProvider.java +++ b/main/src/main/java/org/onap/policy/pap/main/rest/PdpGroupStateChangeProvider.java @@ -20,10 +20,30 @@ package org.onap.policy.pap.main.rest; +import java.util.ArrayList; +import java.util.List; + import javax.ws.rs.core.Response; + import org.apache.commons.lang3.tuple.Pair; +import org.onap.policy.common.utils.services.Registry; +import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.pap.concepts.PdpGroupStateChangeResponse; +import org.onap.policy.models.pdp.concepts.Pdp; +import org.onap.policy.models.pdp.concepts.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroupFilter; +import org.onap.policy.models.pdp.concepts.PdpStateChange; +import org.onap.policy.models.pdp.concepts.PdpSubGroup; +import org.onap.policy.models.pdp.concepts.PdpUpdate; import org.onap.policy.models.pdp.enums.PdpState; +import org.onap.policy.models.provider.PolicyModelsProvider; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier; +import org.onap.policy.pap.main.PapConstants; +import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper; +import org.onap.policy.pap.main.comm.PdpModifyRequestMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Provider for PAP component to change state of PDP group. @@ -32,30 +52,141 @@ import org.onap.policy.models.pdp.enums.PdpState; */ public class PdpGroupStateChangeProvider { + private static final Logger LOGGER = LoggerFactory.getLogger(PdpGroupStateChangeProvider.class); + + PolicyModelsProviderFactoryWrapper modelProviderWrapper; + + /** + * Constructs the object. + */ + public PdpGroupStateChangeProvider() { + modelProviderWrapper = Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class); + } + /** * Changes state of a PDP group. * * @param groupName name of the PDP group - * @param version version of the PDP group + * @param groupVersion version of the PDP group * @param pdpGroupState state of the PDP group * @return a pair containing the status and the response + * @throws PfModelException in case of errors */ public Pair<Response.Status, PdpGroupStateChangeResponse> changeGroupState(final String groupName, - final String version, final PdpState pdpGroupState) { + final String groupVersion, final PdpState pdpGroupState) throws PfModelException { - /* - * TODO Check preconditions - return error if any. - */ + switch (pdpGroupState) { + case ACTIVE: + handleActiveState(groupName, groupVersion); + break; + case PASSIVE: + handlePassiveState(groupName, groupVersion); + break; + default: + throw new PfModelException(Response.Status.BAD_REQUEST, + "Only ACTIVE or PASSIVE state changes are allowed"); + } + return Pair.of(Response.Status.OK, new PdpGroupStateChangeResponse()); + } - /* - * TODO Change state - sending state change messages to PDPs and arranging for listeners to complete the state - * change actions (in the background). - */ + private void handleActiveState(final String groupName, final String groupVersion) throws PfModelException { + try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) { + final PdpGroupFilter filter = PdpGroupFilter.builder().name(groupName).groupState(PdpState.ACTIVE).build(); + final List<PdpGroup> activePdpGroups = databaseProvider.getFilteredPdpGroups(filter); + final List<PdpGroup> pdpGroups = databaseProvider.getPdpGroups(groupName, groupVersion); + if (activePdpGroups.isEmpty() && !pdpGroups.isEmpty()) { + sendPdpMessage(pdpGroups.get(0), PdpState.ACTIVE, databaseProvider); + updatePdpGroupAndPdp(databaseProvider, pdpGroups, PdpState.ACTIVE); + } else if (!pdpGroups.isEmpty() && !activePdpGroups.isEmpty() + && !pdpGroups.get(0).getVersion().equals(activePdpGroups.get(0).getVersion())) { + sendPdpMessage(pdpGroups.get(0), PdpState.ACTIVE, databaseProvider); + updatePdpGroupAndPdp(databaseProvider, pdpGroups, PdpState.ACTIVE); + updatePdpGroup(databaseProvider, activePdpGroups, PdpState.PASSIVE); + } + } + } - /* - * TODO Return error if unable to send state change to all PDPs. - */ + private void handlePassiveState(final String groupName, final String groupVersion) throws PfModelException { + try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) { + final List<PdpGroup> pdpGroups = databaseProvider.getPdpGroups(groupName, groupVersion); + if (!pdpGroups.isEmpty() && !PdpState.PASSIVE.equals(pdpGroups.get(0).getPdpGroupState())) { + sendPdpMessage(pdpGroups.get(0), PdpState.PASSIVE, databaseProvider); + updatePdpGroupAndPdp(databaseProvider, pdpGroups, PdpState.PASSIVE); + } + } + } - return Pair.of(Response.Status.OK, new PdpGroupStateChangeResponse()); + private void updatePdpGroup(final PolicyModelsProvider databaseProvider, final List<PdpGroup> pdpGroups, + final PdpState pdpState) throws PfModelException { + pdpGroups.get(0).setPdpGroupState(pdpState); + databaseProvider.updatePdpGroups(pdpGroups); + + LOGGER.debug("Updated PdpGroup in DB - {} ", pdpGroups); + } + + private void updatePdpGroupAndPdp(final PolicyModelsProvider databaseProvider, final List<PdpGroup> pdpGroups, + final PdpState pdpState) throws PfModelException { + pdpGroups.get(0).setPdpGroupState(pdpState); + for (final PdpSubGroup subGroup : pdpGroups.get(0).getPdpSubgroups()) { + for (final Pdp pdp : subGroup.getPdpInstances()) { + pdp.setPdpState(pdpState); + } + } + databaseProvider.updatePdpGroups(pdpGroups); + + LOGGER.debug("Updated PdpGroup and Pdp in DB - {} ", pdpGroups); + } + + private void sendPdpMessage(final PdpGroup pdpGroup, final PdpState pdpState, + final PolicyModelsProvider databaseProvider) throws PfModelException { + + for (final PdpSubGroup subGroup : pdpGroup.getPdpSubgroups()) { + for (final Pdp pdp : subGroup.getPdpInstances()) { + final PdpUpdate pdpUpdatemessage = + createPdpUpdateMessage(pdpGroup.getName(), subGroup, pdp.getInstanceId(), databaseProvider); + final PdpStateChange pdpStateChangeMessage = + createPdpStateChangeMessage(pdpGroup.getName(), subGroup, pdp.getInstanceId(), pdpState); + final PdpModifyRequestMap requestMap = + Registry.get(PapConstants.REG_PDP_MODIFY_MAP, PdpModifyRequestMap.class); + requestMap.addRequest(pdpUpdatemessage, pdpStateChangeMessage); + LOGGER.debug("Sent PdpUpdate message - {}", pdpUpdatemessage); + LOGGER.debug("Sent PdpStateChange message - {}", pdpStateChangeMessage); + } + } + } + + private PdpUpdate createPdpUpdateMessage(final String pdpGroupName, final PdpSubGroup subGroup, + final String pdpInstanceId, final PolicyModelsProvider databaseProvider) throws PfModelException { + + final PdpUpdate update = new PdpUpdate(); + update.setName(pdpInstanceId); + update.setPdpGroup(pdpGroupName); + update.setPdpSubgroup(subGroup.getPdpType()); + update.setPolicies(getToscaPolicies(subGroup, databaseProvider)); + + LOGGER.debug("Created PdpUpdate message - {}", update); + return update; + } + + private List<ToscaPolicy> getToscaPolicies(final PdpSubGroup subGroup, final PolicyModelsProvider databaseProvider) + throws PfModelException { + final List<ToscaPolicy> policies = new ArrayList<>(); + for (final ToscaPolicyIdentifier policyIdentifier : subGroup.getPolicies()) { + policies.addAll(databaseProvider.getPolicyList(policyIdentifier.getName(), policyIdentifier.getVersion())); + } + LOGGER.debug("Created ToscaPolicy list - {}", policies); + return policies; + } + + private PdpStateChange createPdpStateChangeMessage(final String pdpGroupName, final PdpSubGroup subGroup, + final String pdpInstanceId, final PdpState pdpState) { + + final PdpStateChange stateChange = new PdpStateChange(); + stateChange.setName(pdpInstanceId); + stateChange.setPdpGroup(pdpGroupName); + stateChange.setPdpSubgroup(subGroup.getPdpType()); + stateChange.setState(pdpState); + LOGGER.debug("Created PdpStateChange message - {}", stateChange); + return stateChange; } } diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/depundep/SessionData.java b/main/src/main/java/org/onap/policy/pap/main/rest/depundep/SessionData.java index 5bb96b9d..0c83a1c2 100644 --- a/main/src/main/java/org/onap/policy/pap/main/rest/depundep/SessionData.java +++ b/main/src/main/java/org/onap/policy/pap/main/rest/depundep/SessionData.java @@ -20,6 +20,7 @@ package org.onap.policy.pap.main.rest.depundep; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -225,7 +226,11 @@ public class SessionData { return data.stream().map(GroupData::getCurrentGroup).collect(Collectors.toList()); } - PdpGroupFilter filter = PdpGroupFilter.builder().policyType(type).groupState(PdpState.ACTIVE).build(); + final List<ToscaPolicyTypeIdentifier> policyTypeList = new ArrayList<>(1); + policyTypeList.add(type); + + PdpGroupFilter filter = PdpGroupFilter.builder().policyTypeList(policyTypeList).matchPolicyTypesExactly(true) + .groupState(PdpState.ACTIVE).build(); List<PdpGroup> groups = dao.getFilteredPdpGroups(filter); diff --git a/main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java b/main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java index 38d8621e..7de63cc2 100644 --- a/main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java +++ b/main/src/test/java/org/onap/policy/pap/main/parameters/CommonTestData.java @@ -31,6 +31,7 @@ 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.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl; /** * Class to hold/create all parameters for test cases. @@ -169,11 +170,11 @@ public class CommonTestData { public Map<String, Object> getPolicyModelsProviderParametersMap() { final Map<String, Object> map = new TreeMap<>(); map.put("name", PolicyModelsProviderParameters.class.getSimpleName()); - map.put("implementation", REST_SERVER_HTTPS); + map.put("implementation", DatabasePolicyModelsProviderImpl.class.getCanonicalName()); map.put("databaseUrl", "jdbc:h2:mem:testdb"); map.put("databaseUser", "policy"); map.put("databasePassword", Base64.getEncoder().encodeToString("P01icY".getBytes())); - map.put("persistenceUnit", "PdpGroupTest"); + map.put("persistenceUnit", "ToscaConceptTest"); return map; } diff --git a/main/src/test/resources/META-INF/persistence.xml b/main/src/test/resources/META-INF/persistence.xml new file mode 100644 index 00000000..a43afafc --- /dev/null +++ b/main/src/test/resources/META-INF/persistence.xml @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + Copyright (C) 2019 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========================================================= +--> + +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> + <persistence-unit name="ToscaConceptTest" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + + <class>org.onap.policy.models.dao.converters.CDataConditioner</class> + <class>org.onap.policy.models.dao.converters.Uuid2String</class> + <class>org.onap.policy.models.base.PfConceptKey</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy</class> + <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdpGroup</class> + <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdpSubGroup</class> + <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdp</class> + + <properties> + <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> + <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> + <property name="eclipselink.ddl-generation.output-mode" value="database" /> + <property name="eclipselink.logging.level" value="INFO" /> + </properties> + </persistence-unit> + + <persistence-unit name="ToscaConceptMariaDBTest" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + + <class>org.onap.policy.models.dao.converters.CDataConditioner</class> + <class>org.onap.policy.models.dao.converters.Uuid2String</class> + <class>org.onap.policy.models.base.PfConceptKey</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType</class> + <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy</class> + <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdpGroup</class> + <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdpSubGroup</class> + <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdp</class> + + <properties> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/policy" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> + <property name="javax.persistence.schema-generation.database.action" value="create" /> + + <!-- property name="eclipselink.logging.level" value="ALL" /> + <property name="eclipselink.logging.level.jpa" value="ALL" /> + <property name="eclipselink.logging.level.ddl" value="ALL" /> + <property name="eclipselink.logging.level.connection" value="ALL" /> + <property name="eclipselink.logging.level.sql" value="ALL" /> + <property name="eclipselink.logging.level.transaction" value="ALL" /> + <property name="eclipselink.logging.level.sequencing" value="ALL" /> + <property name="eclipselink.logging.level.server" value="ALL" /> + <property name="eclipselink.logging.level.query" value="ALL" /> + <property name="eclipselink.logging.level.properties" value="ALL" /--> + + <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> + <property name="eclipselink.ddl-generation.output-mode" value="database" /> + <property name="eclipselink.logging.level" value="INFO" /> + </properties> + </persistence-unit> +</persistence> |