Files
telecom-cdr-pipeline/tests/unit/test_batch.py

107 lines
1.9 KiB
Python

from datetime import datetime, timezone
from ipaddress import IPv4Address
from uuid import uuid4
from core.domain.models import NormalizedCDR
from core.worker.batch import (
BufferedCDR,
KafkaPosition,
MicroBatch,
)
def normalized_cdr(
raw_id: str,
) -> NormalizedCDR:
now = datetime.now(
timezone.utc
)
return NormalizedCDR(
cdr_id=uuid4(),
raw_id=raw_id,
msisdn="+19875551234",
imsi="310410998877665",
service_type="4G_DATA",
radio_access_type="LTE_4G",
cell_id="4021_8812",
bytes_uploaded=100,
bytes_downloaded=200,
total_bytes=300,
duration_seconds=300,
session_start_time=now,
session_end_time=now,
source_ip=IPv4Address(
"10.240.12.1"
),
)
def buffered_item(
raw_id: str,
offset: int,
) -> BufferedCDR:
return BufferedCDR(
cdr=normalized_cdr(raw_id),
original_payload={
"raw_id": raw_id,
},
position=KafkaPosition(
topic="cdr.raw",
partition=0,
offset=offset,
),
)
def test_batch_flushes_when_full() -> None:
batch = MicroBatch(
max_size=2,
flush_interval_seconds=10,
)
batch.add(
buffered_item(
raw_id="raw-1",
offset=1,
)
)
assert batch.is_full is False
batch.add(
buffered_item(
raw_id="raw-2",
offset=2,
)
)
assert batch.is_full is True
def test_batch_clear_resets_state() -> None:
batch = MicroBatch(
max_size=2,
flush_interval_seconds=10,
)
batch.add(
buffered_item(
raw_id="raw-1",
offset=1,
)
)
batch.clear()
assert batch.size == 0
assert batch.is_empty is True
assert batch.is_due() is False