Test-TestEnvironment: verify the seeded estate against the seed data - #41
Merged
Merged
Conversation
…d data One exported command, dispatching to Test-<Provider>Environment for every provider, compares what the connected directory holds with the seed files: every seeded user, group and other named object present and found the way teardown finds them, nothing the module owns that the data does not describe, every name equal by codepoint, and every membership the data lists or its rules define in place. Memberships are judged on what is missing only; licence-gated and many-to-one types are counted without a verdict. One result object for every provider, built by two Core helpers, with the full lists of missing and unexpected names. The AD verifier evaluates the membership rules over the seeded directory the way the seed does. The Entra verifier expects the schema application the extension step creates. The FreeIPA verifier compares logins unprefixed, which the first live run against the realm caught. Verify/Invoke-LiveCycle.ps1 runs seed, verify, teardown and re-verify through the exported commands and is not shipped. Docs page, MAML, README, about topic, provider READMEs and CLAUDE.md updated; suites for the helpers, the dispatcher and each provider verifier.
This was referenced Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
One exported command,
Test-TestEnvironment, dispatching toTest-<Provider>Environmentfor all six providers. It compares what the connected directory holds with the seed files:Get-<Provider>SeededObject,Select-ADTestOwnedObject), and nothing the module owns that the data does not describe;[string]::Equals(..., Ordinal), never-eq, which calls a decomposed and a precomposed name equal);One result object for every provider (
Provider,Target,VerifiedOn,Checks,Failed,Passed), each check withName,Kind,Expected,Found,Missing,Unexpected,Passedand the full lists.-SkipMembershipskips the expensive reads;-Quietreturns the object alone.Verify/Invoke-LiveCycle.ps1runs seed, verify, teardown, re-verify through the exported commands and exits non-zero on any finding. Nothing underVerify/ships; the rehearsal confirms it.Live results
The first FreeIPA run caught a real verifier bug (logins prefixed where the seed never prefixes them: 355 missing, 355 unexpected against a correct realm). Fixed, and the per-provider suites now build their fixtures from the seed files by the seed's own rules so that class of drift fails in CI.
Gates
Publish-Module.ps1 -WhatIfpasses.Also
Test-<Provider>Environment), and one per provider verifier.