Skip to content

Phase 37–38: EIP onboarding docs + secret provider/throttle/multi-tenancy test hardening#73

Merged
devstress merged 3 commits intomainfrom
copilot/implement-eip-solution
Apr 15, 2026
Merged

Phase 37–38: EIP onboarding docs + secret provider/throttle/multi-tenancy test hardening#73
devstress merged 3 commits intomainfrom
copilot/implement-eip-solution

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 11, 2026

EIP lacked installation/onboarding documentation and had zero test coverage for AzureKeyVaultSecretProvider, VaultSecretProvider, and several core record/DTO types.

Onboarding Documentation (Phase 37, chunks 370–373)

  • docs/quickstart.md — Zero-to-first-message in 15 minutes (Aspire launch → send envelope → observe in UI)
  • docs/installation-guide.md — All deployment modes (Aspire, Docker Compose, Kubernetes), broker config, security, observability setup
  • docs/admin-ui-guide.md — Walkthrough of all 19 Admin Dashboard pages with daily operations workflow
  • docs/onboarding-checklist.md — 4-week structured program covering all 50 tutorial labs
  • Updated README.md with organized documentation links

Test Hardening (Phase 38, chunks 380–383)

76 new unit tests (1919 → 1995 total). All green.

  • AzureKeyVaultSecretProviderTests (16 tests) — Full CRUD coverage via mock HTTP handler: versioned reads, prefix-filtered list, null body, audit logging, argument guards
  • VaultSecretProviderTests (17 tests) — HashiCorp Vault KV v2 CRUD, lease tracking, X-Vault-Token header injection, metadata merge
  • InMemorySecretProviderSecretsOptionsTests (24 tests, 6 fixtures) — Audit logger integration, SecretsOptions defaults/round-trip, SecretEntry.IsExpired, SecretAuditEvent/SecretAccessAction enum coverage, SecretRotationPolicy
  • ThrottleTenantRecordTests (18 tests, 6 fixtures) — ThrottlePolicy/ThrottleResult/ThrottleMetrics record semantics, TenantContext.Anonymous singleton, TenantIsolationException properties
// Example: AzureKeyVaultSecretProvider test with mock HTTP
_httpHandler.ResponseBody = JsonSerializer.Serialize(new {
    value = "my-secret",
    id = "https://myvault.vault.azure.net/secrets/db-password/v1",
    attributes = new { created = 1700000000L, exp = 1800000000L },
    tags = new Dictionary<string, string> { ["env"] = "prod" }
});
using var provider = CreateProvider();
var result = await provider.GetSecretAsync("db-password");
Assert.That(result!.Value, Is.EqualTo("my-secret"));
Assert.That(result.Version, Is.EqualTo("v1"));

Notable fix: ArgumentException.ThrowIfNullOrWhiteSpace(null) throws ArgumentNullException (not ArgumentException) — test assertions updated accordingly.

Copilot AI and others added 3 commits April 11, 2026 04:00
…in UI guide, onboarding checklist (Phase 37)

Agent-Logs-Url: https://github.com/devstress/My3DLearning/sessions/7126c09e-d1c4-470a-a6f9-b8d966c6b529

Co-authored-by: devstress <30769729+devstress@users.noreply.github.com>
…6 new tests, 1995 total)

Agent-Logs-Url: https://github.com/devstress/My3DLearning/sessions/9fdf36e0-745c-4be2-a8a2-08fefd5e3021

Co-authored-by: devstress <30769729+devstress@users.noreply.github.com>
@devstress devstress marked this pull request as ready for review April 15, 2026 06:56
@devstress devstress merged commit 84b5e7a into main Apr 15, 2026
3 checks passed
@devstress devstress deleted the copilot/implement-eip-solution branch April 15, 2026 06:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants