Files
routstr-core/tests/unit
redshift 860266ab0e fix: announce provider as soon as the NSEC is saved
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.
2026-09-16 21:39:30 +02:00
..
2025-08-03 20:35:59 -03:00
2025-08-09 14:55:26 -03:00
2026-09-04 01:35:43 +02:00
2026-09-04 01:35:43 +02:00
2026-06-13 23:40:39 +02:00
2026-09-07 00:30:05 +02:00
2026-08-03 23:32:06 +02:00
2026-08-06 22:58:44 +02:00
2026-08-03 00:05:36 +02:00
2026-09-08 01:02:16 +02:00
2026-09-07 00:30:05 +02:00
2026-07-01 17:08:28 +02:00
2026-07-01 16:53:52 +02:00
2026-05-14 15:40:49 +02:00
2026-07-29 22:50:33 +02:00
2026-08-14 21:48:29 +02:00
2026-09-04 01:35:43 +02:00
2026-07-22 23:10:27 +02:00
2026-07-22 23:10:27 +02:00

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 configuration
  • test_main.py - Tests for main app endpoints
  • test_account.py - Tests for wallet/account management endpoints
  • test_proxy.py - Tests for the proxy functionality with mocked upstream
  • test_models.py - Tests for model pricing and data structures

Key Fixtures

  • async_client - Async HTTP client for testing FastAPI endpoints
  • test_session - In-memory SQLite database session for tests
  • test_api_key - Pre-configured API key with balance
  • api_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

  1. Use @pytest.mark.asyncio for async tests
  2. Use the provided fixtures for database and client access
  3. Mock external dependencies (like upstream API calls)
  4. Test both success and error cases
  5. Verify database state changes when applicable