-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathtest_telemetry_sync.py
More file actions
67 lines (58 loc) · 2.88 KB
/
Copy pathtest_telemetry_sync.py
File metadata and controls
67 lines (58 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""Impressions synchronization task test module."""
import pytest
import threading
import time
from splitio.api.client import HttpResponse
from splitio.tasks.telemetry_sync import TelemetrySyncTask, TelemetrySyncTaskAsync
from splitio.api.telemetry import TelemetryAPI, TelemetryAPIAsync
from splitio.sync.telemetry import TelemetrySynchronizer, TelemetrySynchronizerAsync, InMemoryTelemetrySubmitter, InMemoryTelemetrySubmitterAsync
from splitio.storage.inmemmory import InMemoryTelemetryStorage, InMemoryTelemetryStorageAsync
from splitio.engine.telemetry import TelemetryStorageConsumer, TelemetryStorageConsumerAsync
from splitio.optional.loaders import asyncio
class TelemetrySyncTaskTests(object):
"""Unique Keys Syncrhonization task test cases."""
def test_record_stats(self, mocker):
"""Test that the task works properly under normal circumstances."""
api = mocker.Mock(spec=TelemetryAPI)
api.record_stats.return_value = HttpResponse(200, '', {})
telemetry_storage = InMemoryTelemetryStorage()
telemetry_consumer = TelemetryStorageConsumer(telemetry_storage)
telemetry_submitter = InMemoryTelemetrySubmitter(telemetry_consumer, mocker.Mock(), mocker.Mock(), api)
def _build_stats():
return {}
telemetry_submitter._build_stats = _build_stats
telemetry_synchronizer = TelemetrySynchronizer(telemetry_submitter)
task = TelemetrySyncTask(telemetry_synchronizer.synchronize_stats, 1)
task.start()
time.sleep(2)
assert task.is_running()
assert len(api.record_stats.mock_calls) >= 1
stop_event = threading.Event()
task.stop(stop_event)
stop_event.wait(5)
assert stop_event.is_set()
class TelemetrySyncTaskAsyncTests(object):
"""Unique Keys Syncrhonization task test cases."""
@pytest.mark.asyncio
async def test_record_stats(self, mocker):
"""Test that the task works properly under normal circumstances."""
api = mocker.Mock(spec=TelemetryAPIAsync)
self.called = False
async def record_stats(stats):
self.called = True
return HttpResponse(200, '', {})
api.record_stats = record_stats
telemetry_storage = await InMemoryTelemetryStorageAsync.create()
telemetry_consumer = TelemetryStorageConsumerAsync(telemetry_storage)
telemetry_submitter = InMemoryTelemetrySubmitterAsync(telemetry_consumer, mocker.Mock(), mocker.Mock(), api)
async def _build_stats():
return {}
telemetry_submitter._build_stats = _build_stats
telemetry_synchronizer = TelemetrySynchronizerAsync(telemetry_submitter)
task = TelemetrySyncTaskAsync(telemetry_synchronizer.synchronize_stats, 1)
task.start()
await asyncio.sleep(2)
assert task.is_running()
assert self.called
await task.stop()
assert not task.is_running()