Skip to content

Commit 0a778ff

Browse files
author
Matias Melograno
committed
added unit test for recorder
1 parent cdfa7c9 commit 0a778ff

File tree

5 files changed

+54
-3
lines changed

5 files changed

+54
-3
lines changed

CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
8.3.2 (Nov XX, 2020)
2+
- Added RecordStats for supporting pipelined recording in redis when treatment call is made.
3+
14
8.3.1 (Nov 20, 2020)
25
- Fixed error handling when split server fails, so that it doesn't bring streaming down.
36
- Added SDK Metadata headers to split & segments API clients

splitio/recorder/recorder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ def record_treatment_stats(self, impressions, latency, operation):
7272
"""
7373
try:
7474
impressions = self._impressions_manager.process_impressions(impressions)
75-
self._impression_storage.put(impressions)
76-
self._telemetry_storage.inc_latency(operation, latency)
75+
if self._impression_storage.put(impressions):
76+
self._telemetry_storage.inc_latency(operation, latency)
7777
except Exception: # pylint: disable=broad-except
7878
_LOGGER.error('Error recording impressions and metrics')
7979
_LOGGER.debug('Error: ', exc_info=True)

splitio/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '8.3.1'
1+
__version__ = '8.3.2-rc1'

tests/recorder/__init__.py

Whitespace-only changes.

tests/recorder/test_recorder.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
"""Recorder unit tests."""
2+
3+
import pytest
4+
5+
from splitio.recorder.recorder import StandardRecorder, PipelinedRecorder
6+
from splitio.engine.impressions import Manager as ImpressionsManager
7+
from splitio.storage.inmemmory import TelemetryStorage, EventStorage, ImpressionStorage
8+
from splitio.storage.redis import TelemetryPipelinedStorage, ImpressionPipelinedStorage, EventStorage
9+
from splitio.storage.adapters.redis import RedisAdapter
10+
from splitio.models.impressions import Impression
11+
12+
13+
class StandardRecorderTests(object):
14+
"""StandardRecorderTests test cases."""
15+
16+
def test_standard_recorder(self, mocker):
17+
impressions = [
18+
Impression('k1', 'f1', 'on', 'l1', 123, None, None),
19+
Impression('k1', 'f2', 'on', 'l1', 123, None, None)
20+
]
21+
impmanager = mocker.Mock(spec=ImpressionsManager)
22+
impmanager.process_impressions.return_value = impressions
23+
telemetry = mocker.Mock(spec=TelemetryStorage)
24+
event = mocker.Mock(spec=EventStorage)
25+
impression = mocker.Mock(spec=ImpressionStorage)
26+
recorder = StandardRecorder(impmanager, telemetry, event, impression)
27+
recorder.record_treatment_stats(impressions, 1, 'some')
28+
29+
assert recorder._impression_storage.put.mock_calls[0][1][0] == impressions
30+
assert recorder._telemetry_storage.inc_latency.mock_calls == [mocker.call('some', 1)]
31+
32+
def test_pipelined_recorder(self, mocker):
33+
impressions = [
34+
Impression('k1', 'f1', 'on', 'l1', 123, None, None),
35+
Impression('k1', 'f2', 'on', 'l1', 123, None, None)
36+
]
37+
redis = mocker.Mock(spec=RedisAdapter)
38+
impmanager = mocker.Mock(spec=ImpressionsManager)
39+
impmanager.process_impressions.return_value = impressions
40+
telemetry = mocker.Mock(spec=TelemetryPipelinedStorage)
41+
event = mocker.Mock(spec=EventStorage)
42+
impression = mocker.Mock(spec=ImpressionPipelinedStorage)
43+
recorder = PipelinedRecorder(redis, impmanager, telemetry, event, impression)
44+
recorder.record_treatment_stats(impressions, 1, 'some')
45+
46+
assert recorder._impression_storage.add_impressions_to_pipe.mock_calls[0][1][0] == impressions
47+
assert recorder._telemetry_storage.add_latency_to_pipe.mock_calls[0][1][0] == 'some'
48+
assert recorder._telemetry_storage.add_latency_to_pipe.mock_calls[0][1][1] == 1

0 commit comments

Comments
 (0)