新增了Twitch、Telegram、Discord、Slack、Mattermost、WeChat、Zalo等多渠道的单元测试用例,覆盖了令牌处理、速率限制、消息去重、会话解析、格式转换、安全策略等模块 同时在测试配置中添加了测试用的OpenAI API密钥环境变量
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
from __future__ import annotations
|
|
|
|
import time
|
|
|
|
import pytest
|
|
|
|
from yuxi.channels.sdk.dedupe import DedupeConfig, MessageDeduplicator
|
|
|
|
|
|
class TestDedupeConfig:
|
|
def test_default_values(self):
|
|
cfg = DedupeConfig()
|
|
assert cfg.ttl_seconds == 300.0
|
|
assert cfg.max_entries == 10000
|
|
|
|
def test_custom_values(self):
|
|
cfg = DedupeConfig(ttl_seconds=60.0, max_entries=100)
|
|
assert cfg.ttl_seconds == 60.0
|
|
assert cfg.max_entries == 100
|
|
|
|
|
|
class TestMessageDeduplicator:
|
|
def test_first_message_not_duplicate(self):
|
|
dedup = MessageDeduplicator()
|
|
assert dedup.is_duplicate("msg-001") is False
|
|
|
|
def test_second_same_message_is_duplicate(self):
|
|
dedup = MessageDeduplicator()
|
|
dedup.is_duplicate("msg-001")
|
|
assert dedup.is_duplicate("msg-001") is True
|
|
|
|
def test_different_messages_not_duplicate(self):
|
|
dedup = MessageDeduplicator()
|
|
assert dedup.is_duplicate("msg-001") is False
|
|
assert dedup.is_duplicate("msg-002") is False
|
|
|
|
def test_record_then_is_duplicate(self):
|
|
dedup = MessageDeduplicator()
|
|
dedup.record("msg-001")
|
|
assert dedup.is_duplicate("msg-001") is True
|
|
|
|
def test_ttl_expiry(self):
|
|
cfg = DedupeConfig(ttl_seconds=0.01)
|
|
dedup = MessageDeduplicator(cfg)
|
|
dedup.is_duplicate("msg-001")
|
|
time.sleep(0.02)
|
|
assert dedup.is_duplicate("msg-001") is False
|
|
|
|
def test_lru_eviction(self):
|
|
cfg = DedupeConfig(max_entries=3)
|
|
dedup = MessageDeduplicator(cfg)
|
|
dedup.is_duplicate("a")
|
|
dedup.is_duplicate("b")
|
|
dedup.is_duplicate("c")
|
|
dedup.is_duplicate("d")
|
|
assert dedup.is_duplicate("a") is False
|
|
|
|
def test_clear_removes_all(self):
|
|
dedup = MessageDeduplicator()
|
|
dedup.is_duplicate("msg-001")
|
|
dedup.is_duplicate("msg-002")
|
|
dedup.clear()
|
|
assert dedup.is_duplicate("msg-001") is False
|
|
assert dedup.is_duplicate("msg-002") is False
|
|
|
|
def test_thread_safety_basic(self):
|
|
import threading
|
|
|
|
dedup = MessageDeduplicator(DedupeConfig(max_entries=1000))
|
|
results: list[bool] = []
|
|
|
|
def worker(start: int):
|
|
for i in range(start, start + 100):
|
|
results.append(dedup.is_duplicate(f"msg-{i}"))
|
|
|
|
t1 = threading.Thread(target=worker, args=(0,))
|
|
t2 = threading.Thread(target=worker, args=(0,))
|
|
t1.start()
|
|
t2.start()
|
|
t1.join()
|
|
t2.join()
|
|
|
|
duplicates = sum(1 for r in results if r)
|
|
assert duplicates == 100 |