Initial commit: grok-free-register-oss
Open-source Grok free registration CLI, xai_enroller auth pipeline, local auth service, tests and docs.
This commit is contained in:
92
tests/conftest.py
Normal file
92
tests/conftest.py
Normal file
@@ -0,0 +1,92 @@
|
||||
"""
|
||||
共享 fixtures — 供四层测试共用
|
||||
"""
|
||||
import sys
|
||||
import os
|
||||
import asyncio
|
||||
import pytest
|
||||
|
||||
# 确保项目根目录在 sys.path 中
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from grok_register.core.inventory import Inventory
|
||||
from grok_register.core.observer import Metrics
|
||||
from tests.fakes import (
|
||||
FakeTurnstile, FakeEmailService, FakeRegisterAPI,
|
||||
Conservation, EventLog,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def metrics():
|
||||
return Metrics()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def inventory(metrics):
|
||||
return Inventory(metrics=metrics)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sems():
|
||||
"""标准 Semaphore 集合(小容量,便于测试)。"""
|
||||
return {
|
||||
'physical': asyncio.Semaphore(4),
|
||||
't_slot': asyncio.Semaphore(4),
|
||||
'q_slot': asyncio.Semaphore(4),
|
||||
'q_pending': asyncio.Semaphore(6),
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def large_sems():
|
||||
"""大容量 Semaphore(压力测试用)。"""
|
||||
return {
|
||||
'physical': asyncio.Semaphore(32),
|
||||
't_slot': asyncio.Semaphore(64),
|
||||
'q_slot': asyncio.Semaphore(64),
|
||||
'q_pending': asyncio.Semaphore(48),
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def conservation(sems, inventory):
|
||||
return Conservation(
|
||||
sems['t_slot'], sems['q_slot'], sems['q_pending'], inventory
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def fake_turnstile():
|
||||
return FakeTurnstile()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def fake_email():
|
||||
return FakeEmailService()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def fake_register():
|
||||
return FakeRegisterAPI()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def event_log():
|
||||
return EventLog()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def stop():
|
||||
return asyncio.Event()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def file_lock():
|
||||
return asyncio.Lock()
|
||||
|
||||
|
||||
# ── 跳过需要网络的测试(本地开发时) ──
|
||||
def pytest_configure(config):
|
||||
config.addinivalue_line("markers", "slow: 压力测试(较慢)")
|
||||
config.addinivalue_line("markers", "needs_network: 需要外部网络")
|
||||
Reference in New Issue
Block a user