From 525a2f147f15225913c97c0225512ab306bce976 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 14 Jun 2025 16:53:09 +0000 Subject: [PATCH 1/4] fix(deps): update dependency io.github.jamsesso:json-logic-java to v1.1.0 --- providers/flagd/pom.xml | 2 +- providers/jsonlogic-eval-provider/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/providers/flagd/pom.xml b/providers/flagd/pom.xml index 713911538..723b4b2c6 100644 --- a/providers/flagd/pom.xml +++ b/providers/flagd/pom.xml @@ -78,7 +78,7 @@ io.github.jamsesso json-logic-java - 1.0.9 + 1.1.0 diff --git a/providers/jsonlogic-eval-provider/pom.xml b/providers/jsonlogic-eval-provider/pom.xml index dbc754d2e..11fc404ae 100644 --- a/providers/jsonlogic-eval-provider/pom.xml +++ b/providers/jsonlogic-eval-provider/pom.xml @@ -34,7 +34,7 @@ io.github.jamsesso json-logic-java - 1.0.9 + 1.1.0 org.json From 021a50bca9089335626610c5c78c90973e5492f2 Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Tue, 17 Jun 2025 11:39:37 +0200 Subject: [PATCH 2/4] Fix syntax errors Signed-off-by: christian.lutnik --- .../process/targeting/Fractional.java | 21 ++++++++++--------- .../resolver/process/targeting/SemVer.java | 8 +++---- .../process/targeting/StringComp.java | 2 +- .../sync/SyncStreamQueueSourceTest.java | 13 +++++------- .../process/targeting/FractionalTest.java | 2 +- .../process/targeting/SemVerTest.java | 4 ++-- .../process/targeting/StringCompTest.java | 10 ++++----- 7 files changed, 29 insertions(+), 31 deletions(-) diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java index b3f6d7c01..35176f041 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java @@ -18,7 +18,7 @@ public String key() { return "fractional"; } - public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException { + public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException { if (arguments.size() < 2) { return null; } @@ -53,7 +53,7 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx try { for (Object dist : distibutions) { - FractionProperty fractionProperty = new FractionProperty(dist); + FractionProperty fractionProperty = new FractionProperty(dist, jsonPath); propertyList.add(fractionProperty); totalWeight += fractionProperty.getWeight(); } @@ -63,11 +63,11 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx } // find distribution - return distributeValue(bucketBy, propertyList, totalWeight); + return distributeValue(bucketBy, propertyList, totalWeight, jsonPath); } private static String distributeValue( - final String hashKey, final List propertyList, int totalWeight) + final String hashKey, final List propertyList, int totalWeight, String jsonPath) throws JsonLogicEvaluationException { byte[] bytes = hashKey.getBytes(StandardCharsets.UTF_8); int mmrHash = MurmurHash3.hash32x86(bytes, 0, bytes.length, 0); @@ -83,7 +83,7 @@ private static String distributeValue( } // this shall not be reached - throw new JsonLogicEvaluationException("Unable to find a correct bucket"); + throw new JsonLogicEvaluationException("Unable to find a correct bucket", jsonPath); } @Getter @@ -96,27 +96,28 @@ protected final void finalize() { // DO NOT REMOVE, spotbugs: CT_CONSTRUCTOR_THROW } - FractionProperty(final Object from) throws JsonLogicException { + FractionProperty(final Object from, String jsonPath) throws JsonLogicException { if (!(from instanceof List)) { - throw new JsonLogicException("Property is not an array"); + throw new JsonLogicException("Property is not an array", jsonPath); } final List array = (List) from; if (array.isEmpty()) { - throw new JsonLogicException("Fraction property needs at least one element"); + throw new JsonLogicException("Fraction property needs at least one element", jsonPath); } // first must be a string if (!(array.get(0) instanceof String)) { - throw new JsonLogicException("First element of the fraction property is not a string variant"); + throw new JsonLogicException("First element of the fraction property is not a string variant", + jsonPath); } variant = (String) array.get(0); if (array.size() >= 2) { // second element must be a number if (!(array.get(1) instanceof Number)) { - throw new JsonLogicException("Second element of the fraction property is not a number"); + throw new JsonLogicException("Second element of the fraction property is not a number", jsonPath); } weight = ((Number) array.get(1)).intValue(); } else { diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java index 223d62f9a..2ab1802a5 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java @@ -37,7 +37,7 @@ public String key() { return "sem_ver"; } - public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException { + public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException { if (arguments.size() != 3) { log.debug("Incorrect number of arguments for sem_ver operator"); @@ -75,10 +75,10 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx return null; } - return compare(arg2Parsed, arg1Parsed, arg3Parsed); + return compare(arg2Parsed, arg1Parsed, arg3Parsed, jsonPath); } - private static boolean compare(final String operator, final Semver arg1, final Semver arg2) + private static boolean compare(final String operator, final Semver arg1, final Semver arg2, final String jsonPath) throws JsonLogicEvaluationException { int comp = arg1.compareTo(arg2); @@ -102,7 +102,7 @@ private static boolean compare(final String operator, final Semver arg1, final S return arg1.getMinor() == arg2.getMinor() && arg1.getMajor() == arg2.getMajor(); default: throw new JsonLogicEvaluationException( - String.format("Unsupported operator received. Operator: %s", operator)); + String.format("Unsupported operator received. Operator: %s", operator), jsonPath); } } } diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java index ce3490ead..9956ca8c6 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java @@ -17,7 +17,7 @@ public String key() { return type.key; } - public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException { + public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException { if (arguments.size() != 2) { log.debug("Incorrect number of arguments for String comparison operator"); return null; diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSourceTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSourceTest.java index 17ad1864a..64ed0e069 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSourceTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSourceTest.java @@ -27,7 +27,6 @@ import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; class SyncStreamQueueSourceTest { @@ -48,13 +47,11 @@ public void init() throws Exception { stub = mock(FlagSyncServiceStub.class); when(stub.withDeadlineAfter(anyLong(), any())).thenReturn(stub); - doAnswer(new Answer() { - public Void answer(InvocationOnMock invocation) { - latch.countDown(); - Object[] args = invocation.getArguments(); - observer = (QueueingStreamObserver) args[1]; - return null; - } + doAnswer((Answer) invocation -> { + Object[] args = invocation.getArguments(); + observer = (QueueingStreamObserver) args[1]; + latch.countDown(); + return null; }) .when(stub) .syncFlags(any(SyncFlagsRequest.class), any(QueueingStreamObserver.class)); // Mock the initialize diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java index ac3e6e19e..4520c0c66 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java @@ -41,7 +41,7 @@ void validate_emptyJson_targetingReturned(@ConvertWith(FileContentConverter.clas data.put(FLAGD_PROPS_KEY, flagdProperties); // when - Object evaluate = fractional.evaluate(testData.rule, data); + Object evaluate = fractional.evaluate(testData.rule, data, "path"); // then assertEquals(testData.result, evaluate); diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java index 36a199e96..9448ca79c 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java @@ -33,7 +33,7 @@ void testValidCases(List args) throws JsonLogicEvaluationException { final SemVer semVer = new SemVer(); // when - Object result = semVer.evaluate(args, new Object()); + Object result = semVer.evaluate(args, new Object(), "jsonPath"); // then if (!(result instanceof Boolean)) { @@ -58,6 +58,6 @@ void testInvalidCases(List args) throws JsonLogicEvaluationException { final SemVer semVer = new SemVer(); // then - assertNull(semVer.evaluate(args, new Object())); + assertNull(semVer.evaluate(args, new Object(), "jsonPath")); } } diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java index 2ba8268dc..028f7ac8f 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java @@ -15,7 +15,7 @@ public void startsWithEvaluation() throws JsonLogicEvaluationException { final StringComp startsWith = new StringComp(StringComp.Type.STARTS_WITH); // when - Object result = startsWith.evaluate(Arrays.asList("abc@123.com", "abc"), new Object()); + Object result = startsWith.evaluate(Arrays.asList("abc@123.com", "abc"), new Object(), "jsonPath"); // then if (!(result instanceof Boolean)) { @@ -31,7 +31,7 @@ public void endsWithEvaluation() throws JsonLogicEvaluationException { final StringComp endsWith = new StringComp(StringComp.Type.ENDS_WITH); // when - Object result = endsWith.evaluate(Arrays.asList("abc@123.com", "123.com"), new Object()); + Object result = endsWith.evaluate(Arrays.asList("abc@123.com", "123.com"), new Object(), "jsonPath"); // then if (!(result instanceof Boolean)) { @@ -47,7 +47,7 @@ public void invalidTypeCheckArg1() throws JsonLogicEvaluationException { final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH); // when - Object result = operator.evaluate(Arrays.asList(1230, "12"), new Object()); + Object result = operator.evaluate(Arrays.asList(1230, "12"), new Object(), "jsonPath"); // then assertThat(result).isNull(); @@ -59,7 +59,7 @@ public void invalidTypeCheckArg2() throws JsonLogicEvaluationException { final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH); // when - Object result = operator.evaluate(Arrays.asList("abc@123.com", 123), new Object()); + Object result = operator.evaluate(Arrays.asList("abc@123.com", 123), new Object(), "jsonPath"); // then assertThat(result).isNull(); @@ -71,7 +71,7 @@ public void invalidNumberOfArgs() throws JsonLogicEvaluationException { final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH); // when - Object result = operator.evaluate(Arrays.asList("123", "12", "1"), new Object()); + Object result = operator.evaluate(Arrays.asList("123", "12", "1"), new Object(), "jsonPath"); // then assertThat(result).isNull(); From 93f9cf98765d1a3ce0e50646ab83e6f6fdf16b8f Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Wed, 18 Jun 2025 08:36:31 +0200 Subject: [PATCH 3/4] Fix format Signed-off-by: christian.lutnik --- .../providers/flagd/resolver/process/targeting/Fractional.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java index 35176f041..a3e381d5a 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java @@ -117,7 +117,8 @@ protected final void finalize() { if (array.size() >= 2) { // second element must be a number if (!(array.get(1) instanceof Number)) { - throw new JsonLogicException("Second element of the fraction property is not a number", jsonPath); + throw new JsonLogicException("Second element of the fraction property is not a number", + jsonPath); } weight = ((Number) array.get(1)).intValue(); } else { From a5769a829fe6c2be51145d5a4bdb7de27287d55b Mon Sep 17 00:00:00 2001 From: "christian.lutnik" Date: Wed, 18 Jun 2025 10:56:01 +0200 Subject: [PATCH 4/4] Fix format Signed-off-by: christian.lutnik --- .../flagd/resolver/process/targeting/Fractional.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java index a3e381d5a..6658aab78 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java @@ -109,16 +109,15 @@ protected final void finalize() { // first must be a string if (!(array.get(0) instanceof String)) { - throw new JsonLogicException("First element of the fraction property is not a string variant", - jsonPath); + throw new JsonLogicException( + "First element of the fraction property is not a string variant", jsonPath); } variant = (String) array.get(0); if (array.size() >= 2) { // second element must be a number if (!(array.get(1) instanceof Number)) { - throw new JsonLogicException("Second element of the fraction property is not a number", - jsonPath); + throw new JsonLogicException("Second element of the fraction property is not a number", jsonPath); } weight = ((Number) array.get(1)).intValue(); } else {