From 19802bd26cb7581e231dfe8c0333c580dcd24669 Mon Sep 17 00:00:00 2001 From: Justin Abrahms Date: Fri, 22 Apr 2022 15:31:54 -0700 Subject: [PATCH] Validate error flow for broken providers --- .../java/javasdk/DeveloperExperienceTest.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/src/test/java/javasdk/DeveloperExperienceTest.java b/lib/src/test/java/javasdk/DeveloperExperienceTest.java index 7126c70d..c41691f9 100644 --- a/lib/src/test/java/javasdk/DeveloperExperienceTest.java +++ b/lib/src/test/java/javasdk/DeveloperExperienceTest.java @@ -1,8 +1,8 @@ package javasdk; +import javasdk.exceptions.ParseError; import org.junit.jupiter.api.Test; import org.mockito.Mockito; -import org.mockito.internal.matchers.Any; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -10,6 +10,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +@SuppressWarnings("unchecked") public class DeveloperExperienceTest { @Test public void simpleBooleanFlag() { OpenFeatureAPI api = OpenFeatureAPI.getInstance(); @@ -20,7 +21,7 @@ public class DeveloperExperienceTest { } @Test public void clientHooks() { - Hook exampleHook = Mockito.mock(Hook.class); + Hook exampleHook = (Hook) Mockito.mock(Hook.class); OpenFeatureAPI api = OpenFeatureAPI.getInstance(); api.setProvider(new NoOpProvider()); @@ -32,8 +33,8 @@ public class DeveloperExperienceTest { } @Test public void evalHooks() { - Hook clientHook = Mockito.mock(Hook.class); - Hook evalHook = Mockito.mock(Hook.class); + Hook clientHook = (Hook) Mockito.mock(Hook.class); + Hook evalHook = (Hook) Mockito.mock(Hook.class); OpenFeatureAPI api = OpenFeatureAPI.getInstance(); api.setProvider(new NoOpProvider()); @@ -45,4 +46,22 @@ public class DeveloperExperienceTest { verify(evalHook, times(1)).afterAll(any()); assertEquals(false, retval); } + + @Test public void brokenProvider() { + OpenFeatureAPI api = OpenFeatureAPI.getInstance(); + api.setProvider(new FeatureProvider() { + @Override + public ProviderEvaluation getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) { + throw new ParseError(); + } + @Override public String getName() { return null; } + @Override public ProviderEvaluation getStringEvaluation(String key, String defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) { return null; } + @Override public ProviderEvaluation getNumberEvaluation(String key, Long defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {return null;} + }); + Client client = api.getClient(); + FlagEvaluationDetails retval = client.getBooleanDetails("mykey", false); + assertEquals(ErrorCode.PARSE_ERROR, retval.getErrorCode()); + assertEquals(Reason.ERROR, retval.getReason()); + assertEquals(false, retval.getValue()); + } }