From 877f251d70ead5f3d1d256d5189315457f3bb269 Mon Sep 17 00:00:00 2001 From: Rahul Baradol Date: Fri, 11 Jul 2025 22:16:12 +0530 Subject: [PATCH 1/3] feat!: allowing null/missing default values Signed-off-by: Rahul Baradol --- .../flagd/resolver/process/InProcessResolver.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java index 032068945..593a6af2d 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java @@ -22,6 +22,7 @@ import dev.openfeature.sdk.ProviderEvent; import dev.openfeature.sdk.Reason; import dev.openfeature.sdk.Value; +import dev.openfeature.sdk.exceptions.FlagNotFoundError; import dev.openfeature.sdk.exceptions.ParseError; import dev.openfeature.sdk.exceptions.TypeMismatchError; import java.util.Map; @@ -203,6 +204,12 @@ private ProviderEvaluation resolve(Class type, String key, EvaluationC // check variant existence Object value = flag.getVariants().get(resolvedVariant); if (value == null) { + if (resolvedVariant.isEmpty()) { + String message = String.format("no default variant found in flag with key %s", key); + log.debug(message); + throw new FlagNotFoundError(message); + } + String message = String.format("variant %s not found in flag with key %s", resolvedVariant, key); log.debug(message); throw new TypeMismatchError(message); From 1da834f1c59398018d63474f078d69dd14e1335d Mon Sep 17 00:00:00 2001 From: Simon Schrottner Date: Wed, 23 Jul 2025 11:47:47 +0200 Subject: [PATCH 2/3] fixup: activating e2e tests for no-default Signed-off-by: Simon Schrottner --- .../contrib/providers/flagd/e2e/RunInProcessTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/e2e/RunInProcessTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/e2e/RunInProcessTest.java index a662b4441..3a1c33f03 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/e2e/RunInProcessTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/e2e/RunInProcessTest.java @@ -29,7 +29,7 @@ @ConfigurationParameter(key = GLUE_PROPERTY_NAME, value = "dev.openfeature.contrib.providers.flagd.e2e.steps") @ConfigurationParameter(key = OBJECT_FACTORY_PROPERTY_NAME, value = "io.cucumber.picocontainer.PicoFactory") @IncludeTags("in-process") -@ExcludeTags({"unixsocket", "targetURI", "no-default"}) +@ExcludeTags({"unixsocket", "targetURI"}) @Testcontainers @Isolated public class RunInProcessTest { From 2fab4e3f020ca6bb1b6131957793639020fa7729 Mon Sep 17 00:00:00 2001 From: Rahul Baradol Date: Sun, 27 Jul 2025 14:22:09 +0530 Subject: [PATCH 3/3] fix: variant existence logic for no default value Signed-off-by: Rahul Baradol --- .../flagd/resolver/process/InProcessResolver.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java index bee4a5964..86fbb8056 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/InProcessResolver.java @@ -22,7 +22,6 @@ import dev.openfeature.sdk.ProviderEvent; import dev.openfeature.sdk.Reason; import dev.openfeature.sdk.Value; -import dev.openfeature.sdk.exceptions.FlagNotFoundError; import dev.openfeature.sdk.exceptions.GeneralError; import dev.openfeature.sdk.exceptions.ParseError; import dev.openfeature.sdk.exceptions.TypeMismatchError; @@ -205,10 +204,13 @@ private ProviderEvaluation resolve(Class type, String key, EvaluationC // check variant existence Object value = flag.getVariants().get(resolvedVariant); if (value == null) { - if (resolvedVariant.isEmpty()) { - String message = String.format("no default variant found in flag with key %s", key); - log.debug(message); - throw new FlagNotFoundError(message); + if (resolvedVariant.isEmpty() && flag.getDefaultVariant().isEmpty()) { + return ProviderEvaluation.builder() + .reason(Reason.ERROR.toString()) + .errorCode(ErrorCode.FLAG_NOT_FOUND) + .errorMessage("Flag '" + key + "' has no default variant defined, will use code default") + .flagMetadata(getFlagMetadata(storageQueryResult)) + .build(); } String message = String.format("variant %s not found in flag with key %s", resolvedVariant, key);