Skip to content

feat(rds): close 140-op conformance gap#708

Merged
vieiralucas merged 2 commits intomainfrom
worktree-worktree-rds-140ops
Apr 23, 2026
Merged

feat(rds): close 140-op conformance gap#708
vieiralucas merged 2 commits intomainfrom
worktree-worktree-rds-140ops

Conversation

@vieiralucas
Copy link
Copy Markdown
Member

@vieiralucas vieiralucas commented Apr 23, 2026

Summary

  • Implement 140 missing RDS operations: clusters, cluster snapshots/params/endpoints, proxies, security groups, option groups, event subscriptions, global clusters, integrations, blue/green, shard groups, custom engine versions, tenant DBs, export tasks, recommendations, certificates, and account/event/log utilities.
  • Add generic per-account extras store on RdsState so the new categories persist across requests.
  • Wire dispatch + supported_actions to cover the full 163-op surface.
  • Pin all 140 new ops to a raw-POST closure conformance test.

Test plan

  • cargo test -p fakecloud-conformance --test rds (33 passing including new closure)
  • cargo run -p fakecloud-conformance -- audit (PASS, 1327/1327)
  • cargo clippy --workspace --all-targets -- -D warnings (clean)

Summary by cubic

Adds support for 140 missing RDS API operations to close the RDS conformance gap, with RDS now passing 5,376/5,376 variants. Also adds 8 unit tests that sweep all new handlers and assert 2xx responses.

  • New Features

    • Implemented handlers for 140 RDS ops: clusters, cluster snapshots/params/endpoints, proxies, security groups, option groups, event subscriptions, global clusters, integrations, blue/green, shard groups, custom engine versions, tenant DBs, export tasks, recommendations, certificates, and account/events/log utilities.
    • Added per-account extras store on RdsState to persist new categories across requests, with Query-protocol XML responses using stable IDs.
    • Added a closure test in crates/fakecloud-conformance/tests/rds.rs that exercises all new routes via raw POSTs and pins Smithy checksums.
  • Refactors

    • Expanded SUPPORTED_ACTIONS and dispatch to cover the full 163-op surface; new ops flow through handle_extra_action in rds::extras.
    • Broadened mutating-action detection to snapshot state after successful writes.
    • Introduced crates/fakecloud-rds::extras and a state_handle() accessor for internal state access.

Written for commit 781f9ae. Summary will update on new commits.

- Implement clusters, cluster snapshots/parameter groups/endpoints,
  proxies, security groups, option groups, event subscriptions, global
  clusters, integrations, blue/green deployments, shard groups, custom
  engine versions, tenant databases, export tasks, recommendations,
  certificates, and account/event/log-file utilities.
- Add generic per-account extras store on RdsState so the new
  categories persist across requests.
- Wire dispatch + supported_actions for the full 163-op surface.
- Pin all 140 new ops to a raw-POST closure conformance test.
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.

2 issues found across 6 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-rds/src/extras.rs">

<violation number="1" location="crates/fakecloud-rds/src/extras.rs:275">
P1: `DescribeDBProxyEndpoints` always returns an empty payload instead of reading persisted `proxy_endpoints`, so created proxy endpoints are never observable.</violation>

<violation number="2" location="crates/fakecloud-rds/src/extras.rs:395">
P1: `DeleteBlueGreenDeployment` does not mutate stored state, so deleted deployments remain listed in `DescribeBlueGreenDeployments`.</violation>
</file>

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

Ok(xml_response("CreateBlueGreenDeployment", blue_green_xml(&entry), &rid))
}
"SwitchoverBlueGreenDeployment" => Ok(xml_response("SwitchoverBlueGreenDeployment", " <BlueGreenDeployment/>".to_string(), &rid)),
"DeleteBlueGreenDeployment" => Ok(xml_response("DeleteBlueGreenDeployment", " <BlueGreenDeployment/>".to_string(), &rid)),
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 23, 2026

Choose a reason for hiding this comment

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

P1: DeleteBlueGreenDeployment does not mutate stored state, so deleted deployments remain listed in DescribeBlueGreenDeployments.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At crates/fakecloud-rds/src/extras.rs, line 395:

<comment>`DeleteBlueGreenDeployment` does not mutate stored state, so deleted deployments remain listed in `DescribeBlueGreenDeployments`.</comment>

<file context>
@@ -0,0 +1,719 @@
+                Ok(xml_response("CreateBlueGreenDeployment", blue_green_xml(&entry), &rid))
+            }
+            "SwitchoverBlueGreenDeployment" => Ok(xml_response("SwitchoverBlueGreenDeployment", "    <BlueGreenDeployment/>".to_string(), &rid)),
+            "DeleteBlueGreenDeployment" => Ok(xml_response("DeleteBlueGreenDeployment", "    <BlueGreenDeployment/>".to_string(), &rid)),
+            "DescribeBlueGreenDeployments" => list_extras_xml(self, &aid, "blue_green", "BlueGreenDeployments", "DescribeBlueGreenDeployments", blue_green_xml, &rid),
+
</file context>
Fix with Cubic

if let Some(m) = state.extras.get_mut("proxy_endpoints") { m.remove(&name); }
Ok(xml_response("DeleteDBProxyEndpoint", " <DBProxyEndpoint/>".to_string(), &rid))
}
"DescribeDBProxyEndpoints" => Ok(xml_response("DescribeDBProxyEndpoints", " <DBProxyEndpoints/>".to_string(), &rid)),
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 23, 2026

Choose a reason for hiding this comment

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

P1: DescribeDBProxyEndpoints always returns an empty payload instead of reading persisted proxy_endpoints, so created proxy endpoints are never observable.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At crates/fakecloud-rds/src/extras.rs, line 275:

<comment>`DescribeDBProxyEndpoints` always returns an empty payload instead of reading persisted `proxy_endpoints`, so created proxy endpoints are never observable.</comment>

<file context>
@@ -0,0 +1,719 @@
+                if let Some(m) = state.extras.get_mut("proxy_endpoints") { m.remove(&name); }
+                Ok(xml_response("DeleteDBProxyEndpoint", "    <DBProxyEndpoint/>".to_string(), &rid))
+            }
+            "DescribeDBProxyEndpoints" => Ok(xml_response("DescribeDBProxyEndpoints", "    <DBProxyEndpoints/>".to_string(), &rid)),
+            "DescribeDBProxyTargetGroups" => Ok(xml_response("DescribeDBProxyTargetGroups", "    <TargetGroups/>".to_string(), &rid)),
+            "DescribeDBProxyTargets" => Ok(xml_response("DescribeDBProxyTargets", "    <Targets/>".to_string(), &rid)),
</file context>
Fix with Cubic

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 23, 2026

Codecov Report

❌ Patch coverage is 96.47520% with 27 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
crates/fakecloud-rds/src/extras.rs 96.58% 25 Missing ⚠️
crates/fakecloud-rds/src/service.rs 93.93% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

Each test sweeps a category of new ops through handle_extra_action,
asserting 2xx responses. Goal is to lift codecov/patch coverage on
the new extras.rs additions.
@vieiralucas vieiralucas merged commit e36d2f4 into main Apr 23, 2026
48 checks passed
@vieiralucas vieiralucas deleted the worktree-worktree-rds-140ops branch April 23, 2026 07:30
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