Skip to content

Commit 847fb5d

Browse files
committed
Fixed test_impressions.py
1 parent 0cb08b4 commit 847fb5d

File tree

1 file changed

+55
-50
lines changed

1 file changed

+55
-50
lines changed

tests/engine/test_impressions.py

Lines changed: 55 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from splitio.engine.strategies.strategy_optimized_mode import StrategyOptimizedMode
77
from splitio.models.impressions import Impression
88
from splitio.client.listener import ImpressionListenerWrapper
9-
import pytest
109

1110
def utctime_ms_reimplement():
1211
"""Re-implementation of utctime_ms to avoid conflicts with mock/patching."""
@@ -100,8 +99,8 @@ def test_standalone_optimized(self, mocker):
10099
utc_time_mock.return_value = utc_now
101100
mocker.patch('splitio.util.utctime_ms', new=utc_time_mock)
102101

103-
manager = Manager() # no listener
104-
assert manager._counter is not None
102+
manager = Manager(None, StrategyOptimizedMode(Counter())) # no listener
103+
assert manager._strategy._counter is not None
105104
assert manager._strategy._observer is not None
106105
assert manager._listener is None
107106
assert isinstance(manager._strategy, StrategyOptimizedMode)
@@ -116,7 +115,7 @@ def test_standalone_optimized(self, mocker):
116115
Impression('k1', 'f2', 'on', 'l1', 123, None, utc_now-3)]
117116

118117
assert [Counter.CountPerFeature(k.feature, k.timeframe, v)
119-
for (k, v) in manager._counter._data.items()] == [
118+
for (k, v) in manager._strategy._counter._data.items()] == [
120119
Counter.CountPerFeature('f1', truncate_time(utc_now-3), 1),
121120
Counter.CountPerFeature('f2', truncate_time(utc_now-3), 1)]
122121

@@ -146,9 +145,9 @@ def test_standalone_optimized(self, mocker):
146145
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2, old_utc-1)]
147146

148147
assert len(manager._strategy._observer._cache._data) == 3 # distinct impressions seen
149-
assert len(manager._counter._data) == 3 # 2 distinct features. 1 seen in 2 different timeframes
148+
assert len(manager._strategy._counter._data) == 3 # 2 distinct features. 1 seen in 2 different timeframes
150149

151-
assert set(manager._counter.pop_all()) == set([
150+
assert set(manager._strategy._counter.pop_all()) == set([
152151
Counter.CountPerFeature('f1', truncate_time(old_utc), 3),
153152
Counter.CountPerFeature('f2', truncate_time(old_utc), 1),
154153
Counter.CountPerFeature('f1', truncate_time(utc_now), 2)
@@ -163,8 +162,7 @@ def test_standalone_debug(self, mocker):
163162
utc_time_mock.return_value = utc_now
164163
mocker.patch('splitio.util.utctime_ms', new=utc_time_mock)
165164

166-
manager = Manager(ImpressionsMode.DEBUG) # no listener
167-
assert manager.get_counts() == []
165+
manager = Manager(None, StrategyDebugMode()) # no listener
168166
assert manager._strategy._observer is not None
169167
assert manager._listener is None
170168
assert isinstance(manager._strategy, StrategyDebugMode)
@@ -213,9 +211,9 @@ def test_non_standalone_optimized(self, mocker):
213211
utc_time_mock.return_value = utc_now
214212
mocker.patch('splitio.util.utctime_ms', new=utc_time_mock)
215213

216-
manager = Manager(ImpressionsMode.OPTIMIZED, False) # no listener
217-
assert manager._counter is None
218-
assert manager._strategy._observer is None
214+
manager = Manager(None, StrategyOptimizedMode(Counter())) # no listener
215+
assert manager._strategy._counter is not None
216+
assert manager._strategy._observer is not None
219217
assert manager._listener is None
220218
assert isinstance(manager._strategy, StrategyOptimizedMode)
221219

@@ -227,19 +225,26 @@ def test_non_standalone_optimized(self, mocker):
227225
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-3),
228226
Impression('k1', 'f2', 'on', 'l1', 123, None, utc_now-3)]
229227

230-
# Tracking the same impression a ms later should not be empty
228+
assert [Counter.CountPerFeature(k.feature, k.timeframe, v)
229+
for (k, v) in manager._strategy._counter._data.items()] == [
230+
Counter.CountPerFeature('f1', truncate_time(utc_now-3), 1),
231+
Counter.CountPerFeature('f2', truncate_time(utc_now-3), 1)]
232+
233+
# Tracking the same impression a ms later should be empty
231234
imps = manager.process_impressions([
232235
(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
233236
])
234-
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2)]
237+
assert imps == []
235238

236239
# Tracking a in impression with a different key makes it to the queue
237240
imps = manager.process_impressions([
238241
(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-1), None)
239242
])
240243
assert imps == [Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-1)]
241244

