From 9baf48dcd414331a2b8b004b36b1a44d31c17dae Mon Sep 17 00:00:00 2001 From: Alex Woods Date: Tue, 24 Jan 2023 15:56:46 -0800 Subject: [PATCH 1/2] Ensure authSchemes retain order --- .../amazon/smithy/rulesengine/language/Endpoint.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/Endpoint.java b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/Endpoint.java index 669da1b3ea2..7efa594f81a 100644 --- a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/Endpoint.java +++ b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/Endpoint.java @@ -285,9 +285,9 @@ public Builder addAuthScheme(Identifier scheme, Map paramet } public Builder addAuthScheme(String scheme, Map parameters) { - this.authSchemes.get().add(Pair.of(Identifier.of(scheme), - parameters.entrySet().stream() - .collect(Collectors.toMap(k -> Identifier.of(k.getKey()), Map.Entry::getValue)))); + Map transformedParameters = new LinkedHashMap<>(); + parameters.forEach((k, v) -> transformedParameters.put(Identifier.of(k), v)); + this.authSchemes.get().add(Pair.of(Identifier.of(scheme), transformedParameters)); return this; } From 377d7dc91bfb169feafaa9ca88f58e07bc7d5abe Mon Sep 17 00:00:00 2001 From: Alex Woods Date: Wed, 25 Jan 2023 10:06:59 -0800 Subject: [PATCH 2/2] Switch to using a sorted Map for authscheme properties to ensure they always maintain a stable order and not rely on input to be stable --- .../amazon/smithy/rulesengine/language/Endpoint.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/Endpoint.java b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/Endpoint.java index 7efa594f81a..3f1b19da784 100644 --- a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/Endpoint.java +++ b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/language/Endpoint.java @@ -19,10 +19,12 @@ import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.TreeMap; import java.util.stream.Collectors; import software.amazon.smithy.model.FromSourceLocation; import software.amazon.smithy.model.SourceLocation; @@ -71,7 +73,8 @@ private Endpoint(Builder builder) { builder.authSchemes.copy().stream() .map( authScheme -> { - Map base = new LinkedHashMap<>(); + Map base = new TreeMap<>( + Comparator.comparing(Identifier::asString)); base.put(Identifier.of("name"), Literal.of(authScheme.left.asString())); base.putAll(authScheme.right); return Literal.record(base); @@ -285,9 +288,9 @@ public Builder addAuthScheme(Identifier scheme, Map paramet } public Builder addAuthScheme(String scheme, Map parameters) { - Map transformedParameters = new LinkedHashMap<>(); - parameters.forEach((k, v) -> transformedParameters.put(Identifier.of(k), v)); - this.authSchemes.get().add(Pair.of(Identifier.of(scheme), transformedParameters)); + this.authSchemes.get().add(Pair.of(Identifier.of(scheme), + parameters.entrySet().stream() + .collect(Collectors.toMap(k -> Identifier.of(k.getKey()), Map.Entry::getValue)))); return this; }