From 53984b65403e8f6fb069a4309da1b41f7db6ed6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Rodr=C3=ADguez?= Date: Wed, 9 Sep 2026 16:46:32 +0200 Subject: [PATCH 1/3] fix(ec2): include supported usage classes in DescribeInstanceTypes --- .../src/test/java/com/floci/test/Ec2Tests.java | 15 +++++++++++++++ .../services/ec2/Ec2InstanceTypeCatalog.java | 5 +++++ .../floci/services/ec2/Ec2QueryHandler.java | 7 ++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/compatibility-tests/sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java b/compatibility-tests/sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java index eb3e7fd62c..fbe62d9f05 100644 --- a/compatibility-tests/sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java +++ b/compatibility-tests/sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java @@ -278,6 +278,21 @@ void describeInstanceTypeProcessorArchitectures() { .containsExactly("arm64"); } + @Test + @Order(7) + @DisplayName("DescribeInstanceTypes - supported usage classes") + void describeInstanceTypeSupportedUsageClasses() { + DescribeInstanceTypesResponse resp = ec2.describeInstanceTypes(DescribeInstanceTypesRequest.builder() + .instanceTypes(InstanceType.M5_LARGE, InstanceType.fromValue("t4g.medium"), + InstanceType.fromValue("m6gd.large")) + .build()); + + assertThat(resp.instanceTypes()).hasSize(3); + assertThat(resp.instanceTypes()).allSatisfy(instanceType -> + assertThat(instanceType.supportedUsageClassesAsStrings()) + .containsExactlyInAnyOrder("on-demand", "spot")); + } + @Test @Order(7) @DisplayName("CreateFleet - dry-run and instant on-demand launch") diff --git a/src/main/java/io/github/hectorvent/floci/services/ec2/Ec2InstanceTypeCatalog.java b/src/main/java/io/github/hectorvent/floci/services/ec2/Ec2InstanceTypeCatalog.java index eaffb4c492..b281e0f28c 100644 --- a/src/main/java/io/github/hectorvent/floci/services/ec2/Ec2InstanceTypeCatalog.java +++ b/src/main/java/io/github/hectorvent/floci/services/ec2/Ec2InstanceTypeCatalog.java @@ -95,6 +95,9 @@ private static Map indexInstanceTypes(List supportedArchitectures = List.of(); + public List supportedUsageClasses = List.of("on-demand", "spot"); public Boolean currentGeneration; public Boolean encryptionInTransitSupported; public Integer defaultNetworkCardIndex; @@ -170,6 +174,7 @@ public Map toResponseMap() { type.put("instanceStorageSupported", localStorageGiB > 0); type.put("localStorageGiB", localStorageGiB); type.put("supportedArchitectures", List.copyOf(supportedArchitectures)); + type.put("supportedUsageClasses", List.copyOf(supportedUsageClasses)); type.put("currentGeneration", currentGeneration == null || currentGeneration); Map networkInfo = new LinkedHashMap<>(); networkInfo.put("encryptionInTransitSupported", encryptionInTransitSupported); diff --git a/src/main/java/io/github/hectorvent/floci/services/ec2/Ec2QueryHandler.java b/src/main/java/io/github/hectorvent/floci/services/ec2/Ec2QueryHandler.java index 793a3de2d7..bb55b895d4 100644 --- a/src/main/java/io/github/hectorvent/floci/services/ec2/Ec2QueryHandler.java +++ b/src/main/java/io/github/hectorvent/floci/services/ec2/Ec2QueryHandler.java @@ -3849,7 +3849,12 @@ private Response handleDescribeInstanceTypes(MultivaluedMap p, S for (String arch : (List) t.get("supportedArchitectures")) { xml.elem("item", arch); } - xml.end("supportedArchitectures").end("processorInfo"); + xml.end("supportedArchitectures").end("processorInfo") + .start("supportedUsageClasses"); + for (String usageClass : (List) t.get("supportedUsageClasses")) { + xml.elem("item", usageClass); + } + xml.end("supportedUsageClasses"); Map networkInfo = (Map) t.get("networkInfo"); xml.start("networkInfo") .elem("encryptionInTransitSupported", From 19ef53ff6b869ccee399db5ceb5bfc864a1f3628 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Rodr=C3=ADguez?= Date: Thu, 10 Sep 2026 07:55:06 +0200 Subject: [PATCH 2/3] test(stepfunctions): document executor fixture dependencies --- .../stepfunctions/AslExecutorFailStateErrorCauseTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/io/github/hectorvent/floci/services/stepfunctions/AslExecutorFailStateErrorCauseTest.java b/src/test/java/io/github/hectorvent/floci/services/stepfunctions/AslExecutorFailStateErrorCauseTest.java index 00743015ee..aedb5ae7d8 100644 --- a/src/test/java/io/github/hectorvent/floci/services/stepfunctions/AslExecutorFailStateErrorCauseTest.java +++ b/src/test/java/io/github/hectorvent/floci/services/stepfunctions/AslExecutorFailStateErrorCauseTest.java @@ -31,6 +31,9 @@ *

Both fields are resolved through the same reference-path resolver a {@code ".$"} payload * template field uses, so an unresolvable path fails with {@code States.Runtime}, matching the * precedent set for issue #2521 in {@link AslExecutorUnresolvableJsonPathTest}. + * + *

The fixture supplies all service handlers required by the production executor, including + * the SNS handler introduced by the Step Functions SNS integration. */ @QuarkusTest class AslExecutorFailStateErrorCauseTest { From 4524a8bdc7efbf0e903630c3328cfdc57956a7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Rodr=C3=ADguez?= Date: Thu, 10 Sep 2026 07:59:30 +0200 Subject: [PATCH 3/3] test(ec2): document usage class regression coverage --- .../sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java | 1 + 1 file changed, 1 insertion(+) diff --git a/compatibility-tests/sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java b/compatibility-tests/sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java index fbe62d9f05..14a19c755a 100644 --- a/compatibility-tests/sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java +++ b/compatibility-tests/sdk-test-java/src/test/java/com/floci/test/Ec2Tests.java @@ -278,6 +278,7 @@ void describeInstanceTypeProcessorArchitectures() { .containsExactly("arm64"); } + /** Regression coverage for the Karpenter instance-type compatibility contract. */ @Test @Order(7) @DisplayName("DescribeInstanceTypes - supported usage classes")