save checkpoint
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# Configurable Route Table - Route Resolution Engine
|
||||
|
||||
## Module
|
||||
Gateway
|
||||
|
||||
## Status
|
||||
VERIFIED
|
||||
|
||||
## Description
|
||||
The Gateway includes a `StellaOpsRouteResolver` that maps incoming HTTP request paths to configured `StellaOpsRoute` entries. Uses first-match-wins ordering. Supports both prefix matching (case-insensitive `PathString.StartsWith`) and compiled regex matching (`IsRegex = true`). Excludes `NotFoundPage` and `ServerErrorPage` routes from path resolution (these are handled separately by `ErrorPageFallbackMiddleware`). Returns `null` for no match, allowing fallthrough to the existing Microservice pipeline.
|
||||
|
||||
## Implementation Details
|
||||
- **Modules**: `src/Router/StellaOps.Gateway.WebService/`
|
||||
- **Key Classes**:
|
||||
- `StellaOpsRouteResolver` (`src/Router/StellaOps.Gateway.WebService/Routing/StellaOpsRouteResolver.cs`) - First-match-wins resolver with prefix and regex support
|
||||
- `RouteDispatchMiddleware` (`src/Router/StellaOps.Gateway.WebService/Middleware/RouteDispatchMiddleware.cs`) - Calls resolver, dispatches to handler based on route type
|
||||
- `Program.cs` (`src/Router/StellaOps.Gateway.WebService/Program.cs`) - Registers `StellaOpsRouteResolver` as singleton in DI
|
||||
- **Tests**:
|
||||
- `StellaOpsRouteResolverTests` (`src/Router/__Tests/StellaOps.Gateway.WebService.Tests/Routing/StellaOpsRouteResolverTests.cs`) - 9 unit tests (exact match, prefix, regex, no match, first-match-wins, excluded error types, case-insensitive, empty)
|
||||
- `RouteTableIntegrationTests` (`src/Router/__Tests/StellaOps.Gateway.WebService.Tests/Integration/RouteTableIntegrationTests.cs`) - 2 route resolution integration tests
|
||||
|
||||
## E2E Test Plan
|
||||
- [ ] Exact path match: `GET /favicon.ico` resolves to StaticFile route (returns file content)
|
||||
- [ ] Prefix match: `GET /app/index.html` resolves to StaticFiles route (serves directory file)
|
||||
- [ ] Regex match: `GET /api/v2/data` resolves to ReverseProxy route with pattern `^/api/v[0-9]+/.*`
|
||||
- [ ] No match fallthrough: `GET /unmatched/path` returns 404 (falls through to Microservice pipeline)
|
||||
- [ ] First-match-wins: when multiple routes could match, first configured route takes precedence
|
||||
- [ ] Case-insensitive: `GET /APP/index.html` resolves to `/app` StaticFiles route
|
||||
|
||||
## Verification
|
||||
- **Run ID**: run-001
|
||||
- **Date**: 2026-02-12
|
||||
- **Method**: Tier 0 source verification + Tier 1 build/code review (224/224 tests pass) + Tier 2a live HTTP API testing
|
||||
- **Build**: PASS (0 errors, 0 warnings)
|
||||
- **Tests**: PASS (224/224 Gateway tests pass)
|
||||
- **Tier 2a Evidence**: `docs/qa/feature-checks/runs/gateway/configurable-route-table-route-resolver/run-001/tier2-api-check.json`
|
||||
- **Verdict**: PASS
|
||||
Reference in New Issue
Block a user