@@ -51,7 +51,7 @@ class InProcessResolverTest {
51
51
public void connectorSetup (){
52
52
// given
53
53
FlagdOptions forGrpcOptions =
54
- FlagdOptions .builder ().resolverType (Config .Resolver .IN_PROCESS ).host ("localhost" ).port (8080 ).build ();
54
+ FlagdOptions .builder ().resolverType (Config .Resolver .IN_PROCESS ).host ("localhost" ).port (8080 ).build ();
55
55
FlagdOptions forOfflineOptions =
56
56
FlagdOptions .builder ().resolverType (Config .Resolver .IN_PROCESS ).offlineFlagSourcePath ("path" ).build ();
57
57
FlagdOptions forCustomConnectorOptions =
@@ -69,11 +69,10 @@ public void eventHandling() throws Throwable {
69
69
// note - queues with adequate capacity
70
70
final BlockingQueue <StorageState > sender = new LinkedBlockingQueue <>(5 );
71
71
final BlockingQueue <ProviderState > receiver = new LinkedBlockingQueue <>(5 );
72
+ final BlockingQueue <Map <String ,FeatureFlag >> updateFlags = new LinkedBlockingQueue <>(5 );
72
73
73
74
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (new HashMap <>(), sender ),
74
- providerState -> {
75
- receiver .offer (providerState );
76
- });
75
+ providerState -> receiver .offer (providerState ), changedFlags -> updateFlags .offer (changedFlags ));
77
76
78
77
// when - init and emit events
79
78
Thread initThread = new Thread (() -> {
@@ -107,7 +106,7 @@ public void simpleBooleanResolving() throws Exception {
107
106
flagMap .put ("booleanFlag" , BOOLEAN_FLAG );
108
107
109
108
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
110
- });
109
+ }, updatedFeatureFlags -> {} );
111
110
112
111
// when
113
112
ProviderEvaluation <Boolean > providerEvaluation = inProcessResolver .booleanEvaluation ("booleanFlag" , false ,
@@ -126,7 +125,7 @@ public void simpleDoubleResolving() throws Exception {
126
125
flagMap .put ("doubleFlag" , DOUBLE_FLAG );
127
126
128
127
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
129
- });
128
+ }, updatedFeatureFlags -> {} );
130
129
131
130
// when
132
131
ProviderEvaluation <Double > providerEvaluation = inProcessResolver .doubleEvaluation ("doubleFlag" , 0d ,
@@ -145,7 +144,7 @@ public void fetchIntegerAsDouble() throws Exception {
145
144
flagMap .put ("doubleFlag" , DOUBLE_FLAG );
146
145
147
146
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
148
- });
147
+ }, updatedFeatureFlags -> {} );
149
148
150
149
// when
151
150
ProviderEvaluation <Integer > providerEvaluation = inProcessResolver .integerEvaluation ("doubleFlag" , 0 ,
@@ -164,7 +163,7 @@ public void fetchDoubleAsInt() throws Exception {
164
163
flagMap .put ("integerFlag" , INT_FLAG );
165
164
166
165
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
167
- });
166
+ }, updatedFeatureFlags -> {} );
168
167
169
168
// when
170
169
ProviderEvaluation <Double > providerEvaluation = inProcessResolver .doubleEvaluation ("integerFlag" , 0d ,
@@ -183,7 +182,7 @@ public void simpleIntResolving() throws Exception {
183
182
flagMap .put ("integerFlag" , INT_FLAG );
184
183
185
184
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
186
- });
185
+ }, updatedFeatureFlags -> {} );
187
186
188
187
// when
189
188
ProviderEvaluation <Integer > providerEvaluation = inProcessResolver .integerEvaluation ("integerFlag" , 0 ,
@@ -202,7 +201,7 @@ public void simpleObjectResolving() throws Exception {
202
201
flagMap .put ("objectFlag" , OBJECT_FLAG );
203
202
204
203
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
205
- });
204
+ }, updatedFeatureFlags -> {} );
206
205
207
206
Map <String , Object > typeDefault = new HashMap <>();
208
207
typeDefault .put ("key" , "0164" );
@@ -228,7 +227,7 @@ public void missingFlag() throws Exception {
228
227
final Map <String , FeatureFlag > flagMap = new HashMap <>();
229
228
230
229
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
231
- });
230
+ }, updatedFeatureFlags -> {} );
232
231
233
232
// when/then
234
233
assertThrows (FlagNotFoundError .class , () -> {
@@ -244,7 +243,7 @@ public void disabledFlag() throws Exception {
244
243
flagMap .put ("disabledFlag" , DISABLED_FLAG );
245
244
246
245
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
247
- });
246
+ }, updatedFeatureFlags -> {} );
248
247
249
248
// when/then
250
249
assertThrows (FlagNotFoundError .class , () -> {
@@ -259,7 +258,7 @@ public void variantMismatchFlag() throws Exception {
259
258
flagMap .put ("mismatchFlag" , VARIANT_MISMATCH_FLAG );
260
259
261
260
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
262
- });
261
+ }, updatedFeatureFlags -> {} );
263
262
264
263
// when/then
265
264
assertThrows (TypeMismatchError .class , () -> {
@@ -274,7 +273,7 @@ public void typeMismatchEvaluation() throws Exception {
274
273
flagMap .put ("stringFlag" , BOOLEAN_FLAG );
275
274
276
275
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
277
- });
276
+ }, updatedFeatureFlags -> {} );
278
277
279
278
// when/then
280
279
assertThrows (TypeMismatchError .class , () -> {
@@ -289,7 +288,7 @@ public void booleanShorthandEvaluation() throws Exception {
289
288
flagMap .put ("shorthand" , FLAG_WIH_SHORTHAND_TARGETING );
290
289
291
290
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
292
- });
291
+ }, updatedFeatureFlags -> {} );
293
292
294
293
ProviderEvaluation <Boolean > providerEvaluation = inProcessResolver .booleanEvaluation ("shorthand" , false ,
295
294
new ImmutableContext ());
@@ -307,7 +306,7 @@ public void targetingMatchedEvaluationFlag() throws Exception {
307
306
flagMap .put ("stringFlag" , FLAG_WIH_IF_IN_TARGET );
308
307
309
308
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
310
- });
309
+ }, updatedFeatureFlags -> {} );
311
310
312
311
// when
313
312
ProviderEvaluation <String > providerEvaluation = inProcessResolver .stringEvaluation ("stringFlag" , "loopAlg" ,
@@ -326,7 +325,7 @@ public void targetingUnmatchedEvaluationFlag() throws Exception {
326
325
flagMap .put ("stringFlag" , FLAG_WIH_IF_IN_TARGET );
327
326
328
327
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
329
- });
328
+ }, updatedFeatureFlags -> {} );
330
329
331
330
// when
332
331
ProviderEvaluation <String > providerEvaluation = inProcessResolver .stringEvaluation ("stringFlag" , "loopAlg" ,
@@ -345,7 +344,7 @@ public void explicitTargetingKeyHandling() throws NoSuchFieldException, IllegalA
345
344
flagMap .put ("stringFlag" , FLAG_WITH_TARGETING_KEY );
346
345
347
346
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
348
- });
347
+ }, updatedFeatureFlags -> {} );
349
348
350
349
// when
351
350
ProviderEvaluation <String > providerEvaluation =
@@ -364,7 +363,7 @@ public void targetingErrorEvaluationFlag() throws Exception {
364
363
flagMap .put ("targetingErrorFlag" , FLAG_WIH_INVALID_TARGET );
365
364
366
365
InProcessResolver inProcessResolver = getInProcessResolverWth (new MockStorage (flagMap ), providerState -> {
367
- });
366
+ }, updatedFeatureFlags -> {} );
368
367
369
368
// when/then
370
369
assertThrows (ParseError .class , () -> {
@@ -396,17 +395,18 @@ public void validateMetadataInEvaluationResult() throws Exception {
396
395
private InProcessResolver getInProcessResolverWth (final FlagdOptions options , final MockStorage storage )
397
396
throws NoSuchFieldException , IllegalAccessException {
398
397
399
- final InProcessResolver resolver = new InProcessResolver (options , providerState -> {});
398
+ final InProcessResolver resolver = new InProcessResolver (options , providerState -> {}, changedFlag -> {} );
400
399
return injectFlagStore (resolver , storage );
401
400
}
402
401
403
402
404
403
private InProcessResolver getInProcessResolverWth (final MockStorage storage ,
405
- final Consumer <ProviderState > stateConsumer )
404
+ final Consumer <ProviderState > stateConsumer ,
405
+ final Consumer <Map <String ,FeatureFlag >> updatedFlagsConsumer )
406
406
throws NoSuchFieldException , IllegalAccessException {
407
407
408
408
final InProcessResolver resolver = new InProcessResolver (
409
- FlagdOptions .builder ().deadline (1000 ).build (), stateConsumer );
409
+ FlagdOptions .builder ().deadline (1000 ).build (), stateConsumer , updatedFlagsConsumer );
410
410
return injectFlagStore (resolver , storage );
411
411
}
412
412
0 commit comments