This is an automated email from the ASF dual-hosted git repository.

gitgabrio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new a7d49ae6d3 [incubator-kie-issues#2084] Updating decisionresult status 
on strictMode (#6446)
a7d49ae6d3 is described below

commit a7d49ae6d39623868203ba7aca328eb9aa49e480
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Mon Sep 8 16:37:33 2025 +0200

    [incubator-kie-issues#2084] Updating decisionresult status on strictMode 
(#6446)
    
    * [incubator-kie-issues#2084] Updating decisionresult status on strictMode
    
    * [incubator-kie-issues#2084] Cleanup
    
    ---------
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
---
 .../java/org/kie/dmn/core/impl/DMNRuntimeImpl.java | 10 ++++++++
 .../src/main/java/org/kie/dmn/core/util/Msg.java   |  1 +
 .../dmn/core/BaseInterpretedVsCompiledTest.java    | 17 ++++++++++++++
 .../java/org/kie/dmn/core/DMNInputRuntimeTest.java | 27 +++++++++++++++-------
 .../java/org/kie/dmn/core/util/DMNRuntimeUtil.java |  5 +++-
 5 files changed, 51 insertions(+), 9 deletions(-)

diff --git 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
index 967ca8b030..b96cec4b01 100644
--- 
a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
+++ 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/impl/DMNRuntimeImpl.java
@@ -629,6 +629,16 @@ public class DMNRuntimeImpl
                 // if result messages contains errors && runtime mode = strict 
-> stop execution and return null
                 if (strictMode && result.hasErrors()) {
                     logger.warn("Immediately return due to strict mode");
+                    DMNMessage message = MsgUtil.reportMessage(logger,
+                                                               
DMNMessage.Severity.ERROR,
+                                                               
decision.getSource(),
+                                                               result,
+                                                               null,
+                                                               null,
+                                                               
Msg.ERROR_EVAL_DECISION_NODE_STRICT_MODE,
+                                                               
getIdentifier(decision),
+                                                               
decision.getResultType());
+                    reportFailure(dr, message, 
DMNDecisionResult.DecisionEvaluationStatus.FAILED);
                     return false;
                 } else if (er.getResultType() == 
EvaluatorResult.ResultType.SUCCESS ||
                         (((DMNModelImpl) 
result.getModel()).getFeelDialect().equals(FEELDialect.BFEEL) && er.getResult() 
!= null)) {
diff --git a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/util/Msg.java 
b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/util/Msg.java
index 91bdc35153..cfbc6b0c5a 100644
--- a/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/util/Msg.java
+++ b/kie-dmn/kie-dmn-core/src/main/java/org/kie/dmn/core/util/Msg.java
@@ -102,6 +102,7 @@ public final class Msg {
     public static final Message2 ERROR_EVAL_DS_NODE                            
      = new Message2( DMNMessageType.ERROR_EVAL_NODE, "Error evaluating 
Decision Service node '%s': %s" );
     public static final Message2 ERROR_EVAL_BKM_NODE                           
      = new Message2( DMNMessageType.ERROR_EVAL_NODE, "Error evaluating 
Business Knowledge Model node '%s': %s" );
     public static final Message2 ERROR_EVAL_DECISION_NODE                      
      = new Message2( DMNMessageType.ERROR_EVAL_NODE, "Error evaluating 
Decision node '%s': %s" );
+    public static final Message2 ERROR_EVAL_DECISION_NODE_STRICT_MODE          
      = new Message2( DMNMessageType.ERROR_EVAL_NODE, "Error evaluating 
Decision node on strict mode '%s': %s" );
     public static final Message4 ERROR_EVAL_NODE_DEP_WRONG_TYPE                
      = new Message4( DMNMessageType.ERROR_EVAL_NODE, "Error while evaluating 
node '%s' for dependency '%s': the dependency value '%s' is not allowed by the 
declared type (%s)" );
     public static final Message3 ERROR_EVAL_NODE_RESULT_WRONG_TYPE             
      = new Message3( DMNMessageType.ERROR_EVAL_NODE, "Error while evaluating 
node '%s': the declared result type is '%s' but the actual value '%s' is not an 
instance of that type" );
     public static final Message2 EXPR_TYPE_NOT_SUPPORTED_IN_NODE               
      = new Message2( DMNMessageType.EXPR_TYPE_NOT_SUPPORTED_IN_NODE, 
"Expression type '%s' not supported in node '%s'" );
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/BaseInterpretedVsCompiledTest.java
 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/BaseInterpretedVsCompiledTest.java
index 93493addb7..cba338760d 100644
--- 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/BaseInterpretedVsCompiledTest.java
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/BaseInterpretedVsCompiledTest.java
@@ -20,6 +20,10 @@ package org.kie.dmn.core;
 
 import org.junit.jupiter.api.AfterEach;
 import org.kie.dmn.core.compiler.ExecModelCompilerOption;
+import org.kie.dmn.core.compiler.RuntimeModeOption;
+
+import static org.kie.dmn.core.compiler.RuntimeModeOption.MODE.LENIENT;
+import static org.kie.dmn.core.compiler.RuntimeModeOption.MODE.STRICT;
 
 public abstract class BaseInterpretedVsCompiledTest {
 
@@ -27,15 +31,28 @@ public abstract class BaseInterpretedVsCompiledTest {
         return new Object[]{false};
     }
 
+    protected static Object[] strictMode() {
+        return new Object[]{false, true};
+    }
+
     protected boolean useExecModelCompiler;
+    protected boolean useStrictMode;
 
     protected void init(boolean useExecModelCompiler){
+        init(useExecModelCompiler, false);
+    }
+
+    protected void init(boolean useExecModelCompiler, boolean useStrictMode) {
         this.useExecModelCompiler = useExecModelCompiler;
+        this.useStrictMode = useStrictMode;
         System.setProperty(ExecModelCompilerOption.PROPERTY_NAME, 
Boolean.toString(useExecModelCompiler));
+        String modeToSet = useStrictMode ? STRICT.getMode() : 
LENIENT.getMode();
+        System.setProperty(RuntimeModeOption.PROPERTY_NAME, modeToSet);
     }
 
     @AfterEach
     public void after() {
         System.clearProperty(ExecModelCompilerOption.PROPERTY_NAME);
+        System.clearProperty(RuntimeModeOption.PROPERTY_NAME);
     }
 }
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
index cc2af49061..bf53c508e9 100644
--- 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/DMNInputRuntimeTest.java
@@ -759,13 +759,12 @@ public class DMNInputRuntimeTest extends 
BaseInterpretedVsCompiledTest {
     }
 
     @ParameterizedTest
-    @MethodSource("params")
-    void errorHandlingWithStrictModeEvaluateAll(boolean useExecModelCompiler) {
-        init(useExecModelCompiler);
+    @MethodSource("strictMode")
+    void errorHandlingWithWithoutStrictModeEvaluateAll(boolean strictMode) {
+        init(false, strictMode);
         String nameSpace = 
"https://kie.org/dmn/_79591DB5-1EE1-4CBD-AA5D-2E3EDF31155E";;
         final DMNRuntime runtime = 
DMNRuntimeUtil.createRuntime("invalid_models/DMNv1_6/DMN-MultipleInvalidElements"
 +
                                                                         
".dmn", this.getClass());
-        ((DMNRuntimeImpl)runtime).setOption(new 
RuntimeModeOption(RuntimeModeOption.MODE.STRICT));
         final DMNModel dmnModel = runtime.getModel(
                 nameSpace,
                 "DMN_8F7C4323-412A-4E0B-9AEF-0F24C8F55282");
@@ -774,13 +773,25 @@ public class DMNInputRuntimeTest extends 
BaseInterpretedVsCompiledTest {
         final DMNContext dmnContext = DMNFactory.newContext();
         dmnContext.set("id", "_7273EA2E-2CC3-4012-8F87-39E310C8DF3C");
         dmnContext.set("Conditional Input", 107);
-        dmnContext.set("New Input Data", 8888);
+        dmnContext.set("New Input Data", "8888");
         dmnContext.set("Score", 80);
         final DMNResult dmnResult = runtime.evaluateAll(dmnModel, dmnContext);
         
assertThat(dmnResult.hasErrors()).as(DMNRuntimeUtil.formatMessages(dmnResult.getMessages())).isTrue();
-        
assertThat(dmnResult.getMessages(DMNMessage.Severity.ERROR).size()).isEqualTo(2);
-        assertThat(dmnResult.getDecisionResults()).isNotNull().hasSize(3);
-        dmnResult.getDecisionResults().forEach(decisionResult -> 
assertThat(decisionResult.getResult()).isNull());
+        if (strictMode) {
+            
assertThat(dmnResult.getMessages(DMNMessage.Severity.ERROR).size()).isEqualTo(5);
+            assertThat(dmnResult.getDecisionResults()).isNotNull().hasSize(3);
+            dmnResult.getDecisionResults().forEach(decisionResult -> {
+                assertThat(decisionResult.getResult()).isNull();
+                
assertThat(decisionResult.getEvaluationStatus()).isEqualTo(DMNDecisionResult.DecisionEvaluationStatus.FAILED);
+            });
+        } else {
+            
assertThat(dmnResult.getDecisionResultByName("Decision1").getEvaluationStatus()).isEqualTo(DMNDecisionResult.DecisionEvaluationStatus.SUCCEEDED);
+            
assertThat(dmnResult.getDecisionResultByName("Decision2").getEvaluationStatus()).isEqualTo(DMNDecisionResult.DecisionEvaluationStatus.FAILED);
+            
assertThat(dmnResult.getDecisionResultByName("Decision3").getEvaluationStatus()).isEqualTo(DMNDecisionResult.DecisionEvaluationStatus.SUCCEEDED);
+            
assertThat(dmnResult.getDecisionResultByName("Decision1").getResult()).isNull();
+            
assertThat(dmnResult.getDecisionResultByName("Decision2").getResult()).isNull();
+            
assertThat(dmnResult.getDecisionResultByName("Decision3").getResult()).isEqualTo("Good");
+        }
     }
 
     @ParameterizedTest
diff --git 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/util/DMNRuntimeUtil.java 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/util/DMNRuntimeUtil.java
index 64ac5e957b..fcdc63bf36 100644
--- 
a/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/util/DMNRuntimeUtil.java
+++ 
b/kie-dmn/kie-dmn-core/src/test/java/org/kie/dmn/core/util/DMNRuntimeUtil.java
@@ -44,6 +44,7 @@ import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
 import org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
 import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
 import org.kie.dmn.core.api.event.DefaultDMNRuntimeEventListener;
+import org.kie.dmn.core.compiler.RuntimeModeOption;
 import org.kie.dmn.core.compiler.RuntimeTypeCheckOption;
 import org.kie.dmn.core.impl.DMNRuntimeImpl;
 import org.kie.internal.builder.InternalKieBuilder;
@@ -96,7 +97,7 @@ public final class DMNRuntimeUtil {
                                                    
.filter(DMNMessage.class::isInstance)
                                                    .map(DMNMessage.class::cast)
                                                    
.collect(Collectors.toList());
-        assertThat(dmnMessages).isNotEmpty();;
+        assertThat(dmnMessages).isNotEmpty();
         return dmnMessages;
     }
 
@@ -137,6 +138,8 @@ public final class DMNRuntimeUtil {
     public static DMNRuntime typeSafeGetKieRuntime(final KieContainer 
kieContainer) {
         DMNRuntime dmnRuntime = 
kieContainer.newKieSession().getKieRuntime(DMNRuntime.class);
         ((DMNRuntimeImpl) dmnRuntime).setOption(new 
RuntimeTypeCheckOption(true));
+        String runtimeMode = 
System.getProperty(RuntimeModeOption.PROPERTY_NAME, 
RuntimeModeOption.MODE.LENIENT.getMode());
+        ((DMNRuntimeImpl)dmnRuntime).setOption(new 
RuntimeModeOption(runtimeMode));
         return dmnRuntime;
     }
     


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to