Skip to content

Commit c972fc5

Browse files
author
John Paul Kee
committed
Update permissive record matcher based on feedback
1 parent 401e987 commit c972fc5

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

src/Sql/Sql.Test/UnitTests/PermissiveRecordMatcherWithApiExclusionUnitTests.cs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,21 @@ public void PermissiveRecordMatcherWithApiExclusion_ContainsIgnoredProvider()
1717
{
1818
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/providers/Microsoft.Sql?api-version=2016-09-01",
1919
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourcegroups/ps8625?api-version=2016-09-01",
20+
21+
// - The above uris should be ignored
2022
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/providers/Microsoft.Sql/virtualClusters?api-version=2015-05-01-preview",
23+
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourceGroups/ps8625/providers/Microsoft.Sql/virtualClusters?api-version=2015-05-01-preview",
24+
2125
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourceGroups/ps8625/providers/Microsoft.Network/virtualNetworks/cl_initial?api-version=2018-12-01",
26+
27+
"/subscriptions/4cac86b0-1e56-48c2-9df2-669a6d2d87c5/providers/Microsoft.Sql/managedInstances",
28+
"/subscriptions/4cac86b0-1e56-48c2-9df2-669a6d2d87c5/resourceGroups/ps8625/providers/Microsoft.Sql/managedInstances",
2229
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourceGroups/ps8625/providers/Microsoft.Sql/managedInstances/ps8807?api-version=2015-05-01-preview",
23-
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourceGroups/ps8625/providers/Microsoft.Sql/servers/ps8807?api-version=2015-05-01-preview",
24-
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourceGroups/ps8625/providers/Microsoft.Sql/virtualClusters?api-version=2015-05-01-preview",
30+
"/subscriptions/cca24ec8-99b5-4aa7-9ff6-486e886f304c/resourceGroups/cl_one/providers/Microsoft.Sql/managedInstances/dc-cmdlet-serverps8052?api-version=2018-06-01-preview",
31+
2532
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourceGroups/ps8625/providers/Microsoft.Sql/managedInstances/ps8807/managedDatabases/db1?api-version=2017-03-01-preview",
33+
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourceGroups/ps8625/providers/Microsoft.Sql/servers/ps8807?api-version=2015-05-01-preview",
2634
"/subscriptions/a8c9a924-06c0-4bde-9788-e7b1370969e1/resourceGroups/ps8625/providers/Microsoft.Sql/servers/ps8807/databases/testdb?api-version=2017-03-01-preview",
27-
"/subscriptions/4cac86b0-1e56-48c2-9df2-669a6d2d87c5/providers/Microsoft.Sql/managedInstances",
28-
"/subscriptions/4cac86b0-1e56-48c2-9df2-669a6d2d87c5/resourceGroups/ps8625/providers/Microsoft.Sql/managedInstances"
2935
};
3036

3137
TestContainsIgnoredProvider(
@@ -39,15 +45,21 @@ public void PermissiveRecordMatcherWithApiExclusion_ContainsIgnoredProvider()
3945
{
4046
"Microsoft.Sql/managedInstances",
4147
},
42-
expectedNumIgnored: 3);
48+
expectedNumIgnored: 4);
4349

50+
var len = testRequestUris.Count();
4451
TestContainsIgnoredProvider(
4552
requestUrisToTest: testRequestUris,
46-
resourcesToIgnore: new string[1]
53+
resourcesToIgnore: new string[6]
4754
{
48-
"Microsoft.Sql/managedInstances/managedDatabases"
55+
"Microsoft.Network/virtualNetworks",
56+
"Microsoft.Sql/virtualClusters",
57+
"Microsoft.Sql/managedInstances",
58+
"Microsoft.Sql/managedInstances/managedDatabases",
59+
"Microsoft.Sql/servers",
60+
"Microsoft.Sql/servers/databases"
4961
},
50-
expectedNumIgnored: 1);
62+
expectedNumIgnored: 10);
5163
}
5264

5365
private void TestContainsIgnoredProvider(

tools/ScenarioTest.ResourceManager/PermissiveRecordMatcherWithApiExclusion.cs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,13 @@ public static bool ContainsIgnoredProvider(
167167
// If we're looking at a specific provider and we have top level resource from this provider to ignore
168168
foreach (var resourceToIgnore in resourcesToIgnore)
169169
{
170-
var segments = requestUri.Split('/');
170+
string[] segments = requestUri.Split(new char[] { '/' }, options: StringSplitOptions.RemoveEmptyEntries);
171171

172172
// /subscriptions/.../resourceGroups/.../providers/Microsoft.X/resourceType...?api-version=Y
173-
if (requestUri.Contains("resourceGroups/") && requestUri.Contains("providers/"))
173+
var regex = new Regex(@"\/subscriptions\/[0-9A-Fa-f-]*\/resourceGroups\/[a-zA-Z0-9_-]*\/providers\/[a-zA-Z0-9_-]*.[a-zA-Z0-9_-]*\/.*[?api-version=[0-9-]*]?");
174+
if (regex.IsMatch(requestUri))
174175
{
175-
if (segments.Length > 8)
176+
if (segments.Length > 7)
176177
{
177178
var resourceIdentifier = new ResourceIdentifier(requestUri);
178179
if (resourceIdentifier.ResourceType == resourceToIgnore)
@@ -181,9 +182,9 @@ public static bool ContainsIgnoredProvider(
181182
return true;
182183
}
183184
}
184-
else if (segments.Length == 8)
185+
else if (segments.Length == 7)
185186
{
186-
var resourceType = $"{segments[6]}/{segments[7]}";
187+
var resourceType = $"{segments[5]}/{segments[6]}";
187188
if (resourceType.Contains(resourceToIgnore))
188189
{
189190
apiVersion = String.Empty;
@@ -193,16 +194,14 @@ public static bool ContainsIgnoredProvider(
193194
}
194195

195196
// /subscriptions/.../providers/Microsoft.Provider/resourceType
196-
if (requestUri.Contains("providers/"))
197+
regex = new Regex(@"\/subscriptions\/[0-9A-Fa-f-]*\/providers\/[a-zA-Z0-9_-]*.[a-zA-Z0-9_-]*\/.*?[api-version=[0-9-]*]?");
198+
if (regex.IsMatch(requestUri))
197199
{
198-
if (segments.Length == 6)
200+
var resourceType = $"{segments[3]}/{segments[4]}";
201+
if (resourceType.Contains(resourceToIgnore))
199202
{
200-
var resourceType = $"{segments[4]}/{segments[5]}";
201-
if (resourceType.Contains(resourceToIgnore))
202-
{
203-
apiVersion = String.Empty;
204-
return true;
205-
}
203+
apiVersion = String.Empty;
204+
return true;
206205
}
207206
}
208207
}

0 commit comments

Comments
 (0)