aboutsummaryrefslogtreecommitdiffstats
path: root/applications
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2021-07-21 13:50:44 +0000
committerGerrit Code Review <gerrit@onap.org>2021-07-21 13:50:44 +0000
commitf01fce93c17db824d772240b9c68c07d15c6869a (patch)
tree62db091689fefce9b812efaf0b23d01417ec69fd /applications
parent527c3c8542dfc4d0078213441529ec68eec1372e (diff)
parent24446884306a87a1d22fb8d0b28efbf41201a87c (diff)
Merge "Include returned attributes in Decision"
Diffstat (limited to 'applications')
-rw-r--r--applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslator.java50
-rw-r--r--applications/guard/src/test/java/org/onap/policy/xacml/pdp/application/guard/GuardPdpApplicationTest.java6
-rw-r--r--applications/match/src/test/java/org/onap/policy/xacml/pdp/application/match/MatchPdpApplicationTest.java12
-rw-r--r--applications/monitoring/src/test/java/org/onap/policy/xacml/pdp/application/monitoring/MonitoringPdpApplicationTest.java55
-rw-r--r--applications/naming/src/test/java/org/onap/policy/xacml/pdp/application/naming/NamingPdpApplicationTest.java12
-rw-r--r--applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java12
6 files changed, 143 insertions, 4 deletions
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslator.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslator.java
index 61d28f58..58bdafa2 100644
--- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslator.java
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslator.java
@@ -23,6 +23,8 @@
package org.onap.policy.pdp.xacml.application.common.std;
import com.att.research.xacml.api.Advice;
+import com.att.research.xacml.api.Attribute;
+import com.att.research.xacml.api.AttributeCategory;
import com.att.research.xacml.api.Decision;
import com.att.research.xacml.api.Obligation;
import com.att.research.xacml.api.Request;
@@ -32,6 +34,8 @@ import com.att.research.xacml.api.XACML3;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import lombok.Getter;
+import lombok.Setter;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.ApplyType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType;
@@ -59,6 +63,14 @@ public abstract class StdBaseTranslator implements ToscaPolicyTranslator {
private static final Logger LOGGER = LoggerFactory.getLogger(StdBaseTranslator.class);
private static final ObjectFactory factory = new ObjectFactory();
+ @Getter
+ @Setter
+ protected boolean booleanReturnAttributes = false;
+
+ @Getter
+ @Setter
+ protected boolean booleanReturnSingleValueAttributesAsCollection = false;
+
public static final String POLICY_ID = "policy-id";
public static final String POLICY_VERSION = "policy-version";
@@ -103,6 +115,12 @@ public abstract class StdBaseTranslator implements ToscaPolicyTranslator {
decisionResponse.setStatus("error");
decisionResponse.setMessage(xacmlResult.getStatus().getStatusMessage());
}
+ //
+ // Add attributes
+ //
+ if (booleanReturnAttributes) {
+ scanAttributes(xacmlResult.getAttributes(), decisionResponse);
+ }
}
return decisionResponse;
@@ -129,6 +147,38 @@ public abstract class StdBaseTranslator implements ToscaPolicyTranslator {
protected abstract void scanAdvice(Collection<Advice> advice, DecisionResponse decisionResponse);
/**
+ * scanAttributes - scans the attributes that are returned in the XACML Decision and puts them into the
+ * DecisionResponse object.
+ *
+ * @param attributeCategories Collection of AttributeCategory objects
+ * @param decisionResponse DecisionResponse object used to store any attributes
+ */
+ protected void scanAttributes(Collection<AttributeCategory> attributeCategories,
+ DecisionResponse decisionResponse) {
+ var returnedAttributes = new HashMap<String, Object>();
+ for (AttributeCategory attributeCategory : attributeCategories) {
+ var mapCategory = new HashMap<String, Object>();
+ for (Attribute attribute : attributeCategory.getAttributes()) {
+ //
+ // Most attributes have a single value, thus the collection is not necessary to
+ // return. However, we will allow this to be configurable.
+ //
+ if (! booleanReturnSingleValueAttributesAsCollection && attribute.getValues().size() == 1) {
+ var iterator = attribute.getValues().iterator();
+ var value = iterator.next();
+ mapCategory.put(attribute.getAttributeId().stringValue(), value.getValue().toString());
+ } else {
+ mapCategory.put(attribute.getAttributeId().stringValue(), attribute.getValues());
+ }
+ }
+ returnedAttributes.put(attributeCategory.getCategory().stringValue(), mapCategory);
+ }
+ if (! returnedAttributes.isEmpty()) {
+ decisionResponse.setAttributes(returnedAttributes);
+ }
+ }
+
+ /**
* From the TOSCA metadata section, pull in values that are needed into the XACML policy.
*
* @param policy Policy Object to store the metadata
diff --git a/applications/guard/src/test/java/org/onap/policy/xacml/pdp/application/guard/GuardPdpApplicationTest.java b/applications/guard/src/test/java/org/onap/policy/xacml/pdp/application/guard/GuardPdpApplicationTest.java
index e02c0c4f..29d9e7f3 100644
--- a/applications/guard/src/test/java/org/onap/policy/xacml/pdp/application/guard/GuardPdpApplicationTest.java
+++ b/applications/guard/src/test/java/org/onap/policy/xacml/pdp/application/guard/GuardPdpApplicationTest.java
@@ -180,6 +180,12 @@ public class GuardPdpApplicationTest {
// Dump it out as Json
//
LOGGER.info(gson.encode(response));
+ //
+ // Guard does not return these
+ //
+ assertThat(response.getAdvice()).isNull();
+ assertThat(response.getObligations()).isNull();
+ assertThat(response.getAttributes()).isNull();
}
/**
diff --git a/applications/match/src/test/java/org/onap/policy/xacml/pdp/application/match/MatchPdpApplicationTest.java b/applications/match/src/test/java/org/onap/policy/xacml/pdp/application/match/MatchPdpApplicationTest.java
index 03222342..a855f3e2 100644
--- a/applications/match/src/test/java/org/onap/policy/xacml/pdp/application/match/MatchPdpApplicationTest.java
+++ b/applications/match/src/test/java/org/onap/policy/xacml/pdp/application/match/MatchPdpApplicationTest.java
@@ -184,6 +184,12 @@ public class MatchPdpApplicationTest {
assertThat(response).isNotNull();
assertThat(response.getPolicies()).isEmpty();
//
+ // Match applications should not have this information returned
+ //
+ assertThat(response.getAdvice()).isNull();
+ assertThat(response.getObligations()).isNull();
+ assertThat(response.getAttributes()).isNull();
+ //
// Ask for foo
//
baseRequest.getResource().put("matchable", "foo");
@@ -194,6 +200,12 @@ public class MatchPdpApplicationTest {
assertThat(response).isNotNull();
assertThat(response.getPolicies()).hasSize(1);
//
+ // Match applications should not have this information returned
+ //
+ assertThat(response.getAdvice()).isNull();
+ assertThat(response.getObligations()).isNull();
+ assertThat(response.getAttributes()).isNull();
+ //
// Validate it
//
validateDecision(response, baseRequest, "value1");
diff --git a/applications/monitoring/src/test/java/org/onap/policy/xacml/pdp/application/monitoring/MonitoringPdpApplicationTest.java b/applications/monitoring/src/test/java/org/onap/policy/xacml/pdp/application/monitoring/MonitoringPdpApplicationTest.java
index d3738d62..7fab09b2 100644
--- a/applications/monitoring/src/test/java/org/onap/policy/xacml/pdp/application/monitoring/MonitoringPdpApplicationTest.java
+++ b/applications/monitoring/src/test/java/org/onap/policy/xacml/pdp/application/monitoring/MonitoringPdpApplicationTest.java
@@ -182,6 +182,12 @@ public class MonitoringPdpApplicationTest {
assertThat(decision.getKey()).isNotNull();
assertThat(decision.getKey().getPolicies()).isEmpty();
+ //
+ // Monitoring applications should not have this information returned
+ //
+ assertThat(decision.getKey().getAdvice()).isNull();
+ assertThat(decision.getKey().getObligations()).isNull();
+ assertThat(decision.getKey().getAttributes()).isNull();
}
@SuppressWarnings("unchecked")
@@ -202,10 +208,18 @@ public class MonitoringPdpApplicationTest {
//
Pair<DecisionResponse, Response> decision = service.makeDecision(requestSinglePolicy, null);
LOGGER.info("Decision {}", decision);
-
+ //
+ // Should have one policy returned
+ //
assertThat(decision.getKey()).isNotNull();
assertThat(decision.getKey().getPolicies()).hasSize(1);
//
+ // Monitoring applications should not have this information returned
+ //
+ assertThat(decision.getKey().getAdvice()).isNull();
+ assertThat(decision.getKey().getObligations()).isNull();
+ assertThat(decision.getKey().getAttributes()).isNull();
+ //
// Dump it out as Json
//
LOGGER.info(gson.encode(decision.getKey()));
@@ -214,9 +228,20 @@ public class MonitoringPdpApplicationTest {
//
decision = service.makeDecision(requestPolicyType, null);
LOGGER.info("Decision {}", decision);
-
+ //
+ // Should have one policy returned
+ //
assertThat(decision.getKey()).isNotNull();
assertThat(decision.getKey().getPolicies()).hasSize(1);
+ //
+ // Monitoring applications should not have this information returned
+ //
+ assertThat(decision.getKey().getAdvice()).isNull();
+ assertThat(decision.getKey().getObligations()).isNull();
+ assertThat(decision.getKey().getAttributes()).isNull();
+ //
+ // Validate the full policy is returned
+ //
Map<String, Object> jsonPolicy = (Map<String, Object>) decision.getKey().getPolicies().get("onap.scaleout.tca");
assertThat(jsonPolicy).isNotNull();
assertThat(jsonPolicy.get("properties")).isNotNull();
@@ -231,9 +256,20 @@ public class MonitoringPdpApplicationTest {
requestQueryParams.put("abbrev", new String[] {"true"});
decision = service.makeDecision(requestPolicyType, requestQueryParams);
LOGGER.info("Decision {}", decision);
-
+ //
+ // Should have one policy returned
+ //
assertThat(decision.getKey()).isNotNull();
assertThat(decision.getKey().getPolicies()).hasSize(1);
+ //
+ // Monitoring applications should not have this information returned
+ //
+ assertThat(decision.getKey().getAdvice()).isNull();
+ assertThat(decision.getKey().getObligations()).isNull();
+ assertThat(decision.getKey().getAttributes()).isNull();
+ //
+ // Validate an abbreviated policy is returned
+ //
jsonPolicy = (Map<String, Object>) decision.getKey().getPolicies().get("onap.scaleout.tca");
assertThat(jsonPolicy).isNotNull().doesNotContainKey("properties");
//
@@ -243,9 +279,20 @@ public class MonitoringPdpApplicationTest {
requestQueryParams.put("abbrev", new String[] {"false"});
decision = service.makeDecision(requestPolicyType, requestQueryParams);
LOGGER.info("Decision {}", decision);
-
+ //
+ // Should have one policy returned
+ //
assertThat(decision.getKey()).isNotNull();
assertThat(decision.getKey().getPolicies()).hasSize(1);
+ //
+ // Monitoring applications should not have this information returned
+ //
+ assertThat(decision.getKey().getAdvice()).isNull();
+ assertThat(decision.getKey().getObligations()).isNull();
+ assertThat(decision.getKey().getAttributes()).isNull();
+ //
+ // And should have full policy returned
+ //
jsonPolicy = (Map<String, Object>) decision.getKey().getPolicies().get("onap.scaleout.tca");
assertThat(jsonPolicy).isNotNull();
assertThat(jsonPolicy.get("properties")).isNotNull();
diff --git a/applications/naming/src/test/java/org/onap/policy/xacml/pdp/application/naming/NamingPdpApplicationTest.java b/applications/naming/src/test/java/org/onap/policy/xacml/pdp/application/naming/NamingPdpApplicationTest.java
index 6ae2b2fe..0c567e11 100644
--- a/applications/naming/src/test/java/org/onap/policy/xacml/pdp/application/naming/NamingPdpApplicationTest.java
+++ b/applications/naming/src/test/java/org/onap/policy/xacml/pdp/application/naming/NamingPdpApplicationTest.java
@@ -171,6 +171,12 @@ public class NamingPdpApplicationTest {
assertThat(decision.getKey()).isNotNull();
assertThat(decision.getKey().getPolicies()).isEmpty();
+ //
+ // Naming applications should not have this information returned
+ //
+ assertThat(decision.getKey().getAdvice()).isNull();
+ assertThat(decision.getKey().getObligations()).isNull();
+ assertThat(decision.getKey().getAttributes()).isNull();
}
@Test
@@ -200,6 +206,12 @@ public class NamingPdpApplicationTest {
assertThat(response).isNotNull();
assertThat(response.getPolicies()).hasSize(1);
//
+ // Naming applications should not have this information returned
+ //
+ assertThat(response.getAdvice()).isNull();
+ assertThat(response.getObligations()).isNull();
+ assertThat(response.getAttributes()).isNull();
+ //
// Validate it
//
validateDecision(response, baseRequest);
diff --git a/applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java b/applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java
index 674169e8..9c922941 100644
--- a/applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java
+++ b/applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java
@@ -202,6 +202,13 @@ public class OptimizationPdpApplicationTest {
assertThat(decision.getKey()).isNotNull();
assertThat(decision.getKey().getPolicies()).isEmpty();
+ //
+ // Optimization applications should not have this information returned. Except advice
+ // for subscriber details, which does get checked in the tests following.
+ //
+ assertThat(decision.getKey().getAdvice()).isNull();
+ assertThat(decision.getKey().getObligations()).isNull();
+ assertThat(decision.getKey().getAttributes()).isNull();
}
/**
@@ -424,6 +431,11 @@ public class OptimizationPdpApplicationTest {
assertThat(response).isNotNull();
assertThat(response.getPolicies()).hasSize(expectedPolicyCount);
//
+ // Optimization applications should not have this information returned
+ //
+ assertThat(response.getObligations()).isNull();
+ assertThat(response.getAttributes()).isNull();
+ //
// Validate it
//
validateDecision(response, baseRequest);