Skip to content

Commit e7ff3a9

Browse files
authored
Add ToString methods for better enum string conversion (#3458)
* Add ToString methods for better enum string conversion Added private ToString methods for various comparison enums in ConditionFactory.cs to improve readability and maintainability. Updated NewCondition methods to use these new ToString methods for consistent string representation. Also, optimized boolean conversion to string using a ternary operator. * Add enum integrity tests and new build config file Updated PolicyTests.cs to include additional namespaces and added new test methods to verify the integrity of various enums by comparing their hashes to expected values. Introduced a new configuration file, AWSSDK.NetFramework.lutconfig, to specify build and test settings, including enabling parallel builds and setting a test case timeout.
1 parent cb99209 commit e7ff3a9

File tree

2 files changed

+155
-10
lines changed

2 files changed

+155
-10
lines changed

sdk/src/Core/Amazon.Auth/AccessControlPolicy/ConditionFactory.cs

Lines changed: 103 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public static partial class ConditionFactory
102102
/// <summary>
103103
/// Enumeration of the supported ways an ARN comparison can be evaluated.
104104
/// </summary>
105-
public enum ArnComparisonType
105+
public enum ArnComparisonType
106106
{
107107
/// <summary>Exact matching</summary>
108108
ArnEquals,
@@ -177,7 +177,7 @@ public enum NumericComparisonType
177177
/// <summary>
178178
/// Enumeration of the supported ways a string comparison can be evaluated.
179179
/// </summary>
180-
public enum StringComparisonType
180+
public enum StringComparisonType
181181
{
182182
/// <summary>
183183
/// Case-sensitive exact string matching
@@ -220,9 +220,9 @@ public enum StringComparisonType
220220
/// <param name="type">The type of comparison to perform.</param>
221221
/// <param name="value">The second ARN to compare against. When using ArnLike or ArnNotLike this may contain the
222222
/// multi-character wildcard (*) or the single-character wildcard</param>
223-
public static Condition NewCondition(ArnComparisonType type, string key, string value)
223+
public static Condition NewCondition(ArnComparisonType type, string key, string value)
224224
{
225-
return new Condition(type.ToString(), key, value);
225+
return new Condition(ToString(type), key, value);
226226
}
227227

228228
/// <summary>
@@ -234,7 +234,7 @@ public static Condition NewCondition(ArnComparisonType type, string key, string
234234
/// <param name="value">The boolean to compare against.</param>
235235
public static Condition NewCondition(string key, bool value)
236236
{
237-
return new Condition("Bool", key, value.ToString().ToLowerInvariant());
237+
return new Condition("Bool", key, value ? "true" : "false");
238238
}
239239

240240
/// <summary>
@@ -251,7 +251,7 @@ public static Condition NewCondition(string key, bool value)
251251
[Obsolete("Invoking this method results in non-UTC DateTimes not being marshalled correctly. Use NewConditionUtc instead.", false)]
252252
public static Condition NewCondition(DateComparisonType type, DateTime date)
253253
{
254-
return new Condition(type.ToString(), CURRENT_TIME_CONDITION_KEY, date.ToString(AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture));
254+
return new Condition(ToString(type), CURRENT_TIME_CONDITION_KEY, date.ToString(AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture));
255255
}
256256

257257
/// <summary>
@@ -265,7 +265,7 @@ public static Condition NewCondition(DateComparisonType type, DateTime date)
265265
/// <param name="date">The date to compare against.</param>
266266
public static Condition NewConditionUtc(DateComparisonType type, DateTime date)
267267
{
268-
return new Condition(type.ToString(), CURRENT_TIME_CONDITION_KEY, date.ToUniversalTime().ToString(AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture));
268+
return new Condition(ToString(type), CURRENT_TIME_CONDITION_KEY, date.ToUniversalTime().ToString(AWSSDKUtils.ISO8601DateFormat, CultureInfo.InvariantCulture));
269269
}
270270

271271
/// <summary>
@@ -298,7 +298,7 @@ public static Condition NewIpAddressCondition(string ipAddressRange)
298298
/// <param name="ipAddressRange">The CIDR IP range involved in the policy condition.</param>
299299
public static Condition NewCondition(IpAddressComparisonType type, string ipAddressRange)
300300
{
301-
return new Condition(type.ToString(), SOURCE_IP_CONDITION_KEY, ipAddressRange);
301+
return new Condition(ToString(type), SOURCE_IP_CONDITION_KEY, ipAddressRange);
302302
}
303303

304304
/// <summary>
@@ -310,7 +310,7 @@ public static Condition NewCondition(IpAddressComparisonType type, string ipAddr
310310
/// <param name="value">The second number to compare against.</param>
311311
public static Condition NewCondition(NumericComparisonType type, string key, string value)
312312
{
313-
return new Condition(type.ToString(), key, value);
313+
return new Condition(ToString(type), key, value);
314314
}
315315

316316
/// <summary>
@@ -329,7 +329,7 @@ public static Condition NewCondition(NumericComparisonType type, string key, str
329329
/// </param>
330330
public static Condition NewCondition(StringComparisonType type, string key, string value)
331331
{
332-
return new Condition(type.ToString(), key, value);
332+
return new Condition(ToString(type), key, value);
333333
}
334334

335335
/// <summary>
@@ -376,5 +376,98 @@ public static Condition NewSecureTransportCondition()
376376
{
377377
return NewCondition(SECURE_TRANSPORT_CONDITION_KEY, true);
378378
}
379+
380+
private static string ToString(ArnComparisonType type)
381+
{
382+
switch (type)
383+
{
384+
case ArnComparisonType.ArnEquals:
385+
return nameof(ArnComparisonType.ArnEquals);
386+
case ArnComparisonType.ArnLike:
387+
return nameof(ArnComparisonType.ArnLike);
388+
case ArnComparisonType.ArnNotEquals:
389+
return nameof(ArnComparisonType.ArnNotEquals);
390+
case ArnComparisonType.ArnNotLike:
391+
return nameof(ArnComparisonType.ArnNotLike);
392+
default:
393+
return type.ToString();
394+
}
395+
}
396+
397+
private static string ToString(DateComparisonType type)
398+
{
399+
switch (type)
400+
{
401+
case DateComparisonType.DateEquals:
402+
return nameof(DateComparisonType.DateEquals);
403+
case DateComparisonType.DateGreaterThan:
404+
return nameof(DateComparisonType.DateGreaterThan);
405+
case DateComparisonType.DateGreaterThanEquals:
406+
return nameof(DateComparisonType.DateGreaterThanEquals);
407+
case DateComparisonType.DateLessThan:
408+
return nameof(DateComparisonType.DateLessThan);
409+
case DateComparisonType.DateLessThanEquals:
410+
return nameof(DateComparisonType.DateLessThanEquals);
411+
case DateComparisonType.DateNotEquals:
412+
return nameof(DateComparisonType.DateNotEquals);
413+
default:
414+
return type.ToString();
415+
}
416+
}
417+
418+
private static string ToString(IpAddressComparisonType type)
419+
{
420+
switch (type)
421+
{
422+
case IpAddressComparisonType.IpAddress:
423+
return nameof(IpAddressComparisonType.IpAddress);
424+
case IpAddressComparisonType.NotIpAddress:
425+
return nameof(IpAddressComparisonType.NotIpAddress);
426+
default:
427+
return type.ToString();
428+
}
429+
}
430+
431+
private static string ToString(NumericComparisonType type)
432+
{
433+
switch (type)
434+
{
435+
case NumericComparisonType.NumericEquals:
436+
return nameof(NumericComparisonType.NumericEquals);
437+
case NumericComparisonType.NumericGreaterThan:
438+
return nameof(NumericComparisonType.NumericGreaterThan);
439+
case NumericComparisonType.NumericGreaterThanEquals:
440+
return nameof(NumericComparisonType.NumericGreaterThanEquals);
441+
case NumericComparisonType.NumericLessThan:
442+
return nameof(NumericComparisonType.NumericLessThan);
443+
case NumericComparisonType.NumericLessThanEquals:
444+
return nameof(NumericComparisonType.NumericLessThanEquals);
445+
case NumericComparisonType.NumericNotEquals:
446+
return nameof(NumericComparisonType.NumericNotEquals);
447+
default:
448+
return type.ToString();
449+
}
450+
}
451+
452+
private static string ToString(StringComparisonType type)
453+
{
454+
switch (type)
455+
{
456+
case StringComparisonType.StringEquals:
457+
return nameof(StringComparisonType.StringEquals);
458+
case StringComparisonType.StringEqualsIgnoreCase:
459+
return nameof(StringComparisonType.StringEqualsIgnoreCase);
460+
case StringComparisonType.StringLike:
461+
return nameof(StringComparisonType.StringLike);
462+
case StringComparisonType.StringNotEquals:
463+
return nameof(StringComparisonType.StringNotEquals);
464+
case StringComparisonType.StringNotEqualsIgnoreCase:
465+
return nameof(StringComparisonType.StringNotEqualsIgnoreCase);
466+
case StringComparisonType.StringNotLike:
467+
return nameof(StringComparisonType.StringNotLike);
468+
default:
469+
return type.ToString();
470+
}
471+
}
379472
}
380473
}

sdk/test/UnitTests/Custom/PolicyTests.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
using Microsoft.VisualStudio.TestTools.UnitTesting;
77

88
using Amazon.Auth.AccessControlPolicy;
9+
using AWSSDK_DotNet.IntegrationTests.Utils;
10+
using static Amazon.Auth.AccessControlPolicy.ConditionFactory;
911

1012
namespace AWSSDK_DotNet.UnitTests
1113
{
@@ -102,5 +104,55 @@ public void CheckIfStatementExists_DoesCaseInsensitiveComparisonOnActions()
102104

103105
Assert.IsTrue(result);
104106
}
107+
108+
[TestMethod]
109+
public void LookForArnComparisonTypeChanges()
110+
{
111+
var expectedHash = "93F200C066AF797AE2A923313D16DD1737AB26D8041C03F68E2BC9FAB03F464A";
112+
AssertExtensions.AssertEnumUnchanged(
113+
typeof(ArnComparisonType),
114+
expectedHash,
115+
"The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(ArnComparisonType) method implementation may need to be updated.");
116+
}
117+
118+
[TestMethod]
119+
public void LookForDateComparisonTypeChanges()
120+
{
121+
var expectedHash = "929F27F8B4A0619A30D90F35429690BE334B14D4881EF47311FDEB5696D27DEF";
122+
AssertExtensions.AssertEnumUnchanged(
123+
typeof(DateComparisonType),
124+
expectedHash,
125+
"The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(DateComparisonType) method implementation may need to be updated.");
126+
}
127+
128+
[TestMethod]
129+
public void LookForIpAddressComparisonTypeChanges()
130+
{
131+
var expectedHash = "440711FCA8408753BAEC4D1ECA39F813477A43DCA988924E0260A28359F53B78";
132+
AssertExtensions.AssertEnumUnchanged(
133+
typeof(IpAddressComparisonType),
134+
expectedHash,
135+
"The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(DateComparisonType) method implementation may need to be updated.");
136+
}
137+
138+
[TestMethod]
139+
public void LookForNumericComparisonTypeChanges()
140+
{
141+
var expectedHash = "15808022DE81B0A1C62DBB9238EA542B891EDE6840278508C1FBFC4A6ACC829D";
142+
AssertExtensions.AssertEnumUnchanged(
143+
typeof(NumericComparisonType),
144+
expectedHash,
145+
"The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(DateComparisonType) method implementation may need to be updated.");
146+
}
147+
148+
[TestMethod]
149+
public void LookForStringComparisonTypeChanges()
150+
{
151+
var expectedHash = "8466438D83763A3ADE2161964A9C3A68E247BC576A40956D5295382C74D8FB22";
152+
AssertExtensions.AssertEnumUnchanged(
153+
typeof(StringComparisonType),
154+
expectedHash,
155+
"The Amazon.Auth.AccessControlPolicy.ConditionFactory.ToString(DateComparisonType) method implementation may need to be updated.");
156+
}
105157
}
106158
}

0 commit comments

Comments
 (0)