diff --git a/crates/fakecloud-server/src/main.rs b/crates/fakecloud-server/src/main.rs index c68f62ee..3ff4cb22 100644 --- a/crates/fakecloud-server/src/main.rs +++ b/crates/fakecloud-server/src/main.rs @@ -1773,9 +1773,7 @@ async fn main() { let stuck: Vec = state .instances .iter() - .filter(|(_, inst)| { - inst.db_instance_status == "creating" - }) + .filter(|(_, inst)| inst.db_instance_status == "creating") .map(|(id, _)| id.clone()) .collect(); for id in &stuck { diff --git a/sdks/java/src/test/java/dev/fakecloud/E2ETest.java b/sdks/java/src/test/java/dev/fakecloud/E2ETest.java index 565e3b39..d11134ab 100644 --- a/sdks/java/src/test/java/dev/fakecloud/E2ETest.java +++ b/sdks/java/src/test/java/dev/fakecloud/E2ETest.java @@ -329,7 +329,7 @@ void eventbridgeGetHistoryReturnsPutEvents() { // ── RDS ──────────────────────────────────────────────────────── @Test - void rdsGetInstancesReturnsManagedInstances() { + void rdsGetInstancesReturnsManagedInstances() throws Exception { RdsClient rds = configure(RdsClient.builder()).build(); rds.createDBInstance(CreateDbInstanceRequest.builder() .dbInstanceIdentifier("java-rds-db") @@ -342,6 +342,19 @@ void rdsGetInstancesReturnsManagedInstances() { .dbName("appdb") .build()); + // CreateDBInstance returns a `creating` placeholder; poll until + // the container is up so the introspection endpoint reports the + // populated host_port / container_id. + long deadline = System.currentTimeMillis() + 240_000; + while (System.currentTimeMillis() < deadline) { + var desc = rds.describeDBInstances(b -> b.dbInstanceIdentifier("java-rds-db")); + if (!desc.dbInstances().isEmpty() + && "available".equals(desc.dbInstances().get(0).dbInstanceStatusAsString())) { + break; + } + Thread.sleep(1000); + } + var instance = fc.rds().getInstances().instances().stream() .filter(i -> "java-rds-db".equals(i.dbInstanceIdentifier())) .findFirst() diff --git a/sdks/python/tests/test_client.py b/sdks/python/tests/test_client.py index b21b322b..585743e7 100644 --- a/sdks/python/tests/test_client.py +++ b/sdks/python/tests/test_client.py @@ -111,6 +111,8 @@ def test_health(fc: FakeCloudSync, fakecloud_url: str) -> None: def test_rds_instances(fc: FakeCloudSync, fakecloud_url: str) -> None: + import time + rds = boto3.client("rds", **_boto_kwargs(fakecloud_url)) rds.create_db_instance( DBInstanceIdentifier="py-sdk-rds-db", @@ -123,6 +125,19 @@ def test_rds_instances(fc: FakeCloudSync, fakecloud_url: str) -> None: DBName="appdb", ) + # CreateDBInstance returns a `creating` placeholder; poll until the + # container is up so the introspection endpoint reports the populated + # container_id and host_port. + deadline = time.time() + 240 + while time.time() < deadline: + desc = rds.describe_db_instances(DBInstanceIdentifier="py-sdk-rds-db") + if ( + desc["DBInstances"] + and desc["DBInstances"][0]["DBInstanceStatus"] == "available" + ): + break + time.sleep(1) + result = fc.rds.get_instances() instance = next( item