Fix missing error message in ACM 96/136596/2
authorFrancescoFioraEst <francesco.fiora@est.tech>
Mon, 20 Nov 2023 10:07:44 +0000 (10:07 +0000)
committerFrancescoFioraEst <francesco.fiora@est.tech>
Mon, 20 Nov 2023 15:15:18 +0000 (15:15 +0000)
Issue-ID: POLICY-4872
Change-Id: I2f7769a3bb1f6aa168f8d59ff99cb0774aee5ed7
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
participant/participant-impl/participant-impl-acelement/src/main/java/org/onap/policy/clamp/acm/element/main/rest/AcElementErrorController.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/RuntimeErrorController.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java

index 081eb03..770f5d8 100755 (executable)
 
 package org.onap.policy.clamp.acm.element.main.rest;
 
+import static org.springframework.boot.web.error.ErrorAttributeOptions.Include;
+
 import jakarta.servlet.RequestDispatcher;
 import jakarta.servlet.http.HttpServletRequest;
-import java.util.Map;
 import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 import org.onap.policy.clamp.models.acm.messages.rest.TypedSimpleResponse;
 import org.springframework.boot.web.error.ErrorAttributeOptions;
@@ -72,10 +73,14 @@ public class AcElementErrorController implements ErrorController {
     @SuppressWarnings("squid:S3752")
     @RequestMapping(value = "${server.error.path}", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<TypedSimpleResponse<SimpleResponse>> handleError(HttpServletRequest request) {
-        Map<String, Object> map = this.errorAttributes.getErrorAttributes(new ServletWebRequest(request),
-                ErrorAttributeOptions.defaults());
+        var map = this.errorAttributes.getErrorAttributes(new ServletWebRequest(request),
+            ErrorAttributeOptions.of(Include.MESSAGE, Include.EXCEPTION, Include.BINDING_ERRORS));
 
         var sb = new StringBuilder();
+        final var exception = map.get("exception");
+        if (exception != null) {
+            sb.append(exception).append(" ");
+        }
         final var error = map.get("error");
         if (error != null) {
             sb.append(error).append(" ");
index a7faf04..5761d69 100755 (executable)
 
 package org.onap.policy.clamp.acm.runtime.main.web;
 
+import static org.springframework.boot.web.error.ErrorAttributeOptions.Include;
+
 import io.swagger.v3.oas.annotations.Hidden;
 import jakarta.servlet.RequestDispatcher;
 import jakarta.servlet.http.HttpServletRequest;
-import java.util.Map;
 import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 import org.onap.policy.clamp.models.acm.messages.rest.TypedSimpleResponse;
 import org.slf4j.Logger;
@@ -79,10 +80,14 @@ public class RuntimeErrorController implements ErrorController {
     @SuppressWarnings("squid:S3752")
     @RequestMapping(value = "${server.error.path}", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<TypedSimpleResponse<SimpleResponse>> handleError(HttpServletRequest request) {
-        Map<String, Object> map = this.errorAttributes.getErrorAttributes(new ServletWebRequest(request),
-                ErrorAttributeOptions.defaults());
+        var map = this.errorAttributes.getErrorAttributes(new ServletWebRequest(request),
+                ErrorAttributeOptions.of(Include.MESSAGE, Include.EXCEPTION, Include.BINDING_ERRORS));
 
         var sb = new StringBuilder();
+        final var exception = map.get("exception");
+        if (exception != null) {
+            sb.append(exception).append(" ");
+        }
         final var error = map.get("error");
         if (error != null) {
             sb.append(error).append(" ");
index b2e1511..6c54172 100755 (executable)
@@ -47,6 +47,7 @@ import org.onap.policy.clamp.models.acm.messages.rest.commissioning.PrimeOrder;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -112,7 +113,29 @@ class CommissioningControllerTest extends CommonRestController {
 
         assertThat(Response.Status.BAD_REQUEST.getStatusCode()).isEqualTo(resp.getStatus());
         var commissioningResponse = resp.readEntity(CommissioningResponse.class);
-        assertThat(commissioningResponse.getErrorDetails()).isNotNull();
+        assertThat(commissioningResponse.getErrorDetails())
+            .isEqualTo("org.springframework.http.converter.HttpMessageNotReadableException "
+                + "Bad Request Could not read JSON: java.lang.IllegalStateException: "
+                + "Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $");
+        assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).isNull();
+    }
+
+    @Test
+    void testCreateBadVersion() {
+        var serviceTemplateCreate = new ToscaServiceTemplate(serviceTemplate);
+        var x = new ToscaNodeTemplate(serviceTemplateCreate
+            .getToscaTopologyTemplate().getNodeTemplates().values().iterator().next());
+        x.setVersion("1.0.wrong");
+        serviceTemplateCreate.getToscaTopologyTemplate().getNodeTemplates().put(x.getName(), x);
+
+        var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT);
+        var resp = invocationBuilder.post(Entity.json(serviceTemplateCreate));
+
+        assertThat(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).isEqualTo(resp.getStatus());
+        var commissioningResponse = resp.readEntity(CommissioningResponse.class);
+        assertThat(commissioningResponse.getErrorDetails())
+            .isEqualTo("java.lang.IllegalArgumentException Internal Server Error parameter "
+                + "\"version\": value \"1.0.wrong\", does not match regular expression \"^(\\d+.){2}\\d+$\"");
         assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).isNull();
     }