245+
242246
# Advance the perceived clock one hour
247+
old_utc = utc_now # save it to compare captured impressions
243248
utc_now += 3600 * 1000
244249
utc_time_mock.return_value = utc_now
245250

@@ -248,8 +253,8 @@ def test_non_standalone_optimized(self, mocker):
248253
(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1), None),
249254
(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
250255
])
251-
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1),
252-
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2)]
256+
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1, old_utc-3),
257+
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2, old_utc-1)]
253258

254259
def test_non_standalone_debug(self, mocker):
255260
"""Test impressions manager in optimized mode with sdk in standalone mode."""
@@ -260,10 +265,9 @@ def test_non_standalone_debug(self, mocker):
260265
utc_time_mock.return_value = utc_now
261266
mocker.patch('splitio.util.utctime_ms', new=utc_time_mock)
262267

263-
manager = Manager(ImpressionsMode.DEBUG, False) # no listener
264-
assert manager.get_counts() == []
265-
assert manager._strategy._observer is None
268+
manager = Manager(None, StrategyDebugMode()) # no listener
266269
assert manager._listener is None
270+
assert manager._strategy._observer is not None
267271
assert isinstance(manager._strategy, StrategyDebugMode)
268272

269273
# An impression that hasn't happened in the last hour (pt = None) should be tracked
@@ -278,7 +282,7 @@ def test_non_standalone_debug(self, mocker):
278282
imps = manager.process_impressions([
279283
(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
280284
])
281-
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2)]
285+
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2, utc_now-3)]
282286

283287
# Tracking a in impression with a different key makes it to the queue
284288
imps = manager.process_impressions([
@@ -287,6 +291,7 @@ def test_non_standalone_debug(self, mocker):
287291
assert imps == [Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-1)]
288292

289293
# Advance the perceived clock one hour
294+
old_utc = utc_now # save it to compare captured impressions
290295
utc_now += 3600 * 1000
291296
utc_time_mock.return_value = utc_now
292297

@@ -295,8 +300,8 @@ def test_non_standalone_debug(self, mocker):
295300
(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1), None),
296301
(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
297302
])
298-
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1),
299-
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2)]
303+
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1, old_utc-3),
304+
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2, old_utc-1)]
300305

301306
def test_standalone_optimized_listener(self, mocker):
302307
"""Test impressions manager in optimized mode with sdk in standalone mode."""
@@ -308,9 +313,8 @@ def test_standalone_optimized_listener(self, mocker):
308313
mocker.patch('splitio.util.utctime_ms', new=utc_time_mock)
309314

310315
listener = mocker.Mock(spec=ImpressionListenerWrapper)
311-
312-
manager = Manager(listener=listener) # no listener
313-
assert manager._counter is not None
316+
manager = Manager(listener, StrategyOptimizedMode(Counter()))
317+
assert manager._strategy._counter is not None
314318
assert manager._strategy._observer is not None
315319
assert manager._listener is not None
316320
assert isinstance(manager._strategy, StrategyOptimizedMode)
@@ -323,7 +327,7 @@ def test_standalone_optimized_listener(self, mocker):
323327
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-3),
324328
Impression('k1', 'f2', 'on', 'l1', 123, None, utc_now-3)]
325329
assert [Counter.CountPerFeature(k.feature, k.timeframe, v)
326-
for (k, v) in manager._counter._data.items()] == [
330+
for (k, v) in manager._strategy._counter._data.items()] == [
327331
Counter.CountPerFeature('f1', truncate_time(utc_now-3), 1),
328332
Counter.CountPerFeature('f2', truncate_time(utc_now-3), 1)]
329333

@@ -353,9 +357,9 @@ def test_standalone_optimized_listener(self, mocker):
353357
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2, old_utc-1)]
354358

355359
assert len(manager._strategy._observer._cache._data) == 3 # distinct impressions seen
356-
assert len(manager._counter._data) == 3 # 2 distinct features. 1 seen in 2 different timeframes
360+
assert len(manager._strategy._counter._data) == 3 # 2 distinct features. 1 seen in 2 different timeframes
357361

