Skip to content

Commit 36fe8f9

Browse files
feat(rds-utils): support eu,au,uk and rds-fips RDS domains (#222)
1 parent 46cf6d0 commit 36fe8f9

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

AwsWrapperDataProvider.Tests/Driver/Utils/RdsUtilsTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ public class RdsUtilsTests
3131
private const string UsEastRegionLimitlessDbShardGroup =
3232
"database-test-name.shardgrp-XYZ.us-east-2.rds.amazonaws.com";
3333

34+
private const string EuRedshift =
35+
"redshift-test-name.XYZ.eusc-de-east-1.rds.amazonaws.eu";
36+
private const string AuRegionInstance =
37+
"instance-test-name.XYZ.ap-southeast-2.rds.amazonaws.au";
38+
private const string UkRegionInstance =
39+
"instance-test-name.XYZ.eu-west-2.rds.amazonaws.uk";
40+
private const string RdsFipsInstance =
41+
"instance-test-name.XYZ.us-east-1.rds-fips.amazonaws.com";
42+
3443
private const string ChinaRegionCluster =
3544
"database-test-name.cluster-XYZ.rds.cn-northwest-1.amazonaws.com.cn";
3645
private const string ChinaRegionClusterReadOnly =
@@ -95,6 +104,10 @@ public class RdsUtilsTests
95104
private const string UsIsoEastRegionHostPattern = "?.XYZ.rds.us-iso-east-1.c2s.ic.gov";
96105
private const string ChinaRegionHostPattern = "?.XYZ.rds.cn-northwest-1.amazonaws.com.cn";
97106
private const string OldChinaRegionHostPattern = "?.XYZ.cn-northwest-1.rds.amazonaws.com.cn";
107+
private const string EuRedshiftHostPattern = "?.XYZ.eusc-de-east-1.rds.amazonaws.eu";
108+
private const string AuRegionHostPattern = "?.XYZ.ap-southeast-2.rds.amazonaws.au";
109+
private const string UkRegionHostPattern = "?.XYZ.eu-west-2.rds.amazonaws.uk";
110+
private const string RdsFipsHostPattern = "?.XYZ.us-east-1.rds-fips.amazonaws.com";
98111

99112
public static IEnumerable<object?[]> IdentifyRdsTypeTestData()
100113
{
@@ -104,6 +117,10 @@ public class RdsUtilsTests
104117
yield return new object?[] { UsEastRegionProxy, RdsUrlType.RdsProxy };
105118
yield return new object?[] { UsEastRegionInstance, RdsUrlType.RdsInstance };
106119
yield return new object?[] { UsEastRegionLimitlessDbShardGroup, RdsUrlType.RdsAuroraLimitlessDbShardGroup };
120+
yield return new object?[] { EuRedshift, RdsUrlType.RdsInstance };
121+
yield return new object?[] { AuRegionInstance, RdsUrlType.RdsInstance };
122+
yield return new object?[] { UkRegionInstance, RdsUrlType.RdsInstance };
123+
yield return new object?[] { RdsFipsInstance, RdsUrlType.RdsInstance };
107124
yield return new object?[] { "192.168.1.1", RdsUrlType.IpAddress };
108125
yield return new object?[] { "2001:0db8:85a3:0000:0000:8a2e:0370:7334", RdsUrlType.IpAddress };
109126
yield return new object?[] { "2001:db8::8a2e:370:7334", RdsUrlType.IpAddress };
@@ -167,6 +184,10 @@ public void IdentifyRdsType_ShouldReturnCorrectType(string? host, RdsUrlType exp
167184
[InlineData(UsEastRegionProxy, "proxy-test-name")]
168185
[InlineData(UsEastRegionCustomDomain, "custom-test-name")]
169186
[InlineData(UsEastRegionLimitlessDbShardGroup, "database-test-name")]
187+
[InlineData(EuRedshift, "redshift-test-name")]
188+
[InlineData(AuRegionInstance, "instance-test-name")]
189+
[InlineData(UkRegionInstance, "instance-test-name")]
190+
[InlineData(RdsFipsInstance, "instance-test-name")]
170191
[InlineData("192.168.1.1", null)]
171192
[InlineData("example.com", null)]
172193
[InlineData("", null)]
@@ -232,6 +253,10 @@ public void GetRdsInstanceId_WithElbUrl_ShouldReturnNull()
232253
[InlineData(UsEastRegionHostPattern, UsEastRegionInstance)]
233254
[InlineData(UsEastRegionHostPattern, UsEastRegionLimitlessDbShardGroup)]
234255
[InlineData(UsEastRegionHostPattern, UsEastRegionProxy)]
256+
[InlineData(EuRedshiftHostPattern, EuRedshift)]
257+
[InlineData(AuRegionHostPattern, AuRegionInstance)]
258+
[InlineData(UkRegionHostPattern, UkRegionInstance)]
259+
[InlineData(RdsFipsHostPattern, RdsFipsInstance)]
235260

236261
[InlineData(UsGovEastRegionHostPattern, UsGovEastRegionCluster)]
237262

AwsWrapperDataProvider/Driver/Utils/RdsUtils.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,31 +26,31 @@ public static partial class RdsUtils
2626
private const string RegionGroup = "region";
2727

2828
// Regular expression patterns for different AWS RDS endpoint types
29-
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>proxy-|cluster-|cluster-ro-|cluster-custom-|shardgrp-)?(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.rds\.amazonaws\.com\.?)$", RegexOptions.IgnoreCase, "en-CA")]
29+
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>proxy-|cluster-|cluster-ro-|cluster-custom-|shardgrp-)?(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.(rds|rds-fips)\.amazonaws\.(com|au|eu|uk)\.?)$", RegexOptions.IgnoreCase, "en-CA")]
3030
private static partial Regex AuroraDnsPattern();
3131

32-
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>cluster-|cluster-ro-)(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.rds\.amazonaws\.com\.?)$", RegexOptions.IgnoreCase, "en-CA")]
32+
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>cluster-|cluster-ro-)(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.(rds|rds-fips)\.amazonaws\.(com|au|eu|uk)\.?)$", RegexOptions.IgnoreCase, "en-CA")]
3333
private static partial Regex AuroraClusterPattern();
3434

