From be1ec229723331743bed3054a1dc67cf0c01ac47 Mon Sep 17 00:00:00 2001 From: Feng Shang Date: Mon, 11 Sep 2023 19:34:08 +0800 Subject: [PATCH 1/6] feat(pre-requisite): return disabled variation if pre-toggle is not match or does not exist --- .../featureprobe/sdk/server/FeatureProbe.java | 1 + .../featureprobe/sdk/server/model/Toggle.java | 20 ++--- .../sdk/server/FeatureProbeSpec.groovy | 16 ++-- .../featureprobe/sdk/server/ToggleTest.groovy | 83 +++++++++++++++++++ src/test/resources/test | 2 +- 5 files changed, 101 insertions(+), 21 deletions(-) create mode 100644 src/test/groovy/com/featureprobe/sdk/server/ToggleTest.groovy diff --git a/src/main/java/com/featureprobe/sdk/server/FeatureProbe.java b/src/main/java/com/featureprobe/sdk/server/FeatureProbe.java index 7e14a1d..a76020f 100644 --- a/src/main/java/com/featureprobe/sdk/server/FeatureProbe.java +++ b/src/main/java/com/featureprobe/sdk/server/FeatureProbe.java @@ -316,6 +316,7 @@ private FPDetail genericEvaluateDetail(String toggleKey, FPUser user, T d return getEvaluateDetail(toggleKey, user, defaultValue, clazz, false); } catch (ClassCastException | JsonProcessingException e) { logger.error(LOG_CONVERSION_ERROR, toggleKey, e); + detail.setValue(defaultValue); detail.setReason(REASON_TYPE_MISMATCH); } catch (Exception e) { logger.error(LOG_HANDLE_ERROR, toggleKey, e); diff --git a/src/main/java/com/featureprobe/sdk/server/model/Toggle.java b/src/main/java/com/featureprobe/sdk/server/model/Toggle.java index 8f88fbf..423d957 100644 --- a/src/main/java/com/featureprobe/sdk/server/model/Toggle.java +++ b/src/main/java/com/featureprobe/sdk/server/model/Toggle.java @@ -27,7 +27,7 @@ import java.util.Objects; import java.util.Optional; -public final class Toggle { +public class Toggle { private String key; @@ -53,7 +53,7 @@ public final class Toggle { public EvaluationResult eval(FPUser user, Map toggles, Map segments, Object defaultValue, int deep) { - EvaluationResult result = createDefaultResult(user, key, defaultValue, ""); + EvaluationResult result = createDisabledResult(user, key, defaultValue); try { return doEval(user, toggles, segments, defaultValue, deep); } catch (PrerequisiteException e) { @@ -66,7 +66,7 @@ public EvaluationResult eval(FPUser user, Map toggles, Map toggles, Map segments, - Object defaultValue, int deep) { + Object defaultValue, int depth) { String warning = ""; @@ -74,15 +74,15 @@ public EvaluationResult doEval(FPUser user, Map toggles, Map 0) { + if (rules != null && !rules.isEmpty()) { for (int i = 0; i < rules.size(); i++) { Rule rule = rules.get(i); HitResult hitResult = rule.hit(user, segments, this.key); @@ -110,7 +110,7 @@ private EvaluationResult createDefaultResult(FPUser user, String toggleKey, Obje return defaultResult; } - private boolean prerequisite(FPUser user, Map toggles, Map segments, int deep) { + protected boolean meetPrerequisite(FPUser user, Map toggles, Map segments, int depth) { if (Objects.isNull(prerequisites) || prerequisites.isEmpty()) { return true; } @@ -118,7 +118,7 @@ private boolean prerequisite(FPUser user, Map toggles, Map> false + + when: + def result = toggleSpy.doEval(user, null, null, null, 1) + + then: + DISABLED_VARIATION == result.variationIndex.get() + } + + def "When meetPrerequisite returns true should not act like disabled"() { + setup: + Toggle toggleSpy = Spy() + toggleSpy.enabled = true + final DEFAULT_VARIATION = 1 + final DISABLED_VARIATION = 0 + + toggleSpy.variations = [DEFAULT_VARIATION, DISABLED_VARIATION] + toggleSpy.defaultServe = new Serve(DEFAULT_VARIATION) + toggleSpy.disabledServe = new Serve(DISABLED_VARIATION) + + // Make meetPrerequisite return false + toggleSpy.meetPrerequisite(user, null, null, 1) >> true + + when: + def result = toggleSpy.doEval(user, null, null, null, 1) + + then: + DISABLED_VARIATION != result.variationIndex.get() + } + +} diff --git a/src/test/resources/test b/src/test/resources/test index 90d81ec..503eec9 160000 --- a/src/test/resources/test +++ b/src/test/resources/test @@ -1 +1 @@ -Subproject commit 90d81ec82259a9814e3436efbfe899969b5b17e3 +Subproject commit 503eec9218dc0d2af9439ceaf652316ed1e500fa From 600dfaa42c3cb719c2048f91c936dfc21a7ca885 Mon Sep 17 00:00:00 2001 From: Feng Shang Date: Mon, 11 Sep 2023 19:44:15 +0800 Subject: [PATCH 2/6] feat(pre-requisite): return disabled variation if pre-toggle is not match or does not exist --- src/main/java/com/featureprobe/sdk/server/model/Toggle.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/featureprobe/sdk/server/model/Toggle.java b/src/main/java/com/featureprobe/sdk/server/model/Toggle.java index 423d957..dd0a388 100644 --- a/src/main/java/com/featureprobe/sdk/server/model/Toggle.java +++ b/src/main/java/com/featureprobe/sdk/server/model/Toggle.java @@ -75,7 +75,7 @@ public EvaluationResult doEval(FPUser user, Map toggles, Map Date: Mon, 11 Sep 2023 19:46:21 +0800 Subject: [PATCH 3/6] feat(pre-requisite): return disabled variation if pre-toggle is not match or does not exist --- src/main/java/com/featureprobe/sdk/server/model/Toggle.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/featureprobe/sdk/server/model/Toggle.java b/src/main/java/com/featureprobe/sdk/server/model/Toggle.java index dd0a388..6afdb59 100644 --- a/src/main/java/com/featureprobe/sdk/server/model/Toggle.java +++ b/src/main/java/com/featureprobe/sdk/server/model/Toggle.java @@ -110,7 +110,8 @@ private EvaluationResult createDefaultResult(FPUser user, String toggleKey, Obje return defaultResult; } - protected boolean meetPrerequisite(FPUser user, Map toggles, Map segments, int depth) { + protected boolean meetPrerequisite(FPUser user, Map toggles, Map segments, + int depth) { if (Objects.isNull(prerequisites) || prerequisites.isEmpty()) { return true; } From af7e3848747d61e53007ae82d0f2703a9d268bfe Mon Sep 17 00:00:00 2001 From: Feng Shang Date: Mon, 11 Sep 2023 19:52:48 +0800 Subject: [PATCH 4/6] feat(pre-requisite): return disabled variation if pre-toggle is not match or does not exist --- src/main/java/com/featureprobe/sdk/server/FeatureProbe.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/featureprobe/sdk/server/FeatureProbe.java b/src/main/java/com/featureprobe/sdk/server/FeatureProbe.java index a76020f..7e14a1d 100644 --- a/src/main/java/com/featureprobe/sdk/server/FeatureProbe.java +++ b/src/main/java/com/featureprobe/sdk/server/FeatureProbe.java @@ -316,7 +316,6 @@ private FPDetail genericEvaluateDetail(String toggleKey, FPUser user, T d return getEvaluateDetail(toggleKey, user, defaultValue, clazz, false); } catch (ClassCastException | JsonProcessingException e) { logger.error(LOG_CONVERSION_ERROR, toggleKey, e); - detail.setValue(defaultValue); detail.setReason(REASON_TYPE_MISMATCH); } catch (Exception e) { logger.error(LOG_HANDLE_ERROR, toggleKey, e); From cb9a18e7415476986c396b28475f12fb3595359e Mon Sep 17 00:00:00 2001 From: Feng Shang Date: Tue, 12 Sep 2023 10:17:09 +0800 Subject: [PATCH 5/6] feat(pre-requisite): return disabled variation if pre-toggle is not match or does not exist --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1bb5a43..7552938 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.featureprobe server-sdk-java - 2.2.2 + 2.3.2 server-sdk-java FeatureProbe Server Side SDK for Java From 7ea3ceabff541e57f244f4f0249c2ceab8c80cdc Mon Sep 17 00:00:00 2001 From: Feng Shang Date: Tue, 12 Sep 2023 10:31:56 +0800 Subject: [PATCH 6/6] feat(pre-requisite): return disabled variation if pre-toggle is not match or does not exist --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7552938..b231cd7 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.featureprobe server-sdk-java - 2.3.2 + 2.3.0 server-sdk-java FeatureProbe Server Side SDK for Java