55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
from datetime import timedelta
|
|
from pathlib import Path
|
|
|
|
from sqlmodel import Session, SQLModel, create_engine, select
|
|
|
|
from app.models import TerminalMessageRaw, get_datetime_utc
|
|
from app.mqtt.archive_job import run_archive_once
|
|
from app.mqtt.repository import insert_raw_message
|
|
|
|
|
|
def _session() -> Session:
|
|
engine = create_engine("sqlite://")
|
|
SQLModel.metadata.create_all(engine)
|
|
return Session(engine)
|
|
|
|
|
|
def test_archive_writes_raw_bytes_and_manifest(tmp_path: Path) -> None:
|
|
with _session() as session:
|
|
current = get_datetime_utc()
|
|
old_ts = current - timedelta(days=91)
|
|
|
|
insert_raw_message(
|
|
session=session,
|
|
device_id="device-001",
|
|
topic="terminal/device-001/raw",
|
|
payload=b"abc",
|
|
qos=1,
|
|
retain=False,
|
|
received_at=old_ts,
|
|
)
|
|
insert_raw_message(
|
|
session=session,
|
|
device_id="device-001",
|
|
topic="terminal/device-001/raw",
|
|
payload=b"\x01\x02",
|
|
qos=1,
|
|
retain=False,
|
|
received_at=old_ts,
|
|
)
|
|
|
|
manifests = run_archive_once(
|
|
session=session,
|
|
archive_base_dir=tmp_path,
|
|
retention_days=90,
|
|
now=current,
|
|
)
|
|
|
|
assert len(manifests) == 1
|
|
archived_file = Path(manifests[0].file_path)
|
|
assert archived_file.exists()
|
|
assert archived_file.read_bytes() == b"abc\x01\x02"
|
|
|
|
remaining = session.exec(select(TerminalMessageRaw)).all()
|
|
assert remaining == []
|