summaryrefslogtreecommitdiffstats
path: root/controlloop/common/guard/src
diff options
context:
space:
mode:
authorJoshua Reich <jreich@research.att.com>2019-04-10 13:38:59 -0700
committerPamela Dragosh <pdragosh@research.att.com>2019-04-11 07:28:52 -0400
commita7a144ba512654bd93b0856b1e9eb5c886060c21 (patch)
tree808acb95b4608c9e7e4e4501f4c4111e9563fa18 /controlloop/common/guard/src
parent92fc7744a4df901d1688b9fa8da899372ea76fd8 (diff)
Cleanup PIP/Database-related code.
Ensure database schema/naming consistent across repos. Ensure PIP implementation consistent across repos. Cleanup unused imports and made sure licenses are ok. Issue-ID: POLICY-1471 Change-Id: I20a325fe3e66e6ae400e603ec366315aea716993 Signed-off-by: Joshua Reich <jreich@research.att.com> Signed-off-by: Pamela Dragosh <pdragosh@research.att.com>
Diffstat (limited to 'controlloop/common/guard/src')
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/PipEngineGetHistory.java405
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/PipEngineGetStatus.java296
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java4
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java18
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java2
-rw-r--r--controlloop/common/guard/src/test/java/org/onap/policy/guard/PipEngineGetHistoryTest.java437
-rw-r--r--controlloop/common/guard/src/test/java/org/onap/policy/guard/PipEngineGetStatusTest.java251
-rw-r--r--controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java4
-rw-r--r--controlloop/common/guard/src/test/resources/META-INF/persistence.xml90
-rw-r--r--controlloop/common/guard/src/test/resources/blacklist_template.xml10
-rw-r--r--controlloop/common/guard/src/test/resources/frequency_limiter_template.xml10
11 files changed, 67 insertions, 1460 deletions
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PipEngineGetHistory.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PipEngineGetHistory.java
deleted file mode 100644
index 37c4e4c68..000000000
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PipEngineGetHistory.java
+++ /dev/null
@@ -1,405 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * guard
- * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.guard;
-
-import com.att.research.xacml.api.Attribute;
-import com.att.research.xacml.api.AttributeValue;
-import com.att.research.xacml.api.Identifier;
-import com.att.research.xacml.api.pip.PIPException;
-import com.att.research.xacml.api.pip.PIPFinder;
-import com.att.research.xacml.api.pip.PIPRequest;
-import com.att.research.xacml.api.pip.PIPResponse;
-import com.att.research.xacml.std.IdentifierImpl;
-import com.att.research.xacml.std.StdMutableAttribute;
-import com.att.research.xacml.std.datatypes.DataTypes;
-import com.att.research.xacml.std.pip.StdMutablePIPResponse;
-import com.att.research.xacml.std.pip.StdPIPRequest;
-import com.att.research.xacml.std.pip.StdPIPResponse;
-import com.att.research.xacml.std.pip.engines.StdConfigurableEngine;
-
-import java.math.BigInteger;
-import java.sql.Timestamp;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.NonUniqueResultException;
-import javax.persistence.Persistence;
-import javax.persistence.Query;
-
-import org.onap.policy.drools.system.PolicyEngine;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PipEngineGetHistory extends StdConfigurableEngine {
- private static final Logger logger = LoggerFactory.getLogger(PipEngineGetHistory.class);
-
- //
- // Base issuer string. The issuer in the policy will also contain time window information
- // E.g., "com:att:research:xacml:guard:historydb:tw:10:min"
- //
- public static final String DEFAULT_ISSUER = "com:att:research:xacml:guard:historydb";
- public static final String DEFAULT_DESCRIPTION = "PIP for retrieving Operations History from DB";
-
- private static final String XML_SCHEMA_STRING = "http://www.w3.org/2001/XMLSchema#string";
-
- private static final String XACML_SUBJECT_CATEGORY_ACCESS_SUBJECT =
- "urn:oasis:names:tc:xacml:1.0:subject-category:access-subject";
- private static final String XACML_ACTOR_ACTOR_ID = "urn:oasis:names:tc:xacml:1.0:actor:actor-id";
- private static final String XACML_ATTRIBUTE_CATEGORY_ACTION =
- "urn:oasis:names:tc:xacml:3.0:attribute-category:action";
- private static final String XACML_OPERATION_OPERATION_ID = "urn:oasis:names:tc:xacml:1.0:operation:operation-id";
- private static final String XACML_ATTRIBUTE_CATEGORY_RESOURCE =
- "urn:oasis:names:tc:xacml:3.0:attribute-category:resource";
- private static final String XACML_TARGET_TARGET_ID = "urn:oasis:names:tc:xacml:1.0:target:target-id";
- private static final String XACML_TEST_SQL_RESOURCE_OPERATIONS_COUNT =
- "com:att:research:xacml:test:sql:resource:operations:count";
-
- private static final PIPRequest PIP_REQUEST_ACTOR =
- new StdPIPRequest(new IdentifierImpl(XACML_SUBJECT_CATEGORY_ACCESS_SUBJECT),
- new IdentifierImpl(XACML_ACTOR_ACTOR_ID), new IdentifierImpl(XML_SCHEMA_STRING));
-
- private static final PIPRequest PIP_REQUEST_RECIPE =
- new StdPIPRequest(new IdentifierImpl(XACML_ATTRIBUTE_CATEGORY_ACTION),
- new IdentifierImpl(XACML_OPERATION_OPERATION_ID), new IdentifierImpl(XML_SCHEMA_STRING));
-
- private static final PIPRequest PIP_REQUEST_TARGET =
- new StdPIPRequest(new IdentifierImpl(XACML_ATTRIBUTE_CATEGORY_RESOURCE),
- new IdentifierImpl(XACML_TARGET_TARGET_ID), new IdentifierImpl(XML_SCHEMA_STRING));
-
- public PipEngineGetHistory() {
- super();
- }
-
- @Override
- public Collection<PIPRequest> attributesRequired() {
- return Collections.emptySet();
- }
-
- @Override
- public Collection<PIPRequest> attributesProvided() {
- return Collections.emptySet();
- }
-
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder) throws PIPException {
- logger.debug("Entering FeqLimiter PIP");
-
- /*
- * First check to see if the issuer is set and then match it
- */
- String string;
- if ((string = pipRequest.getIssuer()) == null) {
-
- logger.debug("No issuer in the request...");
- logger.debug("FeqLimiter PIP - No issuer in the request!");
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- } else {
- // Notice, we are checking here for the base issuer prefix.
- if (!string.contains(this.getIssuer())) {
- logger.debug("Requested issuer '{}' does not match {}", string, getIssuer());
- logger.debug("FeqLimiter PIP - Issuer {} does not match with: {}", string, this.getIssuer());
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- }
- }
-
- String[] s1 = string.split("tw:");
- String[] s2 = s1[1].split(":");
- String timeWindowVal = s2[0];// number [of minutes, hours, days...]
- String timeWindowScale = s2[1];// e.g., minute, hour, day, week, month, year
-
- String actor = null;
- String operation = null;
- String target = null;
- try {
- actor = getActor(pipFinder).iterator().next();
- operation = getRecipe(pipFinder).iterator().next();
- target = getTarget(pipFinder).iterator().next();
- } catch (Exception e) {
- logger.debug("could not retrieve actor, operation, or target from PIP finder", e);
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- }
-
- String timeWindow = timeWindowVal + " " + timeWindowScale;
-
- logger.debug("Going to query DB about: {} {} {} {}", actor, operation, target, timeWindow);
- int countFromDb = getCountFromDb(actor, operation, target, timeWindow);
-
- StdMutablePIPResponse stdPipResponse = new StdMutablePIPResponse();
-
- this.addIntegerAttribute(stdPipResponse, new IdentifierImpl(XACML_ATTRIBUTE_CATEGORY_RESOURCE),
- new IdentifierImpl(XACML_TEST_SQL_RESOURCE_OPERATIONS_COUNT), countFromDb, pipRequest);
-
- return new StdPIPResponse(stdPipResponse);
- }
-
- @Override
- public void configure(String id, Properties properties) throws PIPException {
- super.configure(id, properties);
-
- if (this.getDescription() == null) {
- this.setDescription(DEFAULT_DESCRIPTION);
- }
- if (this.getIssuer() == null) {
- this.setIssuer(DEFAULT_ISSUER);
- }
- }
-
- private PIPResponse getAttribute(PIPRequest pipRequest, PIPFinder pipFinder) {
- PIPResponse pipResponse = null;
-
- try {
- pipResponse = pipFinder.getMatchingAttributes(pipRequest, this);
- } catch (PIPException ex) {
- logger.error("getAttribute threw:", ex);
- return null;
- }
- if (pipResponse == null) {
- return null;
- }
- if (pipResponse.getStatus() != null && !pipResponse.getStatus().isOk()) {
- if (logger.isWarnEnabled()) {
- logger.warn("PIP response error {}: {}", pipRequest.getAttributeId().stringValue(),
- pipResponse.getStatus());
- }
- return null;
- }
- if (pipResponse.getAttributes() != null && pipResponse.getAttributes().isEmpty()) {
- if (logger.isWarnEnabled()) {
- logger.warn("No attributes in POP response {}: {}", pipRequest.getAttributeId().stringValue(),
- pipResponse.getStatus());
- }
- return null;
- }
- return pipResponse;
- }
-
- private Set<String> getActor(PIPFinder pipFinder) {
- /*
- * Get the AT&T UID from either the subject id or the attuid property
- */
- PIPResponse pipResponseAttUid = this.getAttribute(PIP_REQUEST_ACTOR, pipFinder);
- if (pipResponseAttUid == null) {
- return new HashSet<>();
- }
-
- /*
- * Iterate over all of the returned results and do the LDAP requests
- */
- Collection<Attribute> listAttUids = pipResponseAttUid.getAttributes();
- Set<String> setAttUids = new HashSet<>();
- for (Attribute attributeAttUid : listAttUids) {
- Iterator<AttributeValue<String>> iterAttributeValues = attributeAttUid.findValues(DataTypes.DT_STRING);
- if (iterAttributeValues != null) {
- while (iterAttributeValues.hasNext()) {
- String attuid = iterAttributeValues.next().getValue();
- if (attuid != null) {
- setAttUids.add(attuid);
- }
- }
- }
- }
-
- return setAttUids;
- }
-
- private Set<String> getRecipe(PIPFinder pipFinder) {
- /*
- * Get the AT&T UID from either the subject id or the attuid property
- */
- PIPResponse pipResponseAttUid = this.getAttribute(PIP_REQUEST_RECIPE, pipFinder);
- if (pipResponseAttUid == null) {
- return new HashSet<>();
- }
-
- /*
- * Iterate over all of the returned results and do the LDAP requests
- */
- Collection<Attribute> listAttUids = pipResponseAttUid.getAttributes();
- Set<String> setAttUids = new HashSet<>();
- for (Attribute attributeAttUid : listAttUids) {
- Iterator<AttributeValue<String>> iterAttributeValues = attributeAttUid.findValues(DataTypes.DT_STRING);
- if (iterAttributeValues != null) {
- while (iterAttributeValues.hasNext()) {
- String attuid = iterAttributeValues.next().getValue();
- if (attuid != null) {
- setAttUids.add(attuid);
- }
- }
- }
- }
-
- return setAttUids;
- }
-
- private void addIntegerAttribute(StdMutablePIPResponse stdPipResponse, Identifier category, Identifier attributeId,
- int value, PIPRequest pipRequest) {
- AttributeValue<BigInteger> attributeValue = null;
- try {
- attributeValue = DataTypes.DT_INTEGER.createAttributeValue(value);
- } catch (Exception ex) {
- logger.error("Failed to convert {} to an AttributeValue<Boolean>", value, ex);
- }
- if (attributeValue != null) {
- stdPipResponse.addAttribute(new StdMutableAttribute(category, attributeId, attributeValue,
- pipRequest.getIssuer()/* this.getIssuer() */, false));
- }
- }
-
- private Set<String> getTarget(PIPFinder pipFinder) {
- /*
- * Get the AT&T UID from either the subject id or the attuid property
- */
- PIPResponse pipResponseAttUid = this.getAttribute(PIP_REQUEST_TARGET, pipFinder);
- if (pipResponseAttUid == null) {
- return new HashSet<>();
- }
-
- /*
- * Iterate over all of the returned results and do the LDAP requests
- */
- Collection<Attribute> listAttUids = pipResponseAttUid.getAttributes();
- Set<String> setAttUids = new HashSet<>();
- for (Attribute attributeAttUid : listAttUids) {
- Iterator<AttributeValue<String>> iterAttributeValues = attributeAttUid.findValues(DataTypes.DT_STRING);
- if (iterAttributeValues != null) {
- while (iterAttributeValues.hasNext()) {
- String attuid = iterAttributeValues.next().getValue();
- if (attuid != null) {
- setAttUids.add(attuid);
- }
- }
- }
- }
-
- return setAttUids;
- }
-
- private static int getCountFromDb(String actor, String operation, String target, String timeWindow) {
- // DB Properties
- Properties props = new Properties();
- props.put(Util.ECLIPSE_LINK_KEY_URL, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_URL));
- props.put(Util.ECLIPSE_LINK_KEY_USER, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_USER));
- props.put(Util.ECLIPSE_LINK_KEY_PASS, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_PASS));
-
-
- EntityManager em = null;
- String opsHistPu = System.getProperty("OperationsHistoryPU");
- if (!"TestOperationsHistoryPU".equals(opsHistPu)) {
- opsHistPu = "OperationsHistoryPU";
- } else {
- props.clear();
- }
-
- try {
- em = Persistence.createEntityManagerFactory(opsHistPu, props).createEntityManager();
- } catch (Exception ex) {
- logger.error("PIP thread got Exception. Can't connect to Operations History DB -- {}", opsHistPu);
- logger.error("getCountFromDb threw: ", ex);
- return -1;
- }
-
- long now = new Date().getTime();
- long diff;
- try {
- diff = now - getMsFromTimeWindow(timeWindow);
- } catch (Exception ex) {
- logger.error("PIP thread got Exception ", ex);
- return -1;
- }
-
- StringBuilder sqlBuilder = new StringBuilder();
- sqlBuilder.append("select count(*) as count from operationshistory10 where outcome<>'Failure_Guard'");
- sqlBuilder.append(" and actor= ?");
- sqlBuilder.append(" and operation= ?");
- sqlBuilder.append(" and target= ?");
- sqlBuilder.append(" and endtime between '");
- sqlBuilder.append(new Timestamp(diff));
- sqlBuilder.append("' and '");
- sqlBuilder.append(new Timestamp(now));
- sqlBuilder.append('\'');
-
- Query nq = em.createNativeQuery(sqlBuilder.toString());
- nq.setParameter(1, actor);
- nq.setParameter(2, operation);
- nq.setParameter(3, target);
-
- int ret = -1;
- try {
- ret = ((Number) nq.getSingleResult()).intValue();
- } catch (NoResultException | NonUniqueResultException ex) {
- logger.error("getCountFromDb threw: ", ex);
- return -1;
- }
-
- em.close();
-
- return ret;
- }
-
- /**
- * Get the Millisecond time from a time window string.
- *
- * @param timeWindow the time window string to parse
- * @return the millisecond time from the time window string
- * @throws PIPException On invalid time window strings
- */
- private static long getMsFromTimeWindow(String timeWindowString) throws PIPException {
- long ms = 0;
- double multiplier = 0;
-
- String[] split = timeWindowString.split(" ");
- if (split.length != 2) {
- throw new PIPException("Invalid Value Unit pair for SQL");
- }
-
- ms = Long.parseLong(split[0]);
-
- if ("SECOND".compareToIgnoreCase(split[1]) == 0) {
- multiplier = 1000;
- } else if ("MINUTE".compareToIgnoreCase(split[1]) == 0) {
- multiplier = 60000;
- } else if ("HOUR".compareToIgnoreCase(split[1]) == 0) {
- multiplier = 3.6e+6;
- } else if ("DAY".compareToIgnoreCase(split[1]) == 0) {
- multiplier = 8.64e+7;
- } else if ("WEEK".compareToIgnoreCase(split[1]) == 0) {
- multiplier = 6.048e+8;
- } else if ("MONTH".compareToIgnoreCase(split[1]) == 0) {
- multiplier = 2.628e+9;
- } else if ("QUARTER".compareToIgnoreCase(split[1]) == 0) {
- multiplier = 2.628e+9 * 3;
- } else if ("YEAR".compareToIgnoreCase(split[1]) == 0) {
- multiplier = 3.154e+10;
- } else {
- logger.error("{} not supported", split[1]);
- }
-
- ms *= multiplier;
- return ms;
- }
-}
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PipEngineGetStatus.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PipEngineGetStatus.java
deleted file mode 100644
index b61ab5d73..000000000
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PipEngineGetStatus.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * guard
- * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.guard;
-
-import com.att.research.xacml.api.Attribute;
-import com.att.research.xacml.api.AttributeValue;
-import com.att.research.xacml.api.Identifier;
-import com.att.research.xacml.api.pip.PIPException;
-import com.att.research.xacml.api.pip.PIPFinder;
-import com.att.research.xacml.api.pip.PIPRequest;
-import com.att.research.xacml.api.pip.PIPResponse;
-import com.att.research.xacml.std.IdentifierImpl;
-import com.att.research.xacml.std.StdMutableAttribute;
-import com.att.research.xacml.std.datatypes.DataTypes;
-import com.att.research.xacml.std.pip.StdMutablePIPResponse;
-import com.att.research.xacml.std.pip.StdPIPRequest;
-import com.att.research.xacml.std.pip.StdPIPResponse;
-import com.att.research.xacml.std.pip.engines.StdConfigurableEngine;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.NoResultException;
-import javax.persistence.Persistence;
-import javax.persistence.Query;
-
-import org.onap.policy.drools.system.PolicyEngine;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PipEngineGetStatus extends StdConfigurableEngine {
- private static final Logger logger = LoggerFactory.getLogger(PipEngineGetStatus.class);
-
- //
- // Base issuer string. The issuer in the policy will contain the operations
- // E.g., "org:onap:policy:guard:status:clname:testcl"
- //
- public static final String DEFAULT_ISSUER = "org:onap:policy:guard:status";
- public static final String DEFAULT_DESCRIPTION = "PIP for retrieving Operation Status from DB";
-
- private static final String XML_SCHEMA_STRING = "http://www.w3.org/2001/XMLSchema#string";
-
- private static final String XACML_ATTRIBUTE_CATEGORY_RESOURCE =
- "urn:oasis:names:tc:xacml:3.0:attribute-category:resource";
- private static final String XACML_TARGET_TARGET_ID = "urn:oasis:names:tc:xacml:1.0:target:target-id";
- private static final String XACML_TEST_SQL_RESOURCE_OPERATIONS_STATUS =
- "com:att:research:xacml:test:sql:resource:operations:status";
-
- private static final PIPRequest PIP_REQUEST_TARGET =
- new StdPIPRequest(new IdentifierImpl(XACML_ATTRIBUTE_CATEGORY_RESOURCE),
- new IdentifierImpl(XACML_TARGET_TARGET_ID), new IdentifierImpl(XML_SCHEMA_STRING));
-
- public PipEngineGetStatus() {
- super();
- }
-
- @Override
- public Collection<PIPRequest> attributesRequired() {
- return Collections.emptySet();
- }
-
- @Override
- public Collection<PIPRequest> attributesProvided() {
- return Collections.emptySet();
- }
-
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder) throws PIPException {
- logger.debug("Entering Status PIP");
-
- /*
- * First check to see if the issuer is set and then match it
- */
- String issuer;
- if ((issuer = pipRequest.getIssuer()) == null) {
-
- logger.debug("No issuer in the request...");
- logger.debug("Status PIP - No issuer in the request!");
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
-
- } else if (!issuer.contains(this.getIssuer())) {
- // Notice, we are checking here for the base issuer prefix.
- logger.debug("Requested issuer '{}' does not match {}", issuer, getIssuer());
- logger.debug("Status PIP - Issuer {} does not match with: {}", issuer, this.getIssuer());
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- }
-
- String[] s1 = issuer.split("clname:");
- String clname = s1[1];
- String target = null;
- try {
- target = getTarget(pipFinder).iterator().next();
- } catch (Exception e) {
- logger.debug("could not retrieve target from PIP finder", e);
- return StdPIPResponse.PIP_RESPONSE_EMPTY;
- }
-
- logger.debug("Going to query DB about: clname={}, target={}", clname, target);
- String statusFromDb = getStatusFromDb(clname, target);
-
- StdMutablePIPResponse stdPipResponse = new StdMutablePIPResponse();
-
- this.addStringAttribute(stdPipResponse, new IdentifierImpl(XACML_ATTRIBUTE_CATEGORY_RESOURCE),
- new IdentifierImpl(XACML_TEST_SQL_RESOURCE_OPERATIONS_STATUS), statusFromDb, pipRequest);
-
- return new StdPIPResponse(stdPipResponse);
- }
-
- @Override
- public void configure(String id, Properties properties) throws PIPException {
- super.configure(id, properties);
-
- if (this.getDescription() == null) {
- this.setDescription(DEFAULT_DESCRIPTION);
- }
- if (this.getIssuer() == null) {
- this.setIssuer(DEFAULT_ISSUER);
- }
- }
-
- private PIPResponse getAttribute(PIPRequest pipRequest, PIPFinder pipFinder) {
- PIPResponse pipResponse = null;
-
- try {
- pipResponse = pipFinder.getMatchingAttributes(pipRequest, this);
- } catch (PIPException ex) {
- logger.error("getAttribute threw", ex);
- return null;
- }
- if (pipResponse == null) {
- return null;
- }
- if (pipResponse.getStatus() != null && !pipResponse.getStatus().isOk()) {
- logger.warn("PIP response error {}: {}", pipRequest.getAttributeId().stringValue(),
- pipResponse.getStatus());
- return null;
- }
- if (pipResponse.getAttributes() != null && pipResponse.getAttributes().isEmpty()) {
- logger.warn("No attributes in POP response {}: {}", pipRequest.getAttributeId().stringValue(),
- pipResponse.getStatus());
- return null;
- }
- return pipResponse;
- }
-
- private void addStringAttribute(StdMutablePIPResponse stdPipResponse, Identifier category, Identifier attributeId,
- String value, PIPRequest pipRequest) {
- AttributeValue<String> attributeValue = null;
- try {
- attributeValue = DataTypes.DT_STRING.createAttributeValue(value);
- } catch (Exception ex) {
- logger.error("Failed to convert {} to an AttributeValue<String>", value, ex);
- }
- if (attributeValue != null) {
- stdPipResponse.addAttribute(new StdMutableAttribute(category, attributeId, attributeValue,
- pipRequest.getIssuer()/* this.getIssuer() */, false));
- }
- }
-
- private Set<String> getTarget(PIPFinder pipFinder) {
- /*
- * Get the UID from either the subject id or the uid property
- */
- PIPResponse pipResponseUid = this.getAttribute(PIP_REQUEST_TARGET, pipFinder);
- if (pipResponseUid == null) {
- return new HashSet<>();
- }
-
- /*
- * Iterate over all of the returned results and do the LDAP requests
- */
- Collection<Attribute> listUids = pipResponseUid.getAttributes();
- Set<String> setUids = new HashSet<>();
- for (Attribute attributeUid : listUids) {
- Iterator<AttributeValue<String>> iterAttributeValues = attributeUid.findValues(DataTypes.DT_STRING);
- if (iterAttributeValues == null) {
- continue;
- }
- while (iterAttributeValues.hasNext()) {
- String uid = iterAttributeValues.next().getValue();
- if (uid == null) {
- continue;
- }
- setUids.add(uid);
- }
- }
- return setUids;
- }
-
- private static String getStatusFromDb(String clname, String target) {
- //
- // DB Properties
- //
- Properties props = new Properties();
- try {
- props.put(Util.ECLIPSE_LINK_KEY_URL, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_URL));
- props.put(Util.ECLIPSE_LINK_KEY_USER, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_USER));
- props.put(Util.ECLIPSE_LINK_KEY_PASS, PolicyEngine.manager.getEnvironmentProperty(Util.ONAP_KEY_PASS));
- } catch (NullPointerException e) {
- logger.error("getStatusFromDb: when setting properties", e);
- }
- //
- // Set opsHistPu to the correct value and clear properties if necessary.
- //
- String opsHistPu = System.getProperty("OperationsHistoryPU");
- if (!"TestOperationsHistoryPU".equals(opsHistPu)) {
- opsHistPu = "OperationsHistoryPU";
- } else {
- props.clear();
- }
- //
- // Set up the EntityManager
- //
- EntityManagerFactory emf = null;
- EntityManager em = null;
- try {
- emf = Persistence.createEntityManagerFactory(opsHistPu, props);
- } catch (Exception ex) {
- logger.error("PIP thread got Exception. Can't connect to Operations History DB -- {}", opsHistPu);
- logger.error("getStatusFromDb threw", ex);
- return null;
- }
- try {
- em = emf.createEntityManager();
- } catch (Exception ex) {
- logger.error("PIP thread got Exception. Problem creating EntityManager");
- logger.error("getStatusFromDb threw", ex);
- emf.close();
- return null;
- }
- //
- // Create the query
- //
- String sql = "select outcome from operationshistory10 where"
- + " clname= ?"
- + " and target= ?"
- + " order by endtime desc limit 1";
- Query nq = em.createNativeQuery(sql);
- nq.setParameter(1, clname);
- nq.setParameter(2, target);
- logger.debug("SQL query: {}, {}, {}", sql, clname, target);
- //
- // Run the query
- //
- String ret = null;
- try {
- ret = ((String)nq.getSingleResult());
- } catch (NoResultException ex) {
- logger.debug("NoResultException for getSingleResult()", ex);
- ret = "NO_MATCHING_ENTRY";
- } catch (Exception ex) {
- logger.error("getStatusFromDB threw an exception", ex);
- }
- if (ret != null) {
- logger.debug("SQL query result: {}", ret);
- }
- //
- // Clean up and return the result
- //
- try {
- em.close();
- } catch (Exception ex) {
- logger.error("getStatusFromDB threw an exception", ex);
- }
- try {
- emf.close();
- } catch (Exception ex) {
- logger.error("getStatusFromDB threw an exception", ex);
- }
- return ret;
- }
-}
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java
index 8b4c832da..6d1fd315e 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java
@@ -242,11 +242,11 @@ public class PolicyGuardXacmlHelper {
while (itAttr.hasNext()) {
Attribute currentAttr = itAttr.next();
String attributeId = currentAttr.getAttributeId().stringValue();
- if ("urn:oasis:names:tc:xacml:1.0:request:request-id".equals(attributeId)) {
+ if ("urn:org:onap:guard:request:request-id".equals(attributeId)) {
Iterator<AttributeValue<?>> itValues = currentAttr.getValues().iterator();
reqIdFromXacmlResponse = UUID.fromString(itValues.next().getValue().toString());
}
- if ("urn:oasis:names:tc:xacml:1.0:operation:operation-id".equals(attributeId)) {
+ if ("urn:org:onap:guard:operation:operation-id".equals(attributeId)) {
Iterator<AttributeValue<?>> itValues = currentAttr.getValues().iterator();
operationFromXacmlResponse = itValues.next().getValue().toString();
}
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java
index da03addf9..c888f94c1 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java
@@ -7,9 +7,9 @@
* 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.
@@ -28,27 +28,27 @@ import com.att.research.xacml.std.annotations.XACMLSubject;
@XACMLRequest(ReturnPolicyIdList = true, CombinedDecision = true)
public class PolicyGuardXacmlRequestAttributes {
- @XACMLSubject(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:clname:clname-id")
+ @XACMLSubject(includeInResults = true, attributeId = "urn:org:onap:guard:clname:clname-id")
String clnameId;
- @XACMLSubject(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:actor:actor-id")
+ @XACMLSubject(includeInResults = true, attributeId = "urn:org:onap:guard:actor:actor-id")
String actorId;
- @XACMLAction(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:operation:operation-id")
+ @XACMLAction(includeInResults = true, attributeId = "urn:org:onap:guard:operation:operation-id")
String operationId;
- @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:target:target-id")
+ @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:target-id")
String targetId;
- @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:request:request-id")
+ @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:request:request-id")
String requestId;
- @XACMLResource(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:request:vf-count")
+ @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:request:vf-count")
Integer vfCount;
/**
* Construct an instance.
- *
+ *
* @param clnameId the control loop Id
* @param actorId the actor Id
* @param operationId the operation Id
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java
index d159bd425..6298774bb 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java
@@ -69,7 +69,7 @@ public final class Util {
* Junit props
*/
protected static final String PU_KEY = "OperationsHistoryPU";
- protected static final String JUNITPU = "TestOperationsHistoryPU";
+ protected static final String JUNITPU = "OperationsHistoryPUTest";
private static final Logger logger = LoggerFactory.getLogger(Util.class);
diff --git a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PipEngineGetHistoryTest.java b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PipEngineGetHistoryTest.java
deleted file mode 100644
index 288c6ca33..000000000
--- a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PipEngineGetHistoryTest.java
+++ /dev/null
@@ -1,437 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * guard
- * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.guard;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import com.att.research.xacml.api.Attribute;
-import com.att.research.xacml.api.AttributeValue;
-import com.att.research.xacml.api.Identifier;
-import com.att.research.xacml.api.Status;
-import com.att.research.xacml.api.pip.PIPEngine;
-import com.att.research.xacml.api.pip.PIPException;
-import com.att.research.xacml.api.pip.PIPFinder;
-import com.att.research.xacml.api.pip.PIPRequest;
-import com.att.research.xacml.api.pip.PIPResponse;
-import com.att.research.xacml.std.IdentifierImpl;
-import com.att.research.xacml.std.StdAttribute;
-import com.att.research.xacml.std.StdAttributeValue;
-import com.att.research.xacml.std.StdStatus;
-import com.att.research.xacml.std.StdStatusCode;
-import com.att.research.xacml.std.pip.StdPIPRequest;
-import com.att.research.xacml.std.pip.StdPIPResponse;
-import com.att.research.xacml.std.pip.finders.EngineFinder;
-import com.att.research.xacml.util.FactoryException;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Properties;
-import java.util.UUID;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.persistence.Query;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onap.policy.drools.system.PolicyEngine;
-
-public class PipEngineGetHistoryTest {
- static PipEngineGetHistory pegh;
- private static final String ISSUER = "issuerIntw:mid:end";
-
- private static EntityManagerFactory emf;
- private static EntityManager em;
-
- /**
- * Set up test class.
- */
- @BeforeClass
- public static void testPipEngineGetHistory() {
- pegh = null;
- try {
- pegh = new PipEngineGetHistory();
- } catch (Exception e) {
- fail("PipEngineGetHistory constructor failed");
- }
-
- // Set PU
- System.setProperty(Util.PU_KEY, Util.JUNITPU);
-
- // Enter dummy props to avoid nullPointerException
- PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_URL, "a");
- PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_USER, "b");
- PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_PASS, "c");
-
- // Connect to in-mem db
- emf = Persistence.createEntityManagerFactory(Util.JUNITPU);
- em = emf.createEntityManager();
-
- // Create necessary table
- String sql = "CREATE TABLE `operationshistory10` (" + "`CLNAME` varchar(255)," + "`requestID` varchar(100),"
- + "`actor` varchar(50) ," + "`operation` varchar(50)," + "`target` varchar(50),"
- + "`starttime` timestamp," + "`outcome` varchar(50)," + "`message` varchar(255),"
- + "`subrequestId` varchar(100)," + "`endtime` timestamp" + ")";
- Query nq = em.createNativeQuery(sql);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
- }
-
- /**
- * Clean up test class.
- */
- @AfterClass
- public static void tearDown() {
- String sql = "DROP TABLE `operationshistory10`";
- Query nq = em.createNativeQuery(sql);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
- em.close();
- emf.close();
- }
-
- /**
- * Setup method.
- */
- @Before
- public void setUp() {
- // clear the table
- String sql = "DELETE FROM `operationshistory10`";
- Query nq = em.createNativeQuery(sql);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
- }
-
- @Test
- public void testAttributesRequired() {
- assertTrue(pegh.attributesRequired().isEmpty());
- }
-
- @Test
- public void testAttributesProvided() {
- assertTrue(pegh.attributesProvided().isEmpty());
- }
-
- @Test
- public void testGetAttributes() {
- StdPIPRequest mockPipRequest = mock(StdPIPRequest.class);
- EngineFinder mockPipFinder = mock(EngineFinder.class);
-
- // Test issuer null
- when(mockPipRequest.getIssuer()).thenReturn(null);
- try {
- assertEquals(StdPIPResponse.PIP_RESPONSE_EMPTY, pegh.getAttributes(mockPipRequest, mockPipFinder));
- } catch (Exception e) {
- fail("getAttributes failed");
- }
-
- // Test issuer not equal to our issuer
- pegh.setIssuer(ISSUER);
- when(mockPipRequest.getIssuer()).thenReturn("something else");
- try {
- assertEquals(StdPIPResponse.PIP_RESPONSE_EMPTY, pegh.getAttributes(mockPipRequest, mockPipFinder));
- } catch (Exception e) {
- fail("getAttributes failed");
- }
-
- // Test issuer equal to our issuer
- when(mockPipRequest.getIssuer()).thenReturn(ISSUER);
- try {
- assertNotNull(pegh.getAttributes(mockPipRequest, mockPipFinder));
- } catch (Exception e) {
- // Normal to catch exception
- }
- }
-
- @Test
- public void testGetCountFromDb() {
-
- // Use reflection to run getCountFromDB
- Method method = null;
- int count = -1;
- try {
- method = PipEngineGetHistory.class.getDeclaredMethod("getCountFromDb", String.class, String.class,
- String.class, String.class);
- method.setAccessible(true);
- count = (int) method.invoke(null, "actor", "op", "target", "1 MINUTE");
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
- | NoSuchMethodException e) {
- fail(e.getLocalizedMessage());
- }
- // No entries yet
- assertEquals(0, count);
-
- // Add an entry
- String addEntry = "insert into operationshistory10 (outcome, CLNAME, actor, operation, target, endtime)"
- + "values('success','testcl', 'actor', 'op', 'target', CURRENT_TIMESTAMP())";
- Query nq2 = em.createNativeQuery(addEntry);
- em.getTransaction().begin();
- nq2.executeUpdate();
- em.getTransaction().commit();
-
- try {
- count = (int) method.invoke(null, "actor", "op", "target", "1 MINUTE");
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- fail(e.getLocalizedMessage());
- }
- // Should count 1 entry now
- assertEquals(1, count);
- }
-
- @Test
- public void testConfigure() throws PIPException {
- PipEngineGetHistory pegh = new PipEngineGetHistory();
- pegh.configure("Dorothy", new Properties());
-
- pegh.setDescription(null);
- pegh.setIssuer(null);
- pegh.configure("Dorothy", new Properties());
- }
-
- @Test
- public void getAttributesTest() throws URISyntaxException, PIPException, FactoryException {
- PipEngineGetHistory pegh = new PipEngineGetHistory();
- pegh.setIssuer("Dorothy");
-
- Identifier identifierCategory = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow/category"));;
- Identifier identifierAttribute = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow/atrtribute"));;
- Identifier identifierDataType = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow/datatype"));;
- PIPRequest pipRequest = new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType,
- "Dorothy,tw:1000:SECOND");
-
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
-
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinderPipException()));
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinderResponseStatusNok()));
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinderResponseEmptyAttrs()));
- }
-
- @Test
- public void timeWindowTest() throws URISyntaxException, PIPException, FactoryException {
- PipEngineGetHistory pegh = new PipEngineGetHistory();
- pegh.setIssuer("Dorothy");
-
- Identifier identifierCategory = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow/category"));;
- Identifier identifierAttribute = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow/atrtribute"));;
- Identifier identifierDataType = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow/datatype"));;
-
- PIPRequest pipRequest =
- new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType, "Dorothy,tw:100:SECOND");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest =
- new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType, "Dorothy,tw:100:MINUTE");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest =
- new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType, "Dorothy,tw:100:HOUR");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest =
- new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType, "Dorothy,tw:100:DAY");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest =
- new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType, "Dorothy,tw:100:WEEK");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest =
- new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType, "Dorothy,tw:100:MONTH");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest = new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType,
- "Dorothy,tw:100:QUARTER");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest =
- new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType, "Dorothy,tw:100:YEAR");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest = new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType,
- "Dorothy,tw:100:FORTNIGHT");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- pipRequest = new StdPIPRequest(identifierCategory, identifierAttribute, identifierDataType,
- "Dorothy,tw:100:FORT NIGHT");
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinder()));
-
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinderPipException()));
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinderResponseStatusNok()));
- assertNotNull(pegh.getAttributes(pipRequest, new DummyPipFinderResponseEmptyAttrs()));
- }
-
- private class DummyPipFinder implements PIPFinder {
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPEngine exclude) throws PIPException {
- return null;
- }
-
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPEngine exclude, PIPFinder pipFinderParent)
- throws PIPException {
- return null;
- }
-
- @Override
- public PIPResponse getMatchingAttributes(PIPRequest pipRequest, PIPEngine exclude) throws PIPException {
- try {
- List<Attribute> attributeList = new ArrayList<>();
- Identifier categoryIdIn = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow/category"));
- Identifier dataTypeIdIn = new IdentifierImpl(new URI("http://www.w3.org/2001/XMLSchema#string"));
-
- Identifier attributeIdIn0 = new IdentifierImpl(new URI(UUID.randomUUID().toString()));
- AttributeValue<String> valueIn0 = new StdAttributeValue<String>(dataTypeIdIn, "ActorDorothy");
- Attribute attribute0 = new StdAttribute(categoryIdIn, attributeIdIn0, valueIn0);
- attributeList.add(attribute0);
-
- Identifier attributeIdIn1 = new IdentifierImpl(new URI(UUID.randomUUID().toString()));
- AttributeValue<String> valueIn1 = new StdAttributeValue<String>(dataTypeIdIn, "OperationHomeFromOZ");
- Attribute attribute1 = new StdAttribute(categoryIdIn, attributeIdIn1, valueIn1);
- attributeList.add(attribute1);
-
- Identifier attributeIdIn2 = new IdentifierImpl(new URI(UUID.randomUUID().toString()));
- AttributeValue<String> valueIn2 = new StdAttributeValue<String>(dataTypeIdIn, "TargetWickedWitch");
- Attribute attribute2 = new StdAttribute(categoryIdIn, attributeIdIn2, valueIn2);
- attributeList.add(attribute2);
-
- return new StdPIPResponse(attributeList);
- } catch (Exception e) {
- return null;
- }
- }
-
- @Override
- public PIPResponse getMatchingAttributes(PIPRequest pipRequest, PIPEngine exclude, PIPFinder pipFinderParent)
- throws PIPException {
- return null;
- }
-
- @Override
- public Collection<PIPEngine> getPIPEngines() {
- return null;
- }
- }
-
- private class DummyPipFinderPipException implements PIPFinder {
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPEngine exclude) throws PIPException {
- return null;
- }
-
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPEngine exclude, PIPFinder pipFinderParent)
- throws PIPException {
- return null;
- }
-
- @Override
- public PIPResponse getMatchingAttributes(PIPRequest pipRequest, PIPEngine exclude) throws PIPException {
- throw new PIPException();
- }
-
- @Override
- public PIPResponse getMatchingAttributes(PIPRequest pipRequest, PIPEngine exclude, PIPFinder pipFinderParent)
- throws PIPException {
- return null;
- }
-
- @Override
- public Collection<PIPEngine> getPIPEngines() {
- return null;
- }
- }
-
- private class DummyPipFinderResponseStatusNok implements PIPFinder {
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPEngine exclude) throws PIPException {
- return null;
- }
-
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPEngine exclude, PIPFinder pipFinderParent)
- throws PIPException {
- return null;
- }
-
- @Override
- public PIPResponse getMatchingAttributes(PIPRequest pipRequest, PIPEngine exclude) throws PIPException {
- Status status = new StdStatus(StdStatusCode.STATUS_CODE_PROCESSING_ERROR, "Processing Error");
- return new StdPIPResponse(status);
- }
-
- @Override
- public PIPResponse getMatchingAttributes(PIPRequest pipRequest, PIPEngine exclude, PIPFinder pipFinderParent)
- throws PIPException {
- return null;
- }
-
- @Override
- public Collection<PIPEngine> getPIPEngines() {
- return null;
- }
- }
-
- private class DummyPipFinderResponseEmptyAttrs implements PIPFinder {
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPEngine exclude) throws PIPException {
- return null;
- }
-
- @Override
- public PIPResponse getAttributes(PIPRequest pipRequest, PIPEngine exclude, PIPFinder pipFinderParent)
- throws PIPException {
- return null;
- }
-
- @Override
- public PIPResponse getMatchingAttributes(PIPRequest pipRequest, PIPEngine exclude) throws PIPException {
- List<Attribute> attributeList = new ArrayList<>();
- return new StdPIPResponse(attributeList);
- }
-
- @Override
- public PIPResponse getMatchingAttributes(PIPRequest pipRequest, PIPEngine exclude, PIPFinder pipFinderParent)
- throws PIPException {
- return null;
- }
-
- @Override
- public Collection<PIPEngine> getPIPEngines() {
- return null;
- }
- }
-}
diff --git a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PipEngineGetStatusTest.java b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PipEngineGetStatusTest.java
deleted file mode 100644
index 5e99b0605..000000000
--- a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PipEngineGetStatusTest.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * guard
- * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.guard;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import com.att.research.xacml.api.pip.PIPException;
-import com.att.research.xacml.std.pip.StdPIPRequest;
-import com.att.research.xacml.std.pip.StdPIPResponse;
-import com.att.research.xacml.std.pip.finders.EngineFinder;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Properties;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.persistence.Query;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onap.policy.drools.system.PolicyEngine;
-
-public class PipEngineGetStatusTest {
- static PipEngineGetStatus pegs;
- private static final String ISSUER = "issuer:clname:testclname";
-
- private static EntityManagerFactory emf;
- private static EntityManager em;
-
- /**
- * Set up test class.
- */
- @BeforeClass
- public static void testPipEngineGetStatus() {
- pegs = null;
- try {
- pegs = new PipEngineGetStatus();
- } catch (Exception e) {
- fail("PipEngineGetStatus constructor failed");
- }
-
- // Set PU
- System.setProperty(Util.PU_KEY, Util.JUNITPU);
-
- // Enter dummy props to avoid nullPointerException
- PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_URL, "a");
- PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_USER, "b");
- PolicyEngine.manager.setEnvironmentProperty(Util.ONAP_KEY_PASS, "c");
-
- // Connect to in-mem db
- emf = Persistence.createEntityManagerFactory(Util.JUNITPU);
- em = emf.createEntityManager();
-
- // Create necessary table
- String sql = "CREATE TABLE `operationshistory10` (" + "`CLNAME` varchar(255)," + "`requestID` varchar(100),"
- + "`actor` varchar(50) ," + "`operation` varchar(50)," + "`target` varchar(50),"
- + "`starttime` timestamp," + "`outcome` varchar(50)," + "`message` varchar(255),"
- + "`subrequestId` varchar(100)," + "`endtime` timestamp" + ")";
- Query nq = em.createNativeQuery(sql);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
- }
-
- /**
- * Clean up test class.
- */
- @AfterClass
- public static void tearDown() {
- String sql = "DROP TABLE `operationshistory10`";
- Query nq = em.createNativeQuery(sql);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
- em.close();
- emf.close();
- }
-
- /**
- * Setup method.
- */
- @Before
- public void setUp() {
- // clear the table
- String sql = "DELETE FROM `operationshistory10`";
- Query nq = em.createNativeQuery(sql);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
- }
-
- @Test
- public void testAttributesRequired() {
- assertTrue(pegs.attributesRequired().isEmpty());
- }
-
- @Test
- public void testAttributesProvided() {
- assertTrue(pegs.attributesProvided().isEmpty());
- }
-
- @Test
- public void testGetAttributes() {
- StdPIPRequest mockPipRequest = mock(StdPIPRequest.class);
- EngineFinder mockPipFinder = mock(EngineFinder.class);
-
- // Test issuer null
- when(mockPipRequest.getIssuer()).thenReturn(null);
- try {
- assertEquals(StdPIPResponse.PIP_RESPONSE_EMPTY, pegs.getAttributes(mockPipRequest, mockPipFinder));
- } catch (Exception e) {
- fail("getAttributes failed");
- }
-
- // Test issuer not equal to our issuer
- pegs.setIssuer(ISSUER);
- when(mockPipRequest.getIssuer()).thenReturn("something else");
- try {
- assertEquals(StdPIPResponse.PIP_RESPONSE_EMPTY, pegs.getAttributes(mockPipRequest, mockPipFinder));
- } catch (Exception e) {
- fail("getAttributes failed");
- }
-
- // Test issuer equal to our issuer
- when(mockPipRequest.getIssuer()).thenReturn(ISSUER);
- try {
- assertNotNull(pegs.getAttributes(mockPipRequest, mockPipFinder));
- } catch (Exception e) {
- // Normal to catch exception
- }
- }
-
- @Test
- public void testGetStatusFromDb() {
-
- // Use reflection to run getStatsFromDB
- Method method = null;
- String status = null;
- String addEntry;
- Query nq;
-
- // Add an entry
- addEntry = "insert into operationshistory10 (outcome, CLNAME, actor, operation, target, endtime)"
- + "values('1','testcl', 'actor', 'op', 'testtarget', CURRENT_TIMESTAMP())";
- nq = em.createNativeQuery(addEntry);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
-
- try {
- method = PipEngineGetStatus.class.getDeclaredMethod("getStatusFromDb", String.class, String.class);
- method.setAccessible(true);
- status = (String) method.invoke(null, "testcl", "testtarget");
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
- | NoSuchMethodException e) {
- fail(e.getLocalizedMessage());
- }
-
- // Status should be "success"
- assertEquals("1", status);
-
- // Add entries
- addEntry = "insert into operationshistory10 (outcome, CLNAME, actor, operation, target, endtime)"
- + "values('2','testcl', 'actor', 'op', 'testtarget', CURRENT_TIMESTAMP())";
- nq = em.createNativeQuery(addEntry);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
-
- addEntry = "insert into operationshistory10 (outcome, CLNAME, actor, operation, target, endtime)"
- + "values('3','testcl', 'actor', 'op', 'testtarget2', CURRENT_TIMESTAMP())";
- nq = em.createNativeQuery(addEntry);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
-
- addEntry = "insert into operationshistory10 (outcome, CLNAME, actor, operation, target, endtime)"
- + "values('4','testcl2', 'actor', 'op', 'testtarget2', CURRENT_TIMESTAMP())";
- nq = em.createNativeQuery(addEntry);
- em.getTransaction().begin();
- nq.executeUpdate();
- em.getTransaction().commit();
-
- try {
- method = PipEngineGetStatus.class.getDeclaredMethod("getStatusFromDb", String.class, String.class);
- method.setAccessible(true);
- status = (String) method.invoke(null, "testcl", "testtarget");
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
- | NoSuchMethodException e) {
- fail(e.getLocalizedMessage());
- }
- assertEquals("2", status);
-
- try {
- method = PipEngineGetStatus.class.getDeclaredMethod("getStatusFromDb", String.class, String.class);
- method.setAccessible(true);
- status = (String) method.invoke(null, "testcl", "testtarget2");
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
- | NoSuchMethodException e) {
- fail(e.getLocalizedMessage());
- }
- assertEquals("3", status);
-
- try {
- method = PipEngineGetStatus.class.getDeclaredMethod("getStatusFromDb", String.class, String.class);
- method.setAccessible(true);
- status = (String) method.invoke(null, "testcl2", "testtarget2");
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
- | NoSuchMethodException e) {
- fail(e.getLocalizedMessage());
- }
- assertEquals("4", status);
- }
-
- @Test
- public void testConfigure() throws PIPException {
- PipEngineGetStatus pegs = new PipEngineGetStatus();
- pegs.configure("Dorothy", new Properties());
-
- pegs.setDescription(null);
- pegs.setIssuer(null);
- pegs.configure("Dorothy", new Properties());
- }
-
-}
diff --git a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java
index 8b007fdcc..6526a9cce 100644
--- a/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java
+++ b/controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java
@@ -174,13 +174,13 @@ public class PolicyGuardXacmlHelperTest {
Identifier identifierCategory = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow"));
Collection<Attribute> listAttributes = new ArrayList<>();
Identifier categoryIdIn = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow/category"));
- Identifier attributeIdIn0 = new IdentifierImpl(new URI("urn:oasis:names:tc:xacml:1.0:request:request-id"));
+ Identifier attributeIdIn0 = new IdentifierImpl(new URI("urn:org:onap:guard:request:request-id"));
Identifier dataTypeIdIn = new IdentifierImpl(new URI("http://somewhere.over.the.rainbow.dataType"));
AttributeValue<String> valueIn = new StdAttributeValue<String>(dataTypeIdIn, UUID.randomUUID().toString());
Attribute attribute0 = new StdAttribute(categoryIdIn, attributeIdIn0, valueIn);
listAttributes.add(attribute0);
- Identifier attributeIdIn1 = new IdentifierImpl(new URI("urn:oasis:names:tc:xacml:1.0:operation:operation-id"));
+ Identifier attributeIdIn1 = new IdentifierImpl(new URI("urn:org:onap:guard:operation:operation-id"));
Attribute attribute1 = new StdAttribute(categoryIdIn, attributeIdIn1, valueIn);
listAttributes.add(attribute1);
attributesIn.add(new StdAttributeCategory(identifierCategory, listAttributes));
diff --git a/controlloop/common/guard/src/test/resources/META-INF/persistence.xml b/controlloop/common/guard/src/test/resources/META-INF/persistence.xml
index 73b9e1809..b6d80e099 100644
--- a/controlloop/common/guard/src/test/resources/META-INF/persistence.xml
+++ b/controlloop/common/guard/src/test/resources/META-INF/persistence.xml
@@ -1,47 +1,43 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ============LICENSE_START=======================================================
- drools-applications
- ================================================================================
- Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
- ================================================================================
- 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.
- ============LICENSE_END=========================================================
- -->
-<persistence version="2.1"
- xmlns="http://xmlns.jcp.org/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
-
- <!-- In-mem DB for junit -->
- <persistence-unit name="TestOperationsHistoryPU"
- transaction-type="RESOURCE_LOCAL">
- <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
- <properties>
- <property name="eclipselink.ddl-generation"
- value="create-or-extend-tables" />
- <property name="javax.persistence.jdbc.driver"
- value="org.h2.Driver" />
- <property name="javax.persistence.jdbc.url"
- value="jdbc:h2:mem:test" />
- <property name="javax.persistence.jdbc.user"
- value="sa" />
- <property name="javax.persistence.jdbc.password"
- value="" />
- <property name="eclipselink.logging.level"
- value="CONFIG" />
- </properties>
- </persistence-unit>
-
-
-</persistence>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ drools-applications
+ ================================================================================
+ Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ 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.
+ ============LICENSE_END=========================================================
+ -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">
+
+ <!-- In-mem DB for junit -->
+ <persistence-unit name="OperationsHistoryPUTest"
+ transaction-type="RESOURCE_LOCAL">
+ <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+
+ <class>org.onap.policy.database.operationshistory.Dbao</class>
+
+ <properties>
+ <property name="eclipselink.ddl-generation" value="create-tables" />
+ <property name="eclipselink.logging.level" value="FINE" />
+ <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+ <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
+ <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb;DATABASE_TO_UPPER=FALSE" />
+ <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="drop-and-create"/>
+ <property name="javax.persistence.schema-generation.create-source" value="metadata"/>
+ </properties>
+ </persistence-unit>
+
+</persistence>
diff --git a/controlloop/common/guard/src/test/resources/blacklist_template.xml b/controlloop/common/guard/src/test/resources/blacklist_template.xml
index 590b19d25..1563e4a7d 100644
--- a/controlloop/common/guard/src/test/resources/blacklist_template.xml
+++ b/controlloop/common/guard/src/test/resources/blacklist_template.xml
@@ -3,7 +3,7 @@
============LICENSE_START=======================================================
drools-applications
================================================================================
- Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@
DataType="http://www.w3.org/2001/XMLSchema#string">${clname}</AttributeValue>
<AttributeDesignator
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
- AttributeId="urn:oasis:names:tc:xacml:1.0:clname:clname-id"
+ AttributeId="urn:org:onap:guard:clname:clname-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="false" />
</Match>
@@ -45,7 +45,7 @@
DataType="http://www.w3.org/2001/XMLSchema#string">${actor}</AttributeValue>
<AttributeDesignator
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
- AttributeId="urn:oasis:names:tc:xacml:1.0:actor:actor-id"
+ AttributeId="urn:org:onap:guard:actor:actor-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="false" />
</Match>
@@ -55,7 +55,7 @@
DataType="http://www.w3.org/2001/XMLSchema#string">${recipe}</AttributeValue>
<AttributeDesignator
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"
- AttributeId="urn:oasis:names:tc:xacml:1.0:operation:operation-id"
+ AttributeId="urn:org:onap:guard:operation:operation-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="false" />
</Match>
@@ -86,7 +86,7 @@
FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
<AttributeDesignator
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
- AttributeId="urn:oasis:names:tc:xacml:1.0:target:target-id"
+ AttributeId="urn:org:onap:guard:target:target-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="false" />
</Apply>
diff --git a/controlloop/common/guard/src/test/resources/frequency_limiter_template.xml b/controlloop/common/guard/src/test/resources/frequency_limiter_template.xml
index 34aa1af69..d26432f86 100644
--- a/controlloop/common/guard/src/test/resources/frequency_limiter_template.xml
+++ b/controlloop/common/guard/src/test/resources/frequency_limiter_template.xml
@@ -3,7 +3,7 @@
============LICENSE_START=======================================================
drools-applications
================================================================================
- Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -34,7 +34,7 @@
DataType="http://www.w3.org/2001/XMLSchema#string">${clname}</AttributeValue>
<AttributeDesignator
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
- AttributeId="urn:oasis:names:tc:xacml:1.0:clname:clname-id"
+ AttributeId="urn:org:onap:guard:clname:clname-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="false" />
</Match>
@@ -46,7 +46,7 @@
DataType="http://www.w3.org/2001/XMLSchema#string">${actor}</AttributeValue>
<AttributeDesignator
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
- AttributeId="urn:oasis:names:tc:xacml:1.0:actor:actor-id"
+ AttributeId="urn:org:onap:guard:actor:actor-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="false" />
</Match>
@@ -56,7 +56,7 @@
DataType="http://www.w3.org/2001/XMLSchema#string">${recipe}</AttributeValue>
<AttributeDesignator
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action"
- AttributeId="urn:oasis:names:tc:xacml:1.0:operation:operation-id"
+ AttributeId="urn:org:onap:guard:operation:operation-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="false" />
</Match>
@@ -67,7 +67,7 @@
DataType="http://www.w3.org/2001/XMLSchema#string">${targets}</AttributeValue>
<AttributeDesignator
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
- AttributeId="urn:oasis:names:tc:xacml:1.0:target:target-id"
+ AttributeId="urn:org:onap:guard:target:target-id"
DataType="http://www.w3.org/2001/XMLSchema#string"
MustBePresent="false" />
</Match>