Implement InMemory Transport Layer for StellaOps Router
- Added InMemoryTransportOptions class for configuration settings including timeouts and latency. - Developed InMemoryTransportServer class to handle connections, frame processing, and event management. - Created ServiceCollectionExtensions for easy registration of InMemory transport services. - Established project structure and dependencies for InMemory transport library. - Implemented comprehensive unit tests for endpoint discovery, connection management, request/response flow, and streaming capabilities. - Ensured proper handling of cancellation, heartbeat, and hello frames within the transport layer.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
**Sprint:** 2
|
||||
**Duration:** 1 sprint
|
||||
**Status:** TODO
|
||||
**Status:** DONE (2025-12-03)
|
||||
**Dependencies:** Phase 0 (Foundations)
|
||||
|
||||
---
|
||||
@@ -22,6 +22,12 @@
|
||||
|
||||
---
|
||||
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
| --- | --- | --- |
|
||||
| 2025-12-03 | Cutover to PostgreSQL-only; dual-write removed; verification completed. | Authority |
|
||||
| 2025-12-04 | Synced task status and linked verification report (`docs/db/reports/authority-verification-2025-12-03.md`). | PM |
|
||||
|
||||
## Deliverables
|
||||
|
||||
| Deliverable | Acceptance Criteria |
|
||||
@@ -66,12 +72,12 @@ See [SPECIFICATION.md](../SPECIFICATION.md) Section 5.1 for complete Authority s
|
||||
Create the PostgreSQL storage project for Authority module.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.1.1: Create project `src/Authority/__Libraries/StellaOps.Authority.Storage.Postgres/`
|
||||
- [ ] T1.1.2: Add reference to `StellaOps.Infrastructure.Postgres`
|
||||
- [ ] T1.1.3: Add reference to `StellaOps.Authority.Core`
|
||||
- [ ] T1.1.4: Create `AuthorityDataSource` class
|
||||
- [ ] T1.1.5: Create `AuthorityPostgresOptions` class
|
||||
- [ ] T1.1.6: Create `ServiceCollectionExtensions.cs`
|
||||
- [x] T1.1.1: Create project `src/Authority/__Libraries/StellaOps.Authority.Storage.Postgres/`
|
||||
- [x] T1.1.2: Add reference to `StellaOps.Infrastructure.Postgres`
|
||||
- [x] T1.1.3: Add reference to `StellaOps.Authority.Core`
|
||||
- [x] T1.1.4: Create `AuthorityDataSource` class
|
||||
- [x] T1.1.5: Create `AuthorityPostgresOptions` class
|
||||
- [x] T1.1.6: Create `ServiceCollectionExtensions.cs`
|
||||
|
||||
**Project Structure:**
|
||||
```
|
||||
@@ -110,11 +116,11 @@ src/Authority/__Libraries/StellaOps.Authority.Storage.Postgres/
|
||||
Create PostgreSQL schema migration for Authority tables.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.2.1: Create `V001_CreateAuthoritySchema` migration
|
||||
- [ ] T1.2.2: Include all tables from SPECIFICATION.md
|
||||
- [ ] T1.2.3: Include all indexes
|
||||
- [ ] T1.2.4: Add seed data for system roles/permissions
|
||||
- [ ] T1.2.5: Test migration idempotency
|
||||
- [x] T1.2.1: Create `V001_CreateAuthoritySchema` migration
|
||||
- [x] T1.2.2: Include all tables from SPECIFICATION.md
|
||||
- [x] T1.2.3: Include all indexes
|
||||
- [x] T1.2.4: Add seed data for system roles/permissions
|
||||
- [x] T1.2.5: Test migration idempotency
|
||||
|
||||
**Migration Implementation:**
|
||||
```csharp
|
||||
@@ -169,17 +175,17 @@ public sealed class V001_CreateAuthoritySchema : IPostgresMigration
|
||||
Implement `IUserRepository` for PostgreSQL.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.3.1: Implement `GetByIdAsync`
|
||||
- [ ] T1.3.2: Implement `GetByUsernameAsync`
|
||||
- [ ] T1.3.3: Implement `GetBySubjectIdAsync`
|
||||
- [ ] T1.3.4: Implement `ListAsync` with pagination
|
||||
- [ ] T1.3.5: Implement `CreateAsync`
|
||||
- [ ] T1.3.6: Implement `UpdateAsync`
|
||||
- [ ] T1.3.7: Implement `DeleteAsync`
|
||||
- [ ] T1.3.8: Implement `GetRolesAsync`
|
||||
- [ ] T1.3.9: Implement `AssignRoleAsync`
|
||||
- [ ] T1.3.10: Implement `RevokeRoleAsync`
|
||||
- [ ] T1.3.11: Write integration tests
|
||||
- [x] T1.3.1: Implement `GetByIdAsync`
|
||||
- [x] T1.3.2: Implement `GetByUsernameAsync`
|
||||
- [x] T1.3.3: Implement `GetBySubjectIdAsync`
|
||||
- [x] T1.3.4: Implement `ListAsync` with pagination
|
||||
- [x] T1.3.5: Implement `CreateAsync`
|
||||
- [x] T1.3.6: Implement `UpdateAsync`
|
||||
- [x] T1.3.7: Implement `DeleteAsync`
|
||||
- [x] T1.3.8: Implement `GetRolesAsync`
|
||||
- [x] T1.3.9: Implement `AssignRoleAsync`
|
||||
- [x] T1.3.10: Implement `RevokeRoleAsync`
|
||||
- [x] T1.3.11: Write integration tests
|
||||
|
||||
**Interface Reference:**
|
||||
```csharp
|
||||
@@ -215,13 +221,13 @@ public interface IUserRepository
|
||||
Implement `IServiceAccountRepository` for PostgreSQL.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.4.1: Implement `GetByIdAsync`
|
||||
- [ ] T1.4.2: Implement `GetByAccountIdAsync`
|
||||
- [ ] T1.4.3: Implement `ListAsync`
|
||||
- [ ] T1.4.4: Implement `CreateAsync`
|
||||
- [ ] T1.4.5: Implement `UpdateAsync`
|
||||
- [ ] T1.4.6: Implement `DeleteAsync`
|
||||
- [ ] T1.4.7: Write integration tests
|
||||
- [x] T1.4.1: Implement `GetByIdAsync`
|
||||
- [x] T1.4.2: Implement `GetByAccountIdAsync`
|
||||
- [x] T1.4.3: Implement `ListAsync`
|
||||
- [x] T1.4.4: Implement `CreateAsync`
|
||||
- [x] T1.4.5: Implement `UpdateAsync`
|
||||
- [x] T1.4.6: Implement `DeleteAsync`
|
||||
- [x] T1.4.7: Write integration tests
|
||||
|
||||
**Verification:**
|
||||
- [ ] All methods implemented
|
||||
@@ -239,13 +245,13 @@ Implement `IServiceAccountRepository` for PostgreSQL.
|
||||
Implement `IClientRepository` for PostgreSQL (OpenIddict compatible).
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.5.1: Implement `GetByIdAsync`
|
||||
- [ ] T1.5.2: Implement `GetByClientIdAsync`
|
||||
- [ ] T1.5.3: Implement `ListAsync`
|
||||
- [ ] T1.5.4: Implement `CreateAsync`
|
||||
- [ ] T1.5.5: Implement `UpdateAsync`
|
||||
- [ ] T1.5.6: Implement `DeleteAsync`
|
||||
- [ ] T1.5.7: Write integration tests
|
||||
- [x] T1.5.1: Implement `GetByIdAsync`
|
||||
- [x] T1.5.2: Implement `GetByClientIdAsync`
|
||||
- [x] T1.5.3: Implement `ListAsync`
|
||||
- [x] T1.5.4: Implement `CreateAsync`
|
||||
- [x] T1.5.5: Implement `UpdateAsync`
|
||||
- [x] T1.5.6: Implement `DeleteAsync`
|
||||
- [x] T1.5.7: Write integration tests
|
||||
|
||||
**Verification:**
|
||||
- [ ] All methods implemented
|
||||
@@ -263,13 +269,13 @@ Implement `IClientRepository` for PostgreSQL (OpenIddict compatible).
|
||||
Implement `ITokenRepository` for PostgreSQL.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.6.1: Implement `GetByIdAsync`
|
||||
- [ ] T1.6.2: Implement `GetByHashAsync`
|
||||
- [ ] T1.6.3: Implement `CreateAsync`
|
||||
- [ ] T1.6.4: Implement `RevokeAsync`
|
||||
- [ ] T1.6.5: Implement `PruneExpiredAsync`
|
||||
- [ ] T1.6.6: Implement `GetActiveTokensAsync`
|
||||
- [ ] T1.6.7: Write integration tests
|
||||
- [x] T1.6.1: Implement `GetByIdAsync`
|
||||
- [x] T1.6.2: Implement `GetByHashAsync`
|
||||
- [x] T1.6.3: Implement `CreateAsync`
|
||||
- [x] T1.6.4: Implement `RevokeAsync`
|
||||
- [x] T1.6.5: Implement `PruneExpiredAsync`
|
||||
- [x] T1.6.6: Implement `GetActiveTokensAsync`
|
||||
- [x] T1.6.7: Write integration tests
|
||||
|
||||
**Verification:**
|
||||
- [ ] All methods implemented
|
||||
@@ -288,12 +294,12 @@ Implement `ITokenRepository` for PostgreSQL.
|
||||
Implement remaining repository interfaces.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.7.1: Implement `IRoleRepository`
|
||||
- [ ] T1.7.2: Implement `IScopeRepository`
|
||||
- [ ] T1.7.3: Implement `IRevocationRepository`
|
||||
- [ ] T1.7.4: Implement `ILoginAttemptRepository`
|
||||
- [ ] T1.7.5: Implement `ILicenseRepository`
|
||||
- [ ] T1.7.6: Write integration tests for all
|
||||
- [x] T1.7.1: Implement `IRoleRepository`
|
||||
- [x] T1.7.2: Implement `IScopeRepository`
|
||||
- [x] T1.7.3: Implement `IRevocationRepository`
|
||||
- [x] T1.7.4: Implement `ILoginAttemptRepository`
|
||||
- [x] T1.7.5: Implement `ILicenseRepository`
|
||||
- [x] T1.7.6: Write integration tests for all
|
||||
|
||||
**Verification:**
|
||||
- [ ] All repositories implemented
|
||||
@@ -311,10 +317,10 @@ Implement remaining repository interfaces.
|
||||
Add configuration-based backend selection for Authority.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.8.1: Update `ServiceCollectionExtensions` in Authority.WebService
|
||||
- [ ] T1.8.2: Add conditional registration based on `Persistence:Authority`
|
||||
- [ ] T1.8.3: Test switching between Mongo and Postgres
|
||||
- [ ] T1.8.4: Document configuration options
|
||||
- [x] T1.8.1: Update `ServiceCollectionExtensions` in Authority.WebService
|
||||
- [x] T1.8.2: Add conditional registration based on `Persistence:Authority`
|
||||
- [x] T1.8.3: Test switching between Mongo and Postgres
|
||||
- [x] T1.8.4: Document configuration options
|
||||
|
||||
**Implementation:**
|
||||
```csharp
|
||||
@@ -356,12 +362,12 @@ public static IServiceCollection AddAuthorityStorage(
|
||||
Verify PostgreSQL implementation matches MongoDB behavior.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.10.1: Run comparison tests for User repository
|
||||
- [ ] T1.10.2: Run comparison tests for Token repository
|
||||
- [ ] T1.10.3: Verify token issuance/verification flow
|
||||
- [ ] T1.10.4: Verify login flow
|
||||
- [ ] T1.10.5: Document any differences found
|
||||
- [ ] T1.10.6: Generate verification report
|
||||
- [x] T1.10.1: Run comparison tests for User repository
|
||||
- [x] T1.10.2: Run comparison tests for Token repository
|
||||
- [x] T1.10.3: Verify token issuance/verification flow
|
||||
- [x] T1.10.4: Verify login flow
|
||||
- [x] T1.10.5: Document any differences found
|
||||
- [x] T1.10.6: Generate verification report
|
||||
|
||||
**Verification Tests:**
|
||||
```csharp
|
||||
@@ -398,13 +404,13 @@ public async Task Users_Should_Match_Between_Mongo_And_Postgres()
|
||||
Backfill existing MongoDB data to PostgreSQL.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.11.1: Create backfill script for tenants
|
||||
- [ ] T1.11.2: Create backfill script for users
|
||||
- [ ] T1.11.3: Create backfill script for service accounts
|
||||
- [ ] T1.11.4: Create backfill script for clients/scopes
|
||||
- [ ] T1.11.5: Create backfill script for active tokens
|
||||
- [ ] T1.11.6: Verify record counts match
|
||||
- [ ] T1.11.7: Verify sample records match
|
||||
- [x] T1.11.1: Create backfill script for tenants
|
||||
- [x] T1.11.2: Create backfill script for users
|
||||
- [x] T1.11.3: Create backfill script for service accounts
|
||||
- [x] T1.11.4: Create backfill script for clients/scopes
|
||||
- [x] T1.11.5: Create backfill script for active tokens
|
||||
- [x] T1.11.6: Verify record counts match
|
||||
- [x] T1.11.7: Verify sample records match
|
||||
|
||||
**Verification:**
|
||||
- [ ] All Tier A data backfilled
|
||||
@@ -423,12 +429,12 @@ Backfill existing MongoDB data to PostgreSQL.
|
||||
Switch Authority to PostgreSQL-only mode.
|
||||
|
||||
**Subtasks:**
|
||||
- [ ] T1.12.1: Update configuration to `"Authority": "Postgres"`
|
||||
- [ ] T1.12.2: Deploy to staging
|
||||
- [ ] T1.12.3: Run full integration test suite
|
||||
- [ ] T1.12.4: Monitor for errors/issues
|
||||
- [ ] T1.12.5: Deploy to production
|
||||
- [ ] T1.12.6: Monitor production metrics
|
||||
- [x] T1.12.1: Update configuration to `"Authority": "Postgres"`
|
||||
- [x] T1.12.2: Deploy to staging
|
||||
- [x] T1.12.3: Run full integration test suite
|
||||
- [x] T1.12.4: Monitor for errors/issues
|
||||
- [x] T1.12.5: Deploy to production
|
||||
- [x] T1.12.6: Monitor production metrics
|
||||
|
||||
**Verification:**
|
||||
- [ ] All tests pass in staging
|
||||
@@ -439,12 +445,12 @@ Switch Authority to PostgreSQL-only mode.
|
||||
|
||||
## Exit Criteria
|
||||
|
||||
- [ ] All repository interfaces implemented for PostgreSQL
|
||||
- [ ] All integration tests pass
|
||||
- [ ] Verification tests pass (MongoDB vs PostgreSQL comparison)
|
||||
- [ ] Configuration switch working
|
||||
- [ ] Authority running on PostgreSQL in production
|
||||
- [ ] MongoDB Authority collections archived
|
||||
- [x] All repository interfaces implemented for PostgreSQL
|
||||
- [x] All integration tests pass
|
||||
- [x] Verification tests pass (MongoDB vs PostgreSQL comparison)
|
||||
- [x] Configuration switch working
|
||||
- [x] Authority running on PostgreSQL in production
|
||||
- [x] MongoDB Authority collections archived
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user