macalbert/envilder/sdk-acceptance-testing
Claude Code and agent skill by macalbert/envilder
- community
Checking that the SKILL.md file is still in the repository.
Acceptance testing patterns for Envilder SDKs using TestContainers (LocalStack for AWS SSM, LocalStack for Azure for Azure Key Vault). Use when adding acceptance tests to any SDK, creating container wrappers, or updating CI workflows for SDK test infrastructure.
Install
npx vskill@latest install macalbert/envilder/sdk-acceptance-testingSKILL.md
SDK Acceptance Testing
Patterns for acceptance testing Envilder SDKs against real cloud provider emulators. Applies to all SDKs (.NET, Python, Node.js, Go, Java).
See ADR-0001 and ADR-0014 for the architectural decisions behind these patterns.
When to Use
- Adding acceptance tests to a new or existing SDK
- Creating container wrappers for LocalStack (AWS or Azure)
- Updating CI workflows to support SDK acceptance tests
- Adding a new SDK and need to replicate test infrastructure
Directory Structure
Every SDK test directory follows this layout:
envilder.json Pattern
All SDKs reference the root envilder.json at the repository root directly. Container wrappers navigate to it via a relative path: there are no copies per SDK test directory.
Resolution behavior:
| Environment | How it works | |
|---|---|---|
| Local dev | $config.profile resolves AWS credentials from ~/.aws/credentials | |
| CI (GitHub Actions) | Profile is ignored; OIDC provides credentials via aws-actions/configure-aws-credentials |
Path resolution example (TypeScript):
Fallback pattern: If the configured provider cannot be created (e.g., Azure credentials missing in a CI environment that only has AWS OIDC), fall back to AWS provider to resolve the token.
LocalStack Container Wrapper
Requirements
- Image:
localstack/localstack:stable - Resolve
LOCALSTACK_AUTH_TOKENfromenvilder.jsonbefore starting - Throw if token is empty (fail fast)
- Expose: endpoint URL, SSM client, provider instance
Lifecycle
LocalStack for Azure Container Wrapper
Requirements
- Image:
localstack/localstack-azure:latest - Resolve
LOCALSTACK_AUTH_TOKENexactly like the AWS wrapper (same token) - Host port must equal the container port: vault URIs embed the gateway
port. Pick a free port P, bind P:P, and set GATEWAY_LISTEN=0.0.0.0:P and LOCALSTACK_HOST=localhost.localstack.cloud:P
- Wait for the
Ready.log line - Placeholder credentials the emulator accepts (not secrets): tenant and
subscription 00000000-0000-0000-0000-000000000000, client any-app, secret dummy, authority https://azure.localhost.localstack.cloud:P
- TLS stays enabled:
*.localhost.localstack.cloudresolves to127.0.0.1
and the emulator serves a trusted certificate
- Never point
DefaultAzureCredentialat the emulator through
AZURE_TENANT_ID/AZURE_CLIENT_ID/AZURE_CLIENT_SECRET: MSAL validates the authority against login.microsoftonline.com, which rejects it. Use a local managed identity token endpoint instead (see lifecycle)
- Restore original env vars on teardown
Lifecycle
Acceptance Test Patterns
Test Naming
Same convention as unit tests: Should_{Expected}_When_{Condition}
Standard Tests per Provider
Every SDK should have at minimum these acceptance tests:
AWS SSM:
Should_ResolveSecretFromSsm_When_ParameterExistsInLocalStackShould_ReturnEmptyForMissingSsmParameter_When_ParameterDoesNotExist
Azure Key Vault:
Should_ResolveSecretFromKeyVault_When_SecretExistsInLocalStackShould_ReturnEmptyForMissingKeyVaultSecret_When_SecretDoesNotExist
Test Structure (AAA)
CI Workflow Pattern
Required Steps
Key Points
LOCALSTACK_AUTH_TOKENat job level so container wrapper can read it
(both the AWS and the Azure emulator need it)
- AWS OIDC credentials for resolving the token from SSM
- Docker socket env vars for TestContainers compatibility on GitHub runners
- Acceptance tests run in the same job as unit tests (no separate workflow)
Existing Implementations
| SDK | Container Wrappers | Acceptance Tests | |
|---|---|---|---|
| .NET | tests/sdks/dotnet/Fixtures/ | tests/sdks/dotnet/Infrastructure/, tests/sdks/dotnet/EndToEnd/ | |
| Python | tests/sdks/python/containers/ | tests/sdks/python/infrastructure/, tests/sdks/python/end_to_end/ | |
| Node.js | tests/sdks/nodejs/containers/ | tests/sdks/nodejs/acceptance/ |
Security
- Security scanPassed, 93 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.github/skills/sdk-acceptance-testing/SKILL.md
Popularity
- Repository stars
- 135
- Repository forks
- 4
- 7-day trend score
- 25
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/macalbert/envilder/sdk-acceptance-testing)