|
1 | 1 | package dev.openfeature.contrib.providers.flagd.resolver.process;
|
2 | 2 |
|
3 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.BOOLEAN_FLAG; |
4 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.DISABLED_FLAG; |
5 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.DOUBLE_FLAG; |
6 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.FLAG_WIH_IF_IN_TARGET; |
7 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.FLAG_WIH_INVALID_TARGET; |
8 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.FLAG_WIH_SHORTHAND_TARGETING; |
9 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.INT_FLAG; |
10 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.OBJECT_FLAG; |
11 |
| -import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.VARIANT_MISMATCH_FLAG; |
12 |
| -import static org.junit.jupiter.api.Assertions.assertEquals; |
13 |
| -import static org.junit.jupiter.api.Assertions.assertThrows; |
14 |
| -import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively; |
15 |
| - |
16 |
| -import java.lang.reflect.Field; |
17 |
| -import java.time.Duration; |
18 |
| -import java.util.HashMap; |
19 |
| -import java.util.Map; |
20 |
| -import java.util.concurrent.BlockingQueue; |
21 |
| -import java.util.concurrent.LinkedBlockingQueue; |
22 |
| -import java.util.concurrent.TimeUnit; |
23 |
| -import java.util.function.Consumer; |
24 |
| - |
25 |
| -import org.junit.jupiter.api.Assertions; |
26 |
| -import org.junit.jupiter.api.Test; |
27 |
| - |
28 | 3 | import dev.openfeature.contrib.providers.flagd.FlagdOptions;
|
29 | 4 | import dev.openfeature.contrib.providers.flagd.resolver.process.model.FeatureFlag;
|
30 | 5 | import dev.openfeature.contrib.providers.flagd.resolver.process.storage.StorageState;
|
31 | 6 | import dev.openfeature.sdk.ImmutableContext;
|
| 7 | +import dev.openfeature.sdk.ImmutableMetadata; |
32 | 8 | import dev.openfeature.sdk.MutableContext;
|
33 | 9 | import dev.openfeature.sdk.ProviderEvaluation;
|
34 | 10 | import dev.openfeature.sdk.ProviderState;
|
|
37 | 13 | import dev.openfeature.sdk.exceptions.FlagNotFoundError;
|
38 | 14 | import dev.openfeature.sdk.exceptions.ParseError;
|
39 | 15 | import dev.openfeature.sdk.exceptions.TypeMismatchError;
|
| 16 | +import org.junit.jupiter.api.Assertions; |
| 17 | +import org.junit.jupiter.api.Test; |
| 18 | + |
| 19 | +import java.lang.reflect.Field; |
| 20 | +import java.time.Duration; |
| 21 | +import java.util.HashMap; |
| 22 | +import java.util.Map; |
| 23 | +import java.util.concurrent.BlockingQueue; |
| 24 | +import java.util.concurrent.LinkedBlockingQueue; |
| 25 | +import java.util.concurrent.TimeUnit; |
| 26 | +import java.util.function.Consumer; |
| 27 | + |
| 28 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.BOOLEAN_FLAG; |
| 29 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.DISABLED_FLAG; |
| 30 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.DOUBLE_FLAG; |
| 31 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.FLAG_WIH_IF_IN_TARGET; |
| 32 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.FLAG_WIH_INVALID_TARGET; |
| 33 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.FLAG_WIH_SHORTHAND_TARGETING; |
| 34 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.INT_FLAG; |
| 35 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.OBJECT_FLAG; |
| 36 | +import static dev.openfeature.contrib.providers.flagd.resolver.process.MockFlags.VARIANT_MISMATCH_FLAG; |
| 37 | +import static org.junit.jupiter.api.Assertions.assertEquals; |
| 38 | +import static org.junit.jupiter.api.Assertions.assertNotNull; |
| 39 | +import static org.junit.jupiter.api.Assertions.assertThrows; |
| 40 | +import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively; |
40 | 41 |
|
41 | 42 | class InProcessResolverTest {
|
42 | 43 |
|
@@ -330,13 +331,50 @@ public void targetingErrorEvaluationFlag() throws Exception {
|
330 | 331 | });
|
331 | 332 | }
|
332 | 333 |
|
333 |
| - private InProcessResolver getInProcessResolverWth(final MockStorage storage, Consumer<ProviderState> stateConsumer) |
| 334 | + @Test |
| 335 | + public void validateMetadataInEvaluationResult() throws Exception { |
| 336 | + // given |
| 337 | + final String scope = "appName=myApp"; |
| 338 | + final Map<String, FeatureFlag> flagMap = new HashMap<>(); |
| 339 | + flagMap.put("booleanFlag", BOOLEAN_FLAG); |
| 340 | + |
| 341 | + InProcessResolver inProcessResolver = getInProcessResolverWth( |
| 342 | + FlagdOptions.builder().selector(scope).build(), |
| 343 | + new MockStorage(flagMap)); |
| 344 | + |
| 345 | + // when |
| 346 | + ProviderEvaluation<Boolean> providerEvaluation = inProcessResolver.booleanEvaluation("booleanFlag", false, |
| 347 | + new ImmutableContext()); |
| 348 | + |
| 349 | + // then |
| 350 | + final ImmutableMetadata metadata = providerEvaluation.getFlagMetadata(); |
| 351 | + assertNotNull(metadata); |
| 352 | + assertEquals(scope, metadata.getString("scope")); |
| 353 | + } |
| 354 | + |
| 355 | + private InProcessResolver getInProcessResolverWth(final FlagdOptions options, final MockStorage storage) |
334 | 356 | throws NoSuchFieldException, IllegalAccessException {
|
335 |
| - Field flagStore = InProcessResolver.class.getDeclaredField("flagStore"); |
336 |
| - flagStore.setAccessible(true); |
337 | 357 |
|
338 |
| - InProcessResolver resolver = new InProcessResolver(FlagdOptions.builder().deadline(1000).build(), |
339 |
| - stateConsumer); |
| 358 | + final InProcessResolver resolver = new InProcessResolver(options, providerState -> {}); |
| 359 | + return injectFlagStore(resolver, storage); |
| 360 | + } |
| 361 | + |
| 362 | + |
| 363 | + private InProcessResolver getInProcessResolverWth(final MockStorage storage, |
| 364 | + final Consumer<ProviderState> stateConsumer) |
| 365 | + throws NoSuchFieldException, IllegalAccessException { |
| 366 | + |
| 367 | + final InProcessResolver resolver = new InProcessResolver( |
| 368 | + FlagdOptions.builder().deadline(1000).build(), stateConsumer); |
| 369 | + return injectFlagStore(resolver, storage); |
| 370 | + } |
| 371 | + |
| 372 | + // helper to inject flagStore override |
| 373 | + private InProcessResolver injectFlagStore(final InProcessResolver resolver, final MockStorage storage) |
| 374 | + throws NoSuchFieldException, IllegalAccessException { |
| 375 | + |
| 376 | + final Field flagStore = InProcessResolver.class.getDeclaredField("flagStore"); |
| 377 | + flagStore.setAccessible(true); |
340 | 378 | flagStore.set(resolver, storage);
|
341 | 379 |
|
342 | 380 | return resolver;
|
|
0 commit comments