diff --git a/sdk/src/Core/Amazon.Auth/AccessControlPolicy/ConditionFactory.cs b/sdk/src/Core/Amazon.Auth/AccessControlPolicy/ConditionFactory.cs index 3fc36d9714f4..4e3e9bd77e8c 100644 --- a/sdk/src/Core/Amazon.Auth/AccessControlPolicy/ConditionFactory.cs +++ b/sdk/src/Core/Amazon.Auth/AccessControlPolicy/ConditionFactory.cs @@ -102,7 +102,7 @@ public static partial class ConditionFactory /// /// Enumeration of the supported ways an ARN comparison can be evaluated. /// - public enum ArnComparisonType + public enum ArnComparisonType { /// Exact matching ArnEquals, @@ -177,7 +177,7 @@ public enum NumericComparisonType /// /// Enumeration of the supported ways a string comparison can be evaluated. /// - public enum StringComparisonType + public enum StringComparisonType { /// /// Case-sensitive exact string matching @@ -220,9 +220,9 @@ public enum StringComparisonType /// The type of comparison to perform. /// The second ARN to compare against. When using ArnLike or ArnNotLike this may contain the /// multi-character wildcard (*) or the single-character wildcard - public static Condition NewCondition(ArnComparisonType type, string key, string value) + public static Condition NewCondition(ArnComparisonType type, string key, string value) { - return new Condition(type.ToString(), key, value); + return new Condition(ToString(type), key, value); } /// @@ -234,7 +234,7 @@ public static Condition NewCondition(ArnComparisonType type, string key, string /// The boolean to compare against. public static Condition NewCondition(string key, bool value) { - return new Condition("Bool", key, value.ToString().ToLowerInvariant()); + return new Condition("Bool", key, value ? "true" : "false"); } /// @@ -251,7 +251,7 @@ public static Condition NewCondition(string key, bool value) [Obsolete("Invoking this method results in non-UTC DateTimes not being marshalled correctly. Use NewConditionUtc instead.", false)] public static Condition NewCondition(DateComparisonType type, DateTime date) { - return new Condition(type.ToString(), CURRENT_TIME_CONDITION_KEY, date.ToString(AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture)); + return new Condition(ToString(type), CURRENT_TIME_CONDITION_KEY, date.ToString(AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture)); } /// @@ -265,7 +265,7 @@ public static Condition NewCondition(DateComparisonType type, DateTime date) /// The date to compare against. public static Condition NewConditionUtc(DateComparisonType type, DateTime date) { - return new Condition(type.ToString(), CURRENT_TIME_CONDITION_KEY, date.ToUniversalTime().ToString(AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture)); + return new Condition(ToString(type), CURRENT_TIME_CONDITION_KEY, date.ToUniversalTime().ToString(AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture)); } /// @@ -298,7 +298,7 @@ public static Condition NewIpAddressCondition(string ipAddressRange) /// The CIDR IP range involved in the policy condition. public static Condition NewCondition(IpAddressComparisonType type, string ipAddressRange) { - return new Condition(type.ToString(), SOURCE_IP_CONDITION_KEY, ipAddressRange); + return new Condition(ToString(type), SOURCE_IP_CONDITION_KEY, ipAddressRange); } /// @@ -310,7 +310,7 @@ public static Condition NewCondition(IpAddressComparisonType type, string ipAddr /// The second number to compare against. public static Condition NewCondition(NumericComparisonType type, string key, string value) { - return new Condition(type.ToString(), key, value); + return new Condition(ToString(type), key, value); } /// @@ -329,7 +329,7 @@ public static Condition NewCondition(NumericComparisonType type, string key, str /// public static Condition NewCondition(StringComparisonType type, string key, string value) { - return new Condition(type.ToString(), key, value); + return new Condition(ToString(type), key, value); } /// @@ -376,5 +376,98 @@ public static Condition NewSecureTransportCondition() { return NewCondition(SECURE_TRANSPORT_CONDITION_KEY, true); } + + private static string ToString(ArnComparisonType type) + { + switch (type) + { + case ArnComparisonType.ArnEquals: + return nameof(ArnComparisonType.ArnEquals); + case ArnComparisonType.ArnLike: + return nameof(ArnComparisonType.ArnLike); + case ArnComparisonType.ArnNotEquals: + return nameof(ArnComparisonType.ArnNotEquals); + case ArnComparisonType.ArnNotLike: + return nameof(ArnComparisonType.ArnNotLike); + default: + return type.ToString(); + } + } + + private static string ToString(DateComparisonType type) + { + switch (type) + { + case DateComparisonType.DateEquals: + return nameof(DateComparisonType.DateEquals); + case DateComparisonType.DateGreaterThan: + return nameof(DateComparisonType.DateGreaterThan); + case DateComparisonType.DateGreaterThanEquals: + return nameof(DateComparisonType.DateGreaterThanEquals); + case DateComparisonType.DateLessThan: + return nameof(DateComparisonType.DateLessThan); + case DateComparisonType.DateLessThanEquals: + return nameof(DateComparisonType.DateLessThanEquals); + case DateComparisonType.DateNotEquals: + return nameof(DateComparisonType.DateNotEquals); + default: + return type.ToString(); + } + } + + private static string ToString(IpAddressComparisonType type) + { + switch (type) + { + case IpAddressComparisonType.IpAddress: + return nameof(IpAddressComparisonType.IpAddress); + case IpAddressComparisonType.NotIpAddress: + return nameof(IpAddressComparisonType.NotIpAddress); + default: + return type.ToString(); + } + } + + private static string ToString(NumericComparisonType type) + { + switch (type) + { + case NumericComparisonType.NumericEquals: + return nameof(NumericComparisonType.NumericEquals); + case NumericComparisonType.NumericGreaterThan: + return nameof(NumericComparisonType.NumericGreaterThan); + case NumericComparisonType.NumericGreaterThanEquals: + return nameof(NumericComparisonType.NumericGreaterThanEquals); + case NumericComparisonType.NumericLessThan: + return nameof(NumericComparisonType.NumericLessThan); + case NumericComparisonType.NumericLessThanEquals: + return nameof(NumericComparisonType.NumericLessThanEquals); + case NumericComparisonType.NumericNotEquals: + return nameof(NumericComparisonType.NumericNotEquals); + default: + return type.ToString(); + } + } + + private static string ToString(StringComparisonType type) + { + switch (type) + { + case StringComparisonType.StringEquals: + return nameof(StringComparisonType.StringEquals); + case StringComparisonType.StringEqualsIgnoreCase: + return nameof(StringComparisonType.StringEqualsIgnoreCase); + case StringComparisonType.StringLike: + return nameof(StringComparisonType.StringLike); + case StringComparisonType.StringNotEquals: + return nameof(StringComparisonType.StringNotEquals); + case StringComparisonType.StringNotEqualsIgnoreCase: + return nameof(StringComparisonType.StringNotEqualsIgnoreCase); + case StringComparisonType.StringNotLike: + return nameof(StringComparisonType.StringNotLike); + default: + return type.ToString(); + } + } } } diff --git a/sdk/test/UnitTests/Custom/PolicyTests.cs b/sdk/test/UnitTests/Custom/PolicyTests.cs index 235239a5108a..808755f1ff80 100644 --- a/sdk/test/UnitTests/Custom/PolicyTests.cs +++ b/sdk/test/UnitTests/Custom/PolicyTests.cs @@ -6,6 +6,8 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Amazon.Auth.AccessControlPolicy; +using AWSSDK_DotNet.IntegrationTests.Utils; +using static Amazon.Auth.AccessControlPolicy.ConditionFactory; namespace AWSSDK_DotNet.UnitTests { @@ -102,5 +104,55 @@ public void CheckIfStatementExists_DoesCaseInsensitiveComparisonOnActions() Assert.IsTrue(result); } + + [TestMethod] + public void LookForArnComparisonTypeChanges() + { + var expectedHash = "93F200C066AF797AE2A923313D16DD1737AB26D8041C03F68E2BC9FAB03F464A"; + AssertExtensions.AssertEnumUnchanged( + typeof(ArnComparisonType), + expectedHash, + "The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(ArnComparisonType) method implementation may need to be updated."); + } + + [TestMethod] + public void LookForDateComparisonTypeChanges() + { + var expectedHash = "929F27F8B4A0619A30D90F35429690BE334B14D4881EF47311FDEB5696D27DEF"; + AssertExtensions.AssertEnumUnchanged( + typeof(DateComparisonType), + expectedHash, + "The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(DateComparisonType) method implementation may need to be updated."); + } + + [TestMethod] + public void LookForIpAddressComparisonTypeChanges() + { + var expectedHash = "440711FCA8408753BAEC4D1ECA39F813477A43DCA988924E0260A28359F53B78"; + AssertExtensions.AssertEnumUnchanged( + typeof(IpAddressComparisonType), + expectedHash, + "The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(DateComparisonType) method implementation may need to be updated."); + } + + [TestMethod] + public void LookForNumericComparisonTypeChanges() + { + var expectedHash = "15808022DE81B0A1C62DBB9238EA542B891EDE6840278508C1FBFC4A6ACC829D"; + AssertExtensions.AssertEnumUnchanged( + typeof(NumericComparisonType), + expectedHash, + "The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(DateComparisonType) method implementation may need to be updated."); + } + + [TestMethod] + public void LookForStringComparisonTypeChanges() + { + var expectedHash = "8466438D83763A3ADE2161964A9C3A68E247BC576A40956D5295382C74D8FB22"; + AssertExtensions.AssertEnumUnchanged( + typeof(StringComparisonType), + expectedHash, + "The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(DateComparisonType) method implementation may need to be updated."); + } } }