mirror of
https://github.com/Routstr/routstr-core.git
synced 2026-10-05 20:28:23 +00:00
A node runner who configures the NSEC through the admin UI (rather than the NSEC env var) was never announced. The kind 38421 publish task was only created at boot, gated on an NSEC already being present: saving the key stored it and updated the live settings singleton, but nothing re-launched the task, so the provider stayed invisible on relays until the process was restarted. Start the task unconditionally and restructure announce_provider into the idle-and-re-read loop that publish_usage_analytics already uses: it waits while there is no NSEC, re-derives the identity whenever the key changes, and re-reads endpoints, mints and relays every iteration. The long re-announce sleep is now ticked so a replaced identity is announced promptly instead of up to 24h later. Relay backoff state is hoisted so it survives an idle poll, a full cycle and an identity change. This also covers the cases that previously killed the task until a restart: an invalid NSEC, or a node with no reachable endpoint (HTTP_URL left at its http://localhost:8000 default and no onion address) now idle and recover as soon as the configuration is fixed.
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