feat: 100% alchemy local AWS coverage - #6
Draft
sam-goodwin wants to merge 372 commits into
Draft
Conversation
|
🎉 Thanks for your first pull request to Floci! Your CI checks need a maintainer to approve them before they run. That is GitHub's standard gate on first-time contributors, not a problem with your PR — so if the checks look like they are doing nothing, that is why. Once a maintainer approves, CI and the compatibility suite start automatically. Nothing is needed from you in the meantime. While you wait, a couple of things that make review faster:
Come join us in Slack — it is the fastest way to reach maintainers if you get stuck, or want feedback on an approach before investing more time in it. |
Register emr-containers restJson1 and cover create/describe/list/delete for job templates, including typed not-found and delete validation.
Route AWSFMS_20180101 admin-account APIs through the JSON 1.1 dispatcher.
Add a restJson1 Glacier service (vaults, archives, jobs, multipart) so Alchemy binding probes get typed ResourceNotFoundException instead of UnknownOperationException.
YAML already declares glacier.enabled; without the ConfigMapping the emulator fails SmallRye validation on startup.
Implement restJson1 List/Create/Get/Update/DeleteDetector plus tags so Alchemy's GuardDuty Detector resource converges locally.
Add restJson1 Create/Get/Update/Delete/ListChannel and tag APIs so Alchemy Channel tests converge locally. GetChannel of an unknown ARN returns typed ResourceNotFoundException.
GetStream/PutMetadata/StopStream/InsertAdBreak raise ChannelNotBroadcasting; session lists are empty; viewer revocation is a no-op success.
Cover Get/Create/Update/Delete/List and tags for playback restriction policies.
JSON 1.1 GlobalAccelerator_V20180706 APIs for Alchemy Accelerator/Listener/EndpointGroup: create/describe/update/delete, tags, flow-log attributes, and ordered teardown.
Add a focused integration test for Get/Create/List/Tag/Delete of IVS recording configurations, including typed ResourceNotFoundException and ConflictException when a configuration is still attached to a channel.
GetRoom on a missing ARN returns typed ResourceNotFoundException with resourceId/resourceType. Create/Get/List/Update/Delete Room and tag APIs converge so Alchemy Room.test.ts can run against floci.
POST /GetStage on a missing ARN returns ResourceNotFoundException,
and Create/Update/Delete/ListStages plus /tags/{arn} converge.
AWS conceals missing topic rules as UnauthorizedException 401 with "Access to topic rule '<name>' was denied", which distilled maps to TopicRuleNotFound. Match that so reconcile observe/delete converge.
Add restJson1 BatchGetAccountStatus, Enable, and Disable so Alchemy's Inspector2 Enabler can converge locally without waiting on ENABLING.
GetSubscriptionState and DescribeAttackStatistics succeed without Shield Advanced. Gated ListAttacks, DescribeDRTAccess, and missing protection groups return the live typed tags.
Cover availability, suggestions, prices, list/detail, and typed InvalidInput/UnsupportedTLD errors used by Alchemy Bindings.test.ts.
Prefixing /lambda-url/{id}/bindings with /aws-s3tables 404s the Bindings fixture.
…cycle Canary create/update/delete, groups, tags, and StartCanary runs round-trip against storage for Alchemy Canary tests.
Prefixing rewritten /lambda-url/{id}/... paths 404s the Bindings Lambda fixture at /bindings.
Route Feature Store restJson1 by SigV4 scope or advertised host, skip Function URL paths, require EventTime on DeleteRecord, and match EventBridge ListRuleNamesByTarget against qualified Lambda ARNs.
Store Create/UpdateFunctionConfiguration FileSystemConfigs, return them from GetFunction, and mount a shared Docker volume at LocalMountPath named by file-system id so a config-only redeploy keeps written files.
Alchemy prefixes DescribeEndpoints Address with https://. On HTTP-only quarkus:dev, advertise a sidecar TLS port covering localhost.floci.io and host.docker.internal so Lambda RecordsSink batches and out-of-retention RejectedRecordsException land on the emulator.
NO_SOURCE projects only run echo-style buildspec commands. Running them through Docker contended with Lambda Function URL containers on the same daemon during Alchemy bindings suites. Simulate the phase machine in-process so StartBuild still reaches a terminal status.
…indings Route restJson1 email-contact APIs off S3, leave Function URL paths alone, stamp X-Amzn-Errortype, and return ConflictException for already-active contacts so Lambda bindings can GetEmailContact, SendActivationCode, and reject a bogus ActivateEmailContact code.
Leave /lambda-url/* and lambda-url hosts un-prefixed so Bindings fixture probes hit Lambda. Stamp X-Amzn-Errortype on JSON errors so distilled decodes ResourceNotFoundException and InvalidInputException.
Cover call analytics, medical, scribe, filter, category, language model, and tagging operations used by Alchemy Transcribe bindings.
Rewrite eks-signed restJson1 paths onto /aws-eks so ListAccessPolicies, DescribeClusterVersions, DescribeAddonVersions, and DescribeAddonConfiguration are not swallowed by S3's path-style catch-all or the Lambda Function URL /bindings probe.
Route SigV4 synthetics requests onto /synthetics so /canary and /bindings stay available for Lambda Function URLs. StartCanary records a one-shot run and emits aws.synthetics EventBridge events for consumeCanaryEvents.
Leave /lambda-url/{urlId}/... unprefixed so the Bindings Lambda fixture
can serve /bindings, and emit FailedFindings on BatchImportFindings.
Return DocumentMetadata.Pages on AnalyzeExpense without nested Blocks, validate Document input, and enable TCP keepalive so nested Lambda calls are not dropped when Netty fails SO_KEEPALIVE=false on accept.
CreateChatToken/SendEvent/DeleteMessage/DisconnectUser plus the messaging websocket, served off the Vert.x event loop so nested Function URL calls do not deadlock.
Alchemy VerifiedPermissions Bindings.test.ts probes GET /info on a fresh Function URL. A new container still in INIT sat in the executor queue for minutes, so beforeAll never reached IsAuthorized. Cap the front-door wait, add an explicit /info route, skip already-rewritten /lambda-url paths, and do not treat *.lambda-url.* hosts as S3 buckets.
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.
This is the emulator half of alchemy local AWS coverage. Scoped TDD commits land here so the live AWS suite can run against floci (
pnpm test:aws:dev) without loosening alchemy tests.Alchemy counterpart: alchemy-run/alchemy#1352
IAM policy enforcement stays off. Lambda Function, ECS Service, and ECS Task keep dedicated local providers and are not dualized.