mirror of
https://github.com/Routstr/routstr-core.git
synced 2026-08-12 04:03:21 +00:00
Replace the fragile `re.split(b"data: ")` streaming parser with a buffered, event-delimited parser in both the chat-completion and Responses-API streamers. Events are accumulated until the SSE blank-line delimiter, so parsing is independent of network chunk boundaries. Fixes: - OpenRouter `: OPENROUTER PROCESSING` keepalive comments no longer leak to clients as `data: : ...` (the `Unexpected token ':'` client crash). - JSON payloads split across TCP reads are reassembled before parsing. - CRLF framing (Gemini native alt=sse) handled. - Combined content+usage chunks (Gemini thinking models over the OpenAI-compat endpoint) forward content once and still report usage in the cost trailer, instead of dropping the assistant message. - Multi-line non-JSON `data` blocks are re-prefixed per line so they stay valid SSE framing for the client. Adds tests/unit/test_streaming_sse_providers.py driving the real generator against per-provider on-the-wire framing, and switches the integration token-mint fallback to secrets.token_hex to kill a PRNG/clock collision flake.
FastAPI Async Unit Tests
This directory contains async unit tests for the Routstr proxy FastAPI application.
Installation
First, ensure you have the development dependencies installed:
uv pip install -e ".[dev]"
Running Tests
To run all tests:
pytest
To run tests with coverage:
pytest --cov=routstr --cov-report=html
To run specific test files:
pytest tests/test_main.py
pytest tests/test_models.py
pytest tests/test_proxy.py
To run only async tests:
pytest -m asyncio
Test Structure
conftest.py- Pytest fixtures and configurationtest_main.py- Tests for main app endpointstest_account.py- Tests for wallet/account management endpointstest_proxy.py- Tests for the proxy functionality with mocked upstreamtest_models.py- Tests for model pricing and data structures
Key Fixtures
async_client- Async HTTP client for testing FastAPI endpointstest_session- In-memory SQLite database session for teststest_api_key- Pre-configured API key with balanceapi_key_with_balance- API key with sufficient balance for proxy tests
Environment Variables
The tests automatically set up required environment variables in conftest.py. No manual configuration needed.
Writing New Tests
- Use
@pytest.mark.asynciofor async tests - Use the provided fixtures for database and client access
- Mock external dependencies (like upstream API calls)
- Test both success and error cases
- Verify database state changes when applicable