358-
assert set(manager._counter.pop_all()) == set([
362+
assert set(manager._strategy._counter.pop_all()) == set([
359363
Counter.CountPerFeature('f1', truncate_time(old_utc), 3),
360364
Counter.CountPerFeature('f2', truncate_time(old_utc), 1),
361365
Counter.CountPerFeature('f1', truncate_time(utc_now), 2)
@@ -381,9 +385,7 @@ def test_standalone_debug_listener(self, mocker):
381385

382386
imps = []
383387
listener = mocker.Mock(spec=ImpressionListenerWrapper)
384-
manager = Manager(ImpressionsMode.DEBUG, listener=listener)
385-
assert manager.get_counts() == []
386-
assert manager._strategy._observer is not None
388+
manager = Manager(listener, StrategyDebugMode())
387389
assert manager._listener is not None
388390
assert isinstance(manager._strategy, StrategyDebugMode)
389391

@@ -442,9 +444,9 @@ def test_non_standalone_optimized_listener(self, mocker):
442444

443445
imps = []
444446
listener = mocker.Mock(spec=ImpressionListenerWrapper)
445-
manager = Manager(ImpressionsMode.OPTIMIZED, False, listener) # no listener
446-
assert manager._counter is None
447-
assert manager._strategy._observer is None
447+
manager = Manager(listener, StrategyOptimizedMode(Counter()))
448+
assert manager._strategy._counter is not None
449+
assert manager._strategy._observer is not None
448450
assert manager._listener is not None
449451
assert isinstance(manager._strategy, StrategyOptimizedMode)
450452

@@ -456,19 +458,23 @@ def test_non_standalone_optimized_listener(self, mocker):
456458
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-3),
457459
Impression('k1', 'f2', 'on', 'l1', 123, None, utc_now-3)]
458460

459-
# Tracking the same impression a ms later should return the imp
461+
assert [Counter.CountPerFeature(k.feature, k.timeframe, v)
462+
for (k, v) in manager._strategy._counter._data.items()] == [
463+
Counter.CountPerFeature('f1', truncate_time(utc_now-3), 1),
464+
Counter.CountPerFeature('f2', truncate_time(utc_now-3), 1)]
465+
466+
# Tracking the same impression a ms later should be empty
460467
imps = manager.process_impressions([
461468
(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
462469
])
463-
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2)]
470+
assert imps == []
464471

465472
# Tracking a in impression with a different key makes it to the queue
466473
imps = manager.process_impressions([
467474
(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-1), None)
468475
])
469476
assert imps == [Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-1)]
470477

471-
# Advance the perceived clock one hour
472478
old_utc = utc_now # save it to compare captured impressions
473479
utc_now += 3600 * 1000
474480
utc_time_mock.return_value = utc_now
@@ -478,16 +484,17 @@ def test_non_standalone_optimized_listener(self, mocker):
478484
(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1), None),
479485
(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
480486
])
481-
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1),
482-
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2)]
487+
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1, old_utc-3),
488+
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2, old_utc-1)]
489+
483490

484491
assert listener.log_impression.mock_calls == [
485492
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, old_utc-3), None),
486493
mocker.call(Impression('k1', 'f2', 'on', 'l1', 123, None, old_utc-3), None),
487-
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, old_utc-2), None),
494+
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, old_utc-2, old_utc-3), None),
488495
mocker.call(Impression('k2', 'f1', 'on', 'l1', 123, None, old_utc-1), None),
489-
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1), None),
490-
mocker.call(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
496+
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1, old_utc-3), None),
497+
mocker.call(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2, old_utc-1), None)
491498
]
492499

493500
def test_non_standalone_debug_listener(self, mocker):
@@ -500,9 +507,7 @@ def test_non_standalone_debug_listener(self, mocker):
500507
mocker.patch('splitio.util.utctime_ms', new=utc_time_mock)
501508

502509
listener = mocker.Mock(spec=ImpressionListenerWrapper)
503-
manager = Manager(ImpressionsMode.DEBUG, False, listener) # no listener
504-
assert manager.get_counts() == []
505-
assert manager._strategy._observer is None
510+
manager = Manager(listener, StrategyDebugMode())
506511
assert manager._listener is not None
507512
assert isinstance(manager._strategy, StrategyDebugMode)
508513

@@ -518,7 +523,7 @@ def test_non_standalone_debug_listener(self, mocker):
518523
imps = manager.process_impressions([
519524
(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
520525
])
521-
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2)]
526+
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-2, utc_now-3)]
522527

523528
# Tracking a in impression with a different key makes it to the queue
524529
imps = manager.process_impressions([
@@ -536,14 +541,14 @@ def test_non_standalone_debug_listener(self, mocker):
536541
(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1), None),
537542
(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
538543
])
539-
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1),
540-
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2)]
544+
assert imps == [Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1, old_utc-3),
545+
Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2, old_utc-1)]
541546

542547
assert listener.log_impression.mock_calls == [
543548
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, old_utc-3), None),
544549
mocker.call(Impression('k1', 'f2', 'on', 'l1', 123, None, old_utc-3), None),
545-
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, old_utc-2), None),
550+
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, old_utc-2, old_utc-3), None),
546551
mocker.call(Impression('k2', 'f1', 'on', 'l1', 123, None, old_utc-1), None),
547-
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1), None),
548-
mocker.call(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2), None)
552+
mocker.call(Impression('k1', 'f1', 'on', 'l1', 123, None, utc_now-1, old_utc-3), None),
553+
mocker.call(Impression('k2', 'f1', 'on', 'l1', 123, None, utc_now-2, old_utc-1), None)
549554
]

0 commit comments

Comments
 (0)