1
1
/*
2
- * Copyright 2022, Optimizely
2
+ * Copyright 2022-2023 , Optimizely
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
@@ -155,12 +155,14 @@ public void Setup()
155
155
[ Test ]
156
156
public void ShouldLogAndDiscardEventsWhenEventManagerNotRunning ( )
157
157
{
158
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
158
+ var eventManager = new OdpEventManager . Builder ( ) .
159
159
WithOdpEventApiManager ( _mockApiManager . Object ) .
160
160
WithLogger ( _mockLogger . Object ) .
161
- Build ( startImmediately : false ) ;
161
+ WithAutoStart ( false ) .
162
+ Build ( ) ;
163
+ eventManager . UpdateSettings ( _odpConfig ) ;
162
164
163
- // since we've not called start () then...
165
+ // since we've not called Start () then...
164
166
eventManager . SendEvent ( _testEvents [ 0 ] ) ;
165
167
166
168
// ...we should get a notice after trying to send an event
@@ -173,11 +175,13 @@ public void ShouldLogAndDiscardEventsWhenEventManagerNotRunning()
173
175
public void ShouldLogAndDiscardEventsWhenEventManagerConfigNotReady ( )
174
176
{
175
177
var mockOdpConfig = new Mock < OdpConfig > ( API_KEY , API_HOST , _emptySegmentsToCheck ) ;
176
- mockOdpConfig . Setup ( o => o . IsReady ( ) ) . Returns ( false ) ;
177
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( mockOdpConfig . Object ) .
178
+ mockOdpConfig . Setup ( o => o . IsReady ( ) ) . Returns ( false ) ; // stay not ready
179
+ var eventManager = new OdpEventManager . Builder ( ) .
178
180
WithOdpEventApiManager ( _mockApiManager . Object ) .
179
181
WithLogger ( _mockLogger . Object ) .
180
- Build ( startImmediately : false ) ; // doing it manually in Act next
182
+ WithAutoStart ( false ) . // start manually in Act
183
+ Build ( ) ;
184
+ eventManager . UpdateSettings ( mockOdpConfig . Object ) ;
181
185
182
186
eventManager . Start ( ) ; // Log when Start() called
183
187
eventManager . SendEvent ( _testEvents [ 0 ] ) ; // Log when enqueue attempted
@@ -191,30 +195,33 @@ public void ShouldLogAndDiscardEventsWhenEventManagerConfigNotReady()
191
195
public void ShouldLogWhenOdpNotIntegratedAndIdentifyUserCalled ( )
192
196
{
193
197
var mockOdpConfig = new Mock < OdpConfig > ( API_KEY , API_HOST , _emptySegmentsToCheck ) ;
194
- mockOdpConfig . Setup ( o => o . IsReady ( ) ) . Returns ( false ) ;
195
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( mockOdpConfig . Object ) .
198
+ mockOdpConfig . Setup ( o => o . IsReady ( ) ) . Returns ( false ) ; // never ready
199
+ var eventManager = new OdpEventManager . Builder ( ) .
196
200
WithOdpEventApiManager ( _mockApiManager . Object ) .
197
201
WithLogger ( _mockLogger . Object ) .
198
- Build ( ) ;
202
+ Build ( ) ; // assumed AutoStart true; Logs 1x here
203
+ eventManager . UpdateSettings ( mockOdpConfig . Object ) ; // auto-start after update; Logs 1x here
199
204
200
- eventManager . IdentifyUser ( FS_USER_ID ) ;
205
+ eventManager . IdentifyUser ( FS_USER_ID ) ; // Logs 1x here too
201
206
202
207
_mockLogger . Verify (
203
208
l => l . Log ( LogLevel . WARN , Constants . ODP_NOT_INTEGRATED_MESSAGE ) ,
204
- Times . Exactly ( 2 ) ) ; // during Start() and SendEvent()
209
+ Times . Exactly ( 3 ) ) ; // during Start() and SendEvent()
205
210
}
206
211
207
212
[ Test ]
208
213
public void ShouldLogWhenOdpNotIntegratedAndStartCalled ( )
209
214
{
210
215
var mockOdpConfig = new Mock < OdpConfig > ( API_KEY , API_HOST , _emptySegmentsToCheck ) ;
211
- mockOdpConfig . Setup ( o => o . IsReady ( ) ) . Returns ( false ) ;
212
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( mockOdpConfig . Object ) .
216
+ mockOdpConfig . Setup ( o => o . IsReady ( ) ) . Returns ( false ) ; // since never ready
217
+ var eventManager = new OdpEventManager . Builder ( ) .
213
218
WithOdpEventApiManager ( _mockApiManager . Object ) .
214
219
WithLogger ( _mockLogger . Object ) .
215
- Build ( startImmediately : false ) ; // doing it manually in Act next
220
+ WithAutoStart ( false ) . // doing it manually in Act next
221
+ Build ( ) ;
222
+ eventManager . UpdateSettings ( mockOdpConfig . Object ) ;
216
223
217
- eventManager . Start ( ) ;
224
+ eventManager . Start ( ) ; // Log 1x here too
218
225
219
226
_mockLogger . Verify ( l => l . Log ( LogLevel . WARN , Constants . ODP_NOT_INTEGRATED_MESSAGE ) ,
220
227
Times . Once ) ;
@@ -250,10 +257,11 @@ public void ShouldDiscardEventsWithInvalidData()
250
257
"key-3" , new DateTime ( )
251
258
} ,
252
259
} ) ;
253
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
260
+ var eventManager = new OdpEventManager . Builder ( ) .
254
261
WithOdpEventApiManager ( _mockApiManager . Object ) .
255
262
WithLogger ( _mockLogger . Object ) .
256
263
Build ( ) ;
264
+ eventManager . UpdateSettings ( _odpConfig ) ;
257
265
258
266
eventManager . SendEvent ( eventWithAnArray ) ;
259
267
eventManager . SendEvent ( eventWithADate ) ;
@@ -271,16 +279,17 @@ public void ShouldAddAdditionalInformationToEachEvent()
271
279
_mockApiManager . Setup ( api => api . SendEvents ( It . IsAny < string > ( ) , It . IsAny < string > ( ) ,
272
280
Capture . In ( eventsCollector ) ) ) .
273
281
Callback ( ( ) => cde . Signal ( ) ) ;
274
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
282
+ var eventManager = new OdpEventManager . Builder ( ) .
275
283
WithOdpEventApiManager ( _mockApiManager . Object ) .
276
284
WithLogger ( _mockLogger . Object ) .
277
285
WithEventQueue ( new BlockingCollection < object > ( 10 ) ) . // max capacity of 10
278
286
WithBatchSize ( 10 ) .
279
287
WithFlushInterval ( TimeSpan . FromMilliseconds ( 100 ) ) .
280
288
Build ( ) ;
289
+ eventManager . UpdateSettings ( _odpConfig ) ;
281
290
282
291
eventManager . SendEvent ( _testEvents [ 0 ] ) ;
283
- cde . Wait ( ) ;
292
+ cde . Wait ( MAX_COUNT_DOWN_EVENT_WAIT_MS ) ;
284
293
285
294
var eventsSentToApi = eventsCollector . FirstOrDefault ( ) ;
286
295
var actualEvent = eventsSentToApi ? . FirstOrDefault ( ) ;
@@ -304,13 +313,14 @@ public void ShouldAddAdditionalInformationToEachEvent()
304
313
[ Test ]
305
314
public void ShouldAttemptToFlushAnEmptyQueueAtFlushInterval ( )
306
315
{
307
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
316
+ var eventManager = new OdpEventManager . Builder ( ) .
308
317
WithOdpEventApiManager ( _mockApiManager . Object ) .
309
318
WithLogger ( _mockLogger . Object ) .
310
319
WithEventQueue ( new BlockingCollection < object > ( 10 ) ) .
311
320
WithBatchSize ( 10 ) .
312
321
WithFlushInterval ( TimeSpan . FromMilliseconds ( 100 ) ) .
313
322
Build ( ) ;
323
+ eventManager . UpdateSettings ( _odpConfig ) ;
314
324
315
325
// do not add events to the queue, but allow for
316
326
// at least 3 flush intervals executions
@@ -328,13 +338,14 @@ public void ShouldDispatchEventsInCorrectNumberOfBatches()
328
338
a . SendEvents ( It . IsAny < string > ( ) , It . IsAny < string > ( ) ,
329
339
It . IsAny < List < OdpEvent > > ( ) ) ) .
330
340
Returns ( false ) ;
331
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
341
+ var eventManager = new OdpEventManager . Builder ( ) .
332
342
WithOdpEventApiManager ( _mockApiManager . Object ) .
333
343
WithLogger ( _mockLogger . Object ) .
334
344
WithEventQueue ( new BlockingCollection < object > ( 10 ) ) .
335
345
WithBatchSize ( 10 ) .
336
346
WithFlushInterval ( TimeSpan . FromMilliseconds ( 500 ) ) .
337
347
Build ( ) ;
348
+ eventManager . UpdateSettings ( _odpConfig ) ;
338
349
339
350
for ( int i = 0 ; i < 25 ; i ++ )
340
351
{
@@ -362,12 +373,13 @@ public void ShouldDispatchEventsWithCorrectPayload()
362
373
Capture . In ( eventCollector ) ) ) .
363
374
Callback ( ( ) => cde . Signal ( ) ) .
364
375
Returns ( false ) ;
365
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
376
+ var eventManager = new OdpEventManager . Builder ( ) .
366
377
WithOdpEventApiManager ( _mockApiManager . Object ) .
367
378
WithLogger ( _mockLogger . Object ) .
368
379
WithBatchSize ( 10 ) .
369
380
WithFlushInterval ( TimeSpan . FromSeconds ( 1 ) ) .
370
381
Build ( ) ;
382
+ eventManager . UpdateSettings ( _odpConfig ) ;
371
383
372
384
_testEvents . ForEach ( e => eventManager . SendEvent ( e ) ) ;
373
385
cde . Wait ( MAX_COUNT_DOWN_EVENT_WAIT_MS ) ;
@@ -395,13 +407,14 @@ public void ShouldRetryFailedEvents()
395
407
It . IsAny < List < OdpEvent > > ( ) ) ) .
396
408
Callback ( ( ) => cde . Signal ( ) ) .
397
409
Returns ( true ) ;
398
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
410
+ var eventManager = new OdpEventManager . Builder ( ) .
399
411
WithOdpEventApiManager ( _mockApiManager . Object ) .
400
412
WithLogger ( _mockLogger . Object ) .
401
413
WithEventQueue ( new BlockingCollection < object > ( 10 ) ) .
402
414
WithBatchSize ( 2 ) .
403
415
WithFlushInterval ( TimeSpan . FromMilliseconds ( 100 ) ) .
404
416
Build ( ) ;
417
+ eventManager . UpdateSettings ( _odpConfig ) ;
405
418
406
419
for ( int i = 0 ; i < 4 ; i ++ )
407
420
{
@@ -419,13 +432,14 @@ public void ShouldRetryFailedEvents()
419
432
[ Test ]
420
433
public void ShouldFlushAllScheduledEventsBeforeStopping ( )
421
434
{
422
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
435
+ var eventManager = new OdpEventManager . Builder ( ) .
423
436
WithOdpEventApiManager ( _mockApiManager . Object ) .
424
437
WithLogger ( _mockLogger . Object ) .
425
438
WithEventQueue ( new BlockingCollection < object > ( 100 ) ) .
426
439
WithBatchSize ( 2 ) . // small batch size
427
440
WithFlushInterval ( TimeSpan . FromSeconds ( 2 ) ) . // long flush interval
428
441
Build ( ) ;
442
+ eventManager . UpdateSettings ( _odpConfig ) ;
429
443
430
444
for ( int i = 0 ; i < 25 ; i ++ )
431
445
{
@@ -453,12 +467,13 @@ public void ShouldPrepareCorrectPayloadForIdentifyUser()
453
467
_mockApiManager . Setup ( api => api . SendEvents ( It . IsAny < string > ( ) , It . IsAny < string > ( ) ,
454
468
Capture . In ( eventsCollector ) ) ) .
455
469
Callback ( ( ) => cde . Signal ( ) ) ;
456
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
470
+ var eventManager = new OdpEventManager . Builder ( ) .
457
471
WithOdpEventApiManager ( _mockApiManager . Object ) .
458
472
WithLogger ( _mockLogger . Object ) .
459
473
WithEventQueue ( new BlockingCollection < object > ( 1 ) ) .
460
474
WithBatchSize ( 1 ) .
461
475
Build ( ) ;
476
+ eventManager . UpdateSettings ( _odpConfig ) ;
462
477
463
478
eventManager . IdentifyUser ( USER_ID ) ;
464
479
cde . Wait ( MAX_COUNT_DOWN_EVENT_WAIT_MS ) ;
@@ -488,10 +503,11 @@ public void ShouldApplyUpdatedOdpConfigurationWhenAvailable()
488
503
"1-item-cart" ,
489
504
} ;
490
505
var differentOdpConfig = new OdpConfig ( apiKey , apiHost , segmentsToCheck ) ;
491
- var eventManager = new OdpEventManager . Builder ( ) . WithOdpConfig ( _odpConfig ) .
506
+ var eventManager = new OdpEventManager . Builder ( ) .
492
507
WithOdpEventApiManager ( _mockApiManager . Object ) .
493
508
WithLogger ( _mockLogger . Object ) .
494
509
Build ( ) ;
510
+ eventManager . UpdateSettings ( _odpConfig ) ;
495
511
496
512
eventManager . UpdateSettings ( differentOdpConfig ) ;
497
513
0 commit comments