Skip to content

feat(route53): VPC + delegation sets + geo + tags + account limits (batch 5)#795

Merged
vieiralucas merged 2 commits intomainfrom
worktree-route53-batch5-vpc-delegation-geo-tags
Apr 27, 2026
Merged

feat(route53): VPC + delegation sets + geo + tags + account limits (batch 5)#795
vieiralucas merged 2 commits intomainfrom
worktree-route53-batch5-vpc-delegation-geo-tags

Conversation

@vieiralucas
Copy link
Copy Markdown
Member

@vieiralucas vieiralucas commented Apr 27, 2026

Summary

  • Closes the Route 53 control plane: 17 new ops bring total to 71/71 (100%)
  • VPC associations + cross-account authorization handshake (private-zone-only, last-VPC removal protection)
  • Reusable delegation sets with 4-NS synthesis + DelegationSetInUse on delete
  • Geo locations / account limits / tag CRUD on health-checks + hosted-zones

Test plan

  • cargo build --bin fakecloud
  • cargo test -p fakecloud-route53 --tests (3 router unit tests pass)
  • cargo test -p fakecloud-e2e --test route53_vpc_delegation_geo_tags (8/8)
  • cargo test -p fakecloud-conformance --test route53_vpc_delegation_geo_tags (17/17)
  • cargo run -p fakecloud-conformance -- run --services route53 (71/71 ops, 2388/2388 variants)
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo fmt --all

Summary by cubic

Completes the Route 53 control plane with VPC associations, reusable delegation sets, geo locations, account limits, and tag CRUD. Adds 17 operations; Route 53 now at 71/71 with full conformance, plus fixes for VPC disassociate safety, public-zone auth rejection, delegation set promotion, and geo pagination.

  • Bug Fixes
    • DisassociateVPCFromHostedZone: block last-VPC removal before mutating state.
    • CreateVPCAssociationAuthorization: reject public zones with PublicZoneVPCAssociation.
    • CreateReusableDelegationSet: when HostedZoneId is provided, reuse that zone’s NS; unknown IDs return NoSuchHostedZone.
    • ListGeoLocations: derive next-page markers from the filtered list for correct pagination.

Written for commit f22ece5. Summary will update on new commits.

…atch 5)

Closes the Route 53 control plane: 17 new ops bring the total to 71/71
(100%).

- AssociateVPCWithHostedZone / DisassociateVPCFromHostedZone with
  private-zone-only enforcement and last-VPC removal protection.
- CreateVPCAssociationAuthorization / Delete / List for the cross-account
  authorization handshake.
- ListHostedZonesByVPC.
- CreateReusableDelegationSet (4 NS records synthesized, duplicate
  CallerReference rejected) / Get / Delete (DelegationSetInUse) / List /
  GetReusableDelegationSetLimit.
- ListGeoLocations / GetGeoLocation over a representative dataset
  (continents + sample countries + US subdivisions) with full
  IsTruncated + NextContinentCode/NextCountryCode/NextSubdivisionCode
  pagination.
- GetAccountLimit for all 5 owner-scoped types with live Count from
  in-memory state.
- ChangeTagsForResource / ListTagsForResource / ListTagsForResources
  for both healthcheck and hostedzone resource types.

Includes 8 SDK E2E tests + 17 conformance tests. Conformance probe
reports 71/71 ops, 2388/2388 variants pass.
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 27, 2026

Codecov Report

❌ Patch coverage is 0% with 1018 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
crates/fakecloud-route53/src/service.rs 0.00% 986 Missing ⚠️
crates/fakecloud-route53/src/router.rs 0.00% 32 Missing ⚠️

📢 Thoughts on this report? Let us know!

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

5 issues found across 9 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/fakecloud-conformance/tests/route53_vpc_delegation_geo_tags.rs">

<violation number="1" location="crates/fakecloud-conformance/tests/route53_vpc_delegation_geo_tags.rs:98">
P2: Use a private hosted zone for the VPC association authorization tests.</violation>
</file>

<file name="crates/fakecloud-route53/src/service.rs">

<violation number="1" location="crates/fakecloud-route53/src/service.rs:3303">
P1: Check for the last VPC before mutating `zone.vpcs`; the current error path returns `LastVPCAssociation` after already removing the only association.</violation>

<violation number="2" location="crates/fakecloud-route53/src/service.rs:3360">
P2: Reject public hosted zones before creating VPC association authorizations; this API is private-zone-only.</violation>

<violation number="3" location="crates/fakecloud-route53/src/service.rs:3544">
P2: Honor `HostedZoneId` when creating a reusable delegation set; currently the field is ignored, so invalid hosted zone IDs are accepted.</violation>

<violation number="4" location="crates/fakecloud-route53/src/service.rs:3732">
P2: Compute the next geo-location marker from the filtered result set before truncating it; using the unfiltered list returns wrong pagination markers when start parameters are present.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread crates/fakecloud-route53/src/service.rs Outdated
Comment thread crates/fakecloud-route53/src/service.rs Outdated
Comment thread crates/fakecloud-route53/src/service.rs Outdated
Comment thread crates/fakecloud-route53/src/service.rs Outdated
…n set

- DisassociateVPCFromHostedZone: check last-VPC condition before mutating
  zone.vpcs (P1). The previous code retained-then-erred, so the only
  remaining VPC was already removed by the time LastVPCAssociation
  bubbled up.
- CreateVPCAssociationAuthorization: reject public hosted zones with
  PublicZoneVPCAssociation. The auth handshake is private-zone-only.
- CreateReusableDelegationSet: when HostedZoneId is supplied, look the
  zone up and reuse its NameServers; unknown IDs now return
  NoSuchHostedZone instead of silently succeeding.
- ListGeoLocations: derive the next-page marker from the filtered list,
  not the unfiltered catalogue. With non-empty start parameters the
  unfiltered offset would point at the wrong row.
- Conformance tests for VPC association authorization ops now use a
  private hosted zone since Create now requires it.

New regression coverage in route53_vpc_delegation_geo_tags.rs:
create_vpc_authorization_rejects_public_zone,
reusable_delegation_set_with_unknown_hosted_zone_errors,
reusable_delegation_set_promotes_zone_name_servers,
list_geo_locations_pagination_resumes_correctly.
@vieiralucas vieiralucas merged commit 951de4b into main Apr 27, 2026
48 checks passed
@vieiralucas vieiralucas deleted the worktree-route53-batch5-vpc-delegation-geo-tags branch April 27, 2026 00:55
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.

1 participant