46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
"""
|
|
测试雪花 ID 生成器。
|
|
无外部依赖,可离线运行。
|
|
"""
|
|
|
|
from paste.util.snow_id import IdWorker
|
|
|
|
|
|
class TestSnowflakeId:
|
|
"""雪花 ID 生成器测试"""
|
|
|
|
def test_snow_id_generates_string(self):
|
|
"""测试 Snowflake ID 是否生成字符串"""
|
|
id_worker = IdWorker.get_id_worker()
|
|
sid = f'{id_worker.get_id()}'
|
|
assert isinstance(sid, str), "雪花 ID 必须是字符串"
|
|
assert len(sid) > 0, "雪花 ID 必须包含内容"
|
|
|
|
def test_snow_id_is_unique(self):
|
|
"""测试生成的 ID 是否唯一(简单验证)"""
|
|
id_worker = IdWorker.get_id_worker()
|
|
ids = [id_worker.get_id() for _ in range(50)]
|
|
assert len(set(ids)) == len(ids), "All generated IDs should be unique"
|
|
|
|
def test_snow_id_monotonic_increase(self):
|
|
"""测试雪花 ID 单调递增"""
|
|
id_worker = IdWorker.get_id_worker()
|
|
ids = [id_worker.get_id() for _ in range(100)]
|
|
for i in range(1, len(ids)):
|
|
assert ids[i] > ids[i - 1], \
|
|
f"ID at position {i} should be greater than previous"
|
|
|
|
def test_snow_id_worker_isolation(self):
|
|
"""测试不同 worker 生成的 ID 不冲突"""
|
|
worker1 = IdWorker.get_id_worker(datacenter_id=1, worker_id=1)
|
|
worker2 = IdWorker.get_id_worker(datacenter_id=2, worker_id=2)
|
|
ids = [worker1.get_id() for _ in range(50)] + \
|
|
[worker2.get_id() for _ in range(50)]
|
|
assert len(set(ids)) == len(ids), \
|
|
"IDs from different workers should be unique"
|
|
|
|
def test_snow_id_high_throughput(self):
|
|
"""测试短时间高并发生成"""
|
|
id_worker = IdWorker.get_id_worker()
|
|
ids = [id_worker.get_id() for _ in range(1000)]
|
|
assert len(set(ids)) == 1000 |