1proxy / tests /conftest.py
paijo77's picture
update tests/conftest.py
0032ff0 verified
import pytest
import asyncio
import base64
import os
# Ensure data directory exists for SQLite BEFORE any app imports
if not os.path.exists("./data"):
os.makedirs("./data", exist_ok=True)
from typing import List
from app.models.proxy import Proxy, ValidationResult
from app.models.source import SourceConfig, SourceType
from app.database import engine, Base
@pytest.fixture(scope="session", autouse=True)
def setup_test_env():
"""Double check test environment."""
os.makedirs("./data", exist_ok=True)
@pytest.fixture(scope="session")
def event_loop():
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close()
@pytest.fixture(scope="session", autouse=True)
async def init_test_db():
"""Initialize the test database schema."""
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.drop_all)
await conn.run_sync(Base.metadata.create_all)
yield
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.drop_all)
@pytest.fixture
def sample_http_proxy() -> Proxy:
return Proxy(
ip="192.168.1.1", port=8080, protocol="http", source="test", anonymity="elite"
)
@pytest.fixture
def sample_vmess_proxy() -> Proxy:
return Proxy(ip="10.0.0.1", port=443, protocol="vmess", source="test")
@pytest.fixture
def sample_proxy_list() -> List[Proxy]:
return [
Proxy(ip="192.168.1.1", port=8080, protocol="http", source="test"),
Proxy(ip="192.168.1.2", port=3128, protocol="http", source="test"),
Proxy(ip="10.0.0.1", port=443, protocol="vmess", source="test"),
Proxy(ip="10.0.0.2", port=443, protocol="vless", source="test"),
]
@pytest.fixture
def github_raw_source() -> SourceConfig:
return SourceConfig(
url="https://raw.githubusercontent.com/user/repo/main/list.txt",
type=SourceType.GITHUB_RAW,
enabled=True,
)
@pytest.fixture
def subscription_source() -> SourceConfig:
return SourceConfig(
url="https://example.com/subscription",
type=SourceType.SUBSCRIPTION_BASE64,
enabled=True,
)
@pytest.fixture
def sample_validation_result(sample_http_proxy) -> ValidationResult:
return ValidationResult(
proxy_id=sample_http_proxy.id,
passed=True,
latency_ms=123.45,
is_elite=True,
headers={"User-Agent": "test"},
)
@pytest.fixture
def http_proxy_list_content() -> str:
return """
192.168.1.1:8080
192.168.1.2:3128
10.0.0.1:8888
10.0.0.2:9999
"""
@pytest.fixture
def mixed_protocol_content() -> str:
return """
192.168.1.1:8080
vmess://eyJhZGQiOiIxMjcuMC4wLjEiLCJwb3J0Ijo0NDN9
vless://uuid-test@example.com:443?type=tcp
trojan://password@server.com:443
ss://YWVzLTI1Ni1nY206cGFzcw@10.0.0.1:8388
"""
@pytest.fixture
def base64_subscription_content() -> str:
content = "vmess://test1\nvless://test2"
return base64.b64encode(content.encode()).decode()