- Implemented tests for RouterConfig, RoutingOptions, StaticInstanceConfig, and RouterConfigOptions to ensure default values are set correctly. - Added tests for RouterConfigProvider to validate configurations and ensure defaults are returned when no file is specified. - Created tests for ConfigValidationResult to check success and error scenarios. - Developed tests for ServiceCollectionExtensions to verify service registration for RouterConfig. - Introduced UdpTransportTests to validate serialization, connection, request-response, and error handling in UDP transport. - Added scripts for signing authority gaps and hashing DevPortal SDK snippets.
StellaOps Router
The StellaOps Router is the internal communication infrastructure that enables microservices to communicate through a central gateway.
Overview
The router provides:
- Gateway WebService (
StellaOps.Gateway.WebService): HTTP ingress service that routes requests to microservices - Microservice SDK (
StellaOps.Microservice): SDK for building microservices that connect to the router - Transport Plugins: Multiple transport options (TCP, TLS, UDP, RabbitMQ, InMemory for testing)
- Claims-based Authorization: Using
RequiringClaimsinstead of role-based access
Key Documents
| Document | Purpose |
|---|---|
| specs.md | Canonical specification - READ FIRST |
| implplan.md | High-level implementation plan |
| SPRINT_INDEX.md | Sprint overview and dependency graph |
Solution Structure
StellaOps.Router.slnx
├── src/__Libraries/
│ ├── StellaOps.Router.Common/ # Shared types, enums, interfaces
│ ├── StellaOps.Router.Config/ # Router configuration models
│ ├── StellaOps.Microservice/ # Microservice SDK
│ └── StellaOps.Microservice.SourceGen/ # Build-time endpoint discovery
├── src/Gateway/
│ └── StellaOps.Gateway.WebService/ # HTTP gateway service
└── tests/
├── StellaOps.Router.Common.Tests/
├── StellaOps.Gateway.WebService.Tests/
└── StellaOps.Microservice.Tests/
Building
# Build the router solution
dotnet build StellaOps.Router.slnx
# Run tests
dotnet test StellaOps.Router.slnx
Invariants (Non-Negotiable)
From the specification, these are non-negotiable:
- Method + Path is the endpoint identity
- Strict semver for version matching
- Region from GatewayNodeConfig.Region (never from headers/host)
- No HTTP transport between gateway and microservices
- RequiringClaims (not AllowedRoles) for authorization
- Opaque body handling (router doesn't interpret payloads)
Status
Currently in development. See SPRINT_INDEX.md for implementation progress.