35-
[GeneratedRegex(@"(?<instance>.+)\.(?<dns>shardgrp-)+(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.rds\.(amazonaws\.com\.?|amazonaws\.com\.cn\.?|sc2s\.sgov\.gov\.?|c2s\.ic\.gov\.?))$", RegexOptions.IgnoreCase, "en-CA")]
35+
[GeneratedRegex(@"(?<instance>.+)\.(?<dns>shardgrp-)+(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.(rds|rds-fips)\.(amazonaws\.(com|au|eu|uk)\.?|amazonaws\.com\.cn\.?|sc2s\.sgov\.gov\.?|c2s\.ic\.gov\.?))$", RegexOptions.IgnoreCase, "en-CA")]
3636
private static partial Regex AuroraLimitlessClusterPattern();
3737

38-
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>proxy-|cluster-|cluster-ro-|cluster-custom-|shardgrp-)?(?<domain>[a-zA-Z0-9]+\.rds\.(?<region>[a-zA-Z0-9\-]+)\.amazonaws\.com\.cn\.?)$", RegexOptions.IgnoreCase, "en-CA")]
38+
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>proxy-|cluster-|cluster-ro-|cluster-custom-|shardgrp-)?(?<domain>[a-zA-Z0-9]+\.(rds|rds-fips)\.(?<region>[a-zA-Z0-9\-]+)\.amazonaws\.com\.cn\.?)$", RegexOptions.IgnoreCase, "en-CA")]
3939
private static partial Regex AuroraChinaDnsPattern();
4040

41-
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>cluster-|cluster-ro-)(?<domain>[a-zA-Z0-9]+\.rds\.(?<region>[a-zA-Z0-9\-]+)\.amazonaws\.com\.cn\.?)$", RegexOptions.IgnoreCase, "en-CA")]
41+
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>cluster-|cluster-ro-)(?<domain>[a-zA-Z0-9]+\.(rds|rds-fips)\.(?<region>[a-zA-Z0-9\-]+)\.amazonaws\.com\.cn\.?)$", RegexOptions.IgnoreCase, "en-CA")]
4242
private static partial Regex AuroraChinaClusterPattern();
4343

44-
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>proxy-|cluster-|cluster-ro-|cluster-custom-|shardgrp-)?(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.rds\.amazonaws\.com\.cn\.?)$", RegexOptions.IgnoreCase, "en-CA")]
44+
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>proxy-|cluster-|cluster-ro-|cluster-custom-|shardgrp-)?(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.(rds|rds-fips)\.amazonaws\.com\.cn\.?)$", RegexOptions.IgnoreCase, "en-CA")]
4545
private static partial Regex AuroraOldChinaDnsPattern();
4646

47-
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>cluster-|cluster-ro-)(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.rds\.amazonaws\.com\.cn\.?)$", RegexOptions.IgnoreCase, "en-CA")]
47+
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>cluster-|cluster-ro-)(?<domain>[a-zA-Z0-9]+\.(?<region>[a-zA-Z0-9\-]+)\.(rds|rds-fips)\.amazonaws\.com\.cn\.?)$", RegexOptions.IgnoreCase, "en-CA")]
4848
private static partial Regex AuroraOldChinaClusterPattern();
4949

50-
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>proxy-|cluster-|cluster-ro-|cluster-custom-|shardgrp-)?(?<domain>[a-zA-Z0-9]+\.rds\.(?<region>[a-zA-Z0-9\-]+)\.(amazonaws\.com\.?|c2s\.ic\.gov\.?|sc2s\.sgov\.gov\.?))$", RegexOptions.IgnoreCase, "en-CA")]
50+
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>proxy-|cluster-|cluster-ro-|cluster-custom-|shardgrp-)?(?<domain>[a-zA-Z0-9]+\.(rds|rds-fips)\.(?<region>[a-zA-Z0-9\-]+)\.(amazonaws\.com\.?|c2s\.ic\.gov\.?|sc2s\.sgov\.gov\.?))$", RegexOptions.IgnoreCase, "en-CA")]
5151
private static partial Regex AuroraGovDnsPattern();
5252

53-
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>cluster-|cluster-ro-)(?<domain>[a-zA-Z0-9]+\.rds\.(?<region>[a-zA-Z0-9\-]+)\.(amazonaws\.com\.?|c2s\.ic\.gov\.?|sc2s\.sgov\.gov\.?))$", RegexOptions.IgnoreCase, "en-CA")]
53+
[GeneratedRegex(@"^(?<instance>.+)\.(?<dns>cluster-|cluster-ro-)(?<domain>[a-zA-Z0-9]+\.(rds|rds-fips)\.(?<region>[a-zA-Z0-9\-]+)\.(amazonaws\.com\.?|c2s\.ic\.gov\.?|sc2s\.sgov\.gov\.?))$", RegexOptions.IgnoreCase, "en-CA")]
5454
private static partial Regex AuroraGovClusterPattern();
5555

5656
private static readonly Regex[] AuroraDnsPatterns = [AuroraDnsPattern(), AuroraChinaDnsPattern(), AuroraOldChinaDnsPattern(), AuroraGovDnsPattern()];

0 commit comments

Comments
 (0)