summaryrefslogtreecommitdiffstats
path: root/applications/common
diff options
context:
space:
mode:
authorPamela Dragosh <pdragosh@research.att.com>2020-03-11 14:06:42 -0400
committerPamela Dragosh <pdragosh@research.att.com>2020-03-12 09:12:22 -0400
commit2924fa7d806435a3bf9f2cb5abcdb01aa7295b00 (patch)
tree094c3b2140e492f8ffc700f0232405dcf83d2d2e /applications/common
parent2a65ced426b393e9a6fe34c2c64303b1cc83e1a0 (diff)
Better error handling for decisions
Throw exceptions when requests cannot be created and return error information back. Consolidated some code to avoid sonar duplication issues. Companion review to https://gerrit.onap.org/r/c/policy/models/+/103548 Issue-ID: POLICY-2242 Change-Id: Ic873af933dab82e3aeef6335f55939666be20385 Signed-off-by: Pamela Dragosh <pdragosh@research.att.com>
Diffstat (limited to 'applications/common')
-rw-r--r--applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslator.java4
-rw-r--r--applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslator.java7
-rw-r--r--applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslator.java8
-rw-r--r--applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java8
-rw-r--r--applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java11
-rw-r--r--applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/TestUtilsCommon.java6
-rw-r--r--applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslatorTest.java19
-rw-r--r--applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslatorTest.java4
-rw-r--r--applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslatorTest.java2
-rw-r--r--applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProviderTest.java4
10 files changed, 37 insertions, 36 deletions
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslator.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslator.java
index 47ff70f6..32b950b4 100644
--- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslator.java
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/ToscaPolicyTranslator.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP
* ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 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.
@@ -49,7 +49,7 @@ public interface ToscaPolicyTranslator {
* @param request Incoming DecisionRequest
* @return Xacml Request object
*/
- Request convertRequest(DecisionRequest request);
+ Request convertRequest(DecisionRequest request) throws ToscaPolicyConversionException;
/**
* Implement this method to convert a Xacml Response
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 34936b06..3ac57b7b 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
@@ -69,7 +69,7 @@ public abstract class StdBaseTranslator implements ToscaPolicyTranslator {
}
@Override
- public Request convertRequest(DecisionRequest request) {
+ public Request convertRequest(DecisionRequest request) throws ToscaPolicyConversionException {
return null;
}
@@ -99,9 +99,10 @@ public abstract class StdBaseTranslator implements ToscaPolicyTranslator {
scanAdvice(xacmlResult.getAssociatedAdvice(), decisionResponse);
} else {
//
- // TODO we have to return an ErrorResponse object instead
+ // Return error information back
//
- decisionResponse.setStatus("A better error message");
+ decisionResponse.setStatus("error");
+ decisionResponse.setMessage(xacmlResult.getStatus().getStatusMessage());
}
}
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslator.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslator.java
index aba5e252..d9661829 100644
--- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslator.java
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslator.java
@@ -127,17 +127,13 @@ public class StdCombinedPolicyResultsTranslator extends StdBaseTranslator {
}
@Override
- public Request convertRequest(DecisionRequest request) {
+ public Request convertRequest(DecisionRequest request) throws ToscaPolicyConversionException {
LOGGER.info("Converting Request {}", request);
try {
return RequestParser.parseRequest(StdCombinedPolicyRequest.createInstance(request));
} catch (IllegalArgumentException | IllegalAccessException | DataTypeException e) {
- LOGGER.error("Failed to convert DecisionRequest", e);
+ throw new ToscaPolicyConversionException("Failed to parse request", e);
}
- //
- // TODO throw exception
- //
- return null;
}
/**
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java
index d5e2a395..7ca995e0 100644
--- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslator.java
@@ -100,17 +100,13 @@ public class StdMatchableTranslator extends StdBaseTranslator {
}
@Override
- public Request convertRequest(DecisionRequest request) {
+ public Request convertRequest(DecisionRequest request) throws ToscaPolicyConversionException {
LOGGER.info("Converting Request {}", request);
try {
return StdMatchablePolicyRequest.createInstance(request);
} catch (XacmlApplicationException e) {
- LOGGER.error("Failed to convert DecisionRequest", e);
+ throw new ToscaPolicyConversionException("Failed to convert DecisionRequest", e);
}
- //
- // TODO throw exception
- //
- return null;
}
/**
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java
index 11271651..0fdd3a96 100644
--- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java
@@ -232,7 +232,16 @@ public abstract class StdXacmlApplicationServiceProvider implements XacmlApplica
//
// Convert to a XacmlRequest
//
- Request xacmlRequest = this.getTranslator().convertRequest(request);
+ Request xacmlRequest;
+ try {
+ xacmlRequest = this.getTranslator().convertRequest(request);
+ } catch (ToscaPolicyConversionException e) {
+ LOGGER.error("Failed to convert request", e);
+ DecisionResponse response = new DecisionResponse();
+ response.setStatus("error");
+ response.setMessage(e.getLocalizedMessage());
+ return Pair.of(response, null);
+ }
//
// Now get a decision
//
diff --git a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/TestUtilsCommon.java b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/TestUtilsCommon.java
index ab5dde27..026bea9e 100644
--- a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/TestUtilsCommon.java
+++ b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/TestUtilsCommon.java
@@ -112,9 +112,11 @@ public class TestUtilsCommon {
* @param policyIds Collection of IdReference objects
* @return Response object
*/
- public static Response createXacmlResponse(StatusCode code, Decision decision, Collection<Obligation> obligations,
+ public static Response createXacmlResponse(StatusCode code, String message, Decision decision,
+ Collection<Obligation> obligations,
Collection<IdReference> policyIds) {
- StdStatus status = new StdStatus(code);
+
+ StdStatus status = new StdStatus(code, message);
StdMutableResult result = new StdMutableResult(decision, status);
result.addObligations(obligations);
diff --git a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslatorTest.java b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslatorTest.java
index 8039a9cf..8e692583 100644
--- a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslatorTest.java
+++ b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdBaseTranslatorTest.java
@@ -120,7 +120,7 @@ public class StdBaseTranslatorTest {
}
@Test
- public void test() throws ParseException {
+ public void testTranslatorNormalFlow() throws Exception {
StdBaseTranslator translator = new MyStdBaseTranslator();
assertNotNull(translator);
assertThatThrownBy(() -> translator.convertPolicy(null)).isInstanceOf(ToscaPolicyConversionException.class);
@@ -176,7 +176,7 @@ public class StdBaseTranslatorTest {
ids.put("onap.policies.Test", "1.0.0");
Collection<IdReference> policyIds = TestUtilsCommon.createPolicyIdList(ids);
- Response xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_OK,
+ Response xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_OK, null,
Decision.PERMIT, Arrays.asList(obligation), policyIds);
DecisionResponse decision = translator.convertResponse(xacmlResponse);
@@ -210,7 +210,7 @@ public class StdBaseTranslatorTest {
ids.put("onap.policies.Test", "1.0.0");
Collection<IdReference> policyIds = TestUtilsCommon.createPolicyIdList(ids);
- Response xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_OK,
+ Response xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_OK, null,
Decision.PERMIT, Arrays.asList(obligation), policyIds);
DecisionResponse decision = translator.convertResponse(xacmlResponse);
@@ -220,28 +220,25 @@ public class StdBaseTranslatorTest {
assertThat(decision.getPolicies()).isNotNull();
assertThat(decision.getPolicies().size()).isEqualTo(0);
- //
- // This will need more work when I fix
- // the convertResponse
- //
-
Obligation badObligation = TestUtilsCommon.createXacmlObligation(
ToscaDictionary.ID_OBLIGATION_REST_BODY.stringValue(),
Arrays.asList(assignmentBadPolicy, assignmentUnknown));
- xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_MISSING_ATTRIBUTE,
+ xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_MISSING_ATTRIBUTE, null,
Decision.PERMIT, Arrays.asList(badObligation), policyIds);
decision = translator.convertResponse(xacmlResponse);
assertNotNull(decision);
- xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_OK,
- Decision.DENY, Arrays.asList(badObligation), policyIds);
+ xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_PROCESSING_ERROR,
+ "Bad obligation", Decision.DENY, Arrays.asList(badObligation), policyIds);
decision = translator.convertResponse(xacmlResponse);
assertNotNull(decision);
+ assertThat(decision.getStatus()).isEqualTo("error");
+ assertThat(decision.getMessage()).isEqualTo("Bad obligation");
}
private class MyStdBaseTranslator extends StdBaseTranslator {
diff --git a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslatorTest.java b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslatorTest.java
index 6ff7a7f1..42c13d9e 100644
--- a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslatorTest.java
+++ b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdCombinedPolicyResultsTranslatorTest.java
@@ -108,7 +108,7 @@ public class StdCombinedPolicyResultsTranslatorTest {
ids.put("onap.policies.Test", "1.0.0");
Collection<IdReference> policyIds = TestUtilsCommon.createPolicyIdList(ids);
- Response xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_OK,
+ Response xacmlResponse = TestUtilsCommon.createXacmlResponse(StdStatusCode.STATUS_CODE_OK, null,
Decision.PERMIT, Arrays.asList(obligation), policyIds);
DecisionResponse decision = translator.convertResponse(xacmlResponse);
@@ -148,7 +148,7 @@ public class StdCombinedPolicyResultsTranslatorTest {
}
@Test
- public void testDecision() {
+ public void testDecision() throws ToscaPolicyConversionException {
StdCombinedPolicyResultsTranslator translator = new StdCombinedPolicyResultsTranslator();
DecisionRequest decision = new DecisionRequest();
diff --git a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslatorTest.java b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslatorTest.java
index aeb4cf88..e191a08a 100644
--- a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslatorTest.java
+++ b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdMatchableTranslatorTest.java
@@ -237,7 +237,7 @@ public class StdMatchableTranslatorTest {
Collection<IdReference> policyIds = TestUtilsCommon.createPolicyIdList(ids);
com.att.research.xacml.api.Response xacmlResponse = TestUtilsCommon.createXacmlResponse(
- StdStatusCode.STATUS_CODE_OK, Decision.PERMIT,
+ StdStatusCode.STATUS_CODE_OK, null, Decision.PERMIT,
Arrays.asList(obligation1, obligation2, obligation3), policyIds);
//
// Test the response
diff --git a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProviderTest.java b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProviderTest.java
index e7ea049a..c95d3ca5 100644
--- a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProviderTest.java
+++ b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProviderTest.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019-2020 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.
@@ -255,7 +255,7 @@ public class StdXacmlApplicationServiceProviderTest {
}
@Test
- public void testMakeDecision() {
+ public void testMakeDecision() throws ToscaPolicyConversionException {
prov.createEngine(null);
DecisionRequest decreq = mock(DecisionRequest.class);