From 8ac8276ac4338ab913b39947d4c6c41d6cda8429 Mon Sep 17 00:00:00 2001 From: Soumava Bera Date: Wed, 22 Jan 2025 14:15:57 -0500 Subject: [PATCH 1/5] add stable order for smoke tests + restoring client codegen --- .../generators/CppImportContainer.java | 16 +++++++++++++--- .../generators/SmokeTestsParser.java | 2 ++ tools/scripts/run_code_generation.py | 8 ++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java index 6c66514d7ba..3116c1bd9ec 100644 --- a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java +++ b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java @@ -11,9 +11,12 @@ import software.amazon.smithy.codegen.core.Symbol; import java.util.Collections; + import java.util.Comparator; import java.util.HashSet; import java.util.Set; import java.util.Map; + import java.util.List; + import java.util.stream.Collectors; public final class CppImportContainer implements ImportContainer { @@ -81,19 +84,26 @@ public void importSymbol(Symbol symbol, String alias) { dynamicHeaders.add(containerHeaderMap.get(symbol.getName())); } } + + + private static List setToSortedList(Set set) { + return set.stream() + .sorted(Comparator.comparing(elem -> elem)) + .collect(Collectors.toList()); + } @Override public String toString() { StringBuilder sb = new StringBuilder(); - coreHeaders.forEach( + setToSortedList(coreHeaders).forEach( elem -> sb.append(String.format("#include <%s>\n",elem)) ); - unitTestHeaders.forEach( + setToSortedList(unitTestHeaders).forEach( elem -> sb.append(String.format("#include <%s>\n",elem)) ); - dynamicHeaders.forEach( + setToSortedList(dynamicHeaders).forEach( elem -> sb.append(String.format("#include <%s>\n",elem)) ); diff --git a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/SmokeTestsParser.java b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/SmokeTestsParser.java index 1d8eaa71eff..7a578a2d512 100644 --- a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/SmokeTestsParser.java +++ b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/SmokeTestsParser.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Set; +import java.util.Comparator; import software.amazon.smithy.build.PluginContext; import software.amazon.smithy.aws.smoketests.model.AwsSmokeTestModel; @@ -280,6 +281,7 @@ public Map > extractServiceSmokeTests() filter(operationShape -> operationShape.getInput().isPresent()). filter(operationShape -> operationShape.getTrait(SmokeTestsTrait.class).isPresent() ). filter(operationShape -> operationToServiceMap.containsKey(operationShape.getId()) ). + sorted(Comparator.comparing(OperationShape::getId)). forEach(operationShape -> { SmokeTestsTrait smokeTestsTrait = operationShape.getTrait(SmokeTestsTrait.class).get(); //get serviceShape diff --git a/tools/scripts/run_code_generation.py b/tools/scripts/run_code_generation.py index 57376c24ba9..8c45fe1ede9 100644 --- a/tools/scripts/run_code_generation.py +++ b/tools/scripts/run_code_generation.py @@ -155,9 +155,13 @@ def collect_available_models(models_dir: str, endpoint_rules_dir: str, legacy_ma with open(models_dir + "/" + model_file_date[0], 'r') as json_file: model = json.load(json_file) #get service id. It has to exist, else continue - if ("metadata" in model and "serviceId" in model["metadata"]): + if ("metadata" in model and (("serviceId" in model["metadata"]) or ("serviceFullName" in model["metadata"])) ): if key not in legacy_mapped_services: - key = model["metadata"]["serviceId"] + if "serviceId" in model["metadata"]: + key = model["metadata"]["serviceId"] + else: + key = model["metadata"]["serviceFullName"] + #convert into smithy case convention key = key.lower().replace(' ', '-') From 26245ebd1b38090cf042445af759a62c472f2d7d Mon Sep 17 00:00:00 2001 From: Soumava Bera Date: Thu, 23 Jan 2025 10:22:22 -0500 Subject: [PATCH 2/5] address pr comments --- .../generators/CppImportContainer.java | 10 +++++----- tools/scripts/run_code_generation.py | 8 ++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java index 3116c1bd9ec..934d2e265be 100644 --- a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java +++ b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java @@ -30,8 +30,8 @@ public CppImportContainer(String namespace) { String clientNamespace = SmokeTestsParser.removeSpaces(namespace); String folderNamespace = SmokeTestsParser.toKebabCase(namespace); this.c2jNamespace = SmithyC2JNamespaceMap.getInstance().getC2JServiceName(folderNamespace); - this.coreHeaders = new HashSet<>(); - this.dynamicHeaders = new HashSet<>(); + this.coreHeaders = new TreeSet<>(Comparator.naturalOrder()); //This maintains lexicographical order + this.dynamicHeaders = new TreeSet<>(Comparator.naturalOrder()); Collections.addAll(coreHeaders, "aws/core/client/AsyncCallerContext.h", "aws/core/client/AsyncCallerContext.h", @@ -96,14 +96,14 @@ private static List setToSortedList(Set set) { public String toString() { StringBuilder sb = new StringBuilder(); - setToSortedList(coreHeaders).forEach( + coreHeaders.forEach( elem -> sb.append(String.format("#include <%s>\n",elem)) ); - setToSortedList(unitTestHeaders).forEach( + unitTestHeaders.forEach( elem -> sb.append(String.format("#include <%s>\n",elem)) ); - setToSortedList(dynamicHeaders).forEach( + dynamicHeaders.forEach( elem -> sb.append(String.format("#include <%s>\n",elem)) ); diff --git a/tools/scripts/run_code_generation.py b/tools/scripts/run_code_generation.py index 8c45fe1ede9..8da7c9b547f 100644 --- a/tools/scripts/run_code_generation.py +++ b/tools/scripts/run_code_generation.py @@ -155,13 +155,9 @@ def collect_available_models(models_dir: str, endpoint_rules_dir: str, legacy_ma with open(models_dir + "/" + model_file_date[0], 'r') as json_file: model = json.load(json_file) #get service id. It has to exist, else continue - if ("metadata" in model and (("serviceId" in model["metadata"]) or ("serviceFullName" in model["metadata"])) ): + if "metadata" in model and any(k in model["metadata"] for k in ["serviceId", "serviceFullName"]): if key not in legacy_mapped_services: - if "serviceId" in model["metadata"]: - key = model["metadata"]["serviceId"] - else: - key = model["metadata"]["serviceFullName"] - + key = model["metadata"].get("serviceId", model["metadata"].get("serviceFullName")) #convert into smithy case convention key = key.lower().replace(' ', '-') From 7365d5419a9d5f262759b9e014cb9a8b169a362e Mon Sep 17 00:00:00 2001 From: Soumava Bera Date: Thu, 23 Jan 2025 10:24:09 -0500 Subject: [PATCH 3/5] remove imports no longer used --- .../awsclientsmithygenerator/generators/CppImportContainer.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java index 934d2e265be..9c572a2125a 100644 --- a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java +++ b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java @@ -15,8 +15,6 @@ import java.util.HashSet; import java.util.Set; import java.util.Map; - import java.util.List; - import java.util.stream.Collectors; public final class CppImportContainer implements ImportContainer { From 1adf5eef641995715dbe207c8d8c09d7c16b6d59 Mon Sep 17 00:00:00 2001 From: Soumava Bera Date: Thu, 23 Jan 2025 10:25:06 -0500 Subject: [PATCH 4/5] remove function no longer used --- .../generators/CppImportContainer.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java index 9c572a2125a..8bb697b1fe7 100644 --- a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java +++ b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java @@ -82,13 +82,6 @@ public void importSymbol(Symbol symbol, String alias) { dynamicHeaders.add(containerHeaderMap.get(symbol.getName())); } } - - - private static List setToSortedList(Set set) { - return set.stream() - .sorted(Comparator.comparing(elem -> elem)) - .collect(Collectors.toList()); - } @Override public String toString() { From 18adb7284b5ecc31e875bbce4910353dc958a922 Mon Sep 17 00:00:00 2001 From: Soumava Bera Date: Thu, 23 Jan 2025 10:28:27 -0500 Subject: [PATCH 5/5] fix import for treeset --- .../awsclientsmithygenerator/generators/CppImportContainer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java index 8bb697b1fe7..f841d85236f 100644 --- a/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java +++ b/tools/code-generation/smithy/codegen/cpp-smoke-tests-codegen/src/main/java/com/amazonaws/util/awsclientsmithygenerator/generators/CppImportContainer.java @@ -15,6 +15,7 @@ import java.util.HashSet; import java.util.Set; import java.util.Map; + import java.util.TreeSet; public final class CppImportContainer implements ImportContainer {