Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit 1a57643

Browse files
f-alizadaFarhad Alizada
andauthored
Fetch resource policy instead of policies (#842)
* Fetch resource policy instead of policies * Typos and spaces fixed Co-authored-by: Farhad Alizada <falizada@microsoft.com>
1 parent 6c222d0 commit 1a57643

30 files changed

+283
-58
lines changed

src/ArmTemplates/Common/API/Clients/Policy/PolicyClient.cs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// --------------------------------------------------------------------------
55

66
using System.Linq;
7+
using System.Net;
78
using System.Net.Http;
89
using System.Threading.Tasks;
910
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clients.Abstractions;
@@ -16,9 +17,9 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.API.Clien
1617
public class PolicyClient : ApiClientBase, IPolicyClient
1718
{
1819
const string GetGlobalServicePolicyRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/policies/policy?api-version={4}&format=rawxml";
19-
const string GetPolicyLinkedToProductRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/products/{4}/policies?api-version={5}&format=rawxml";
20-
const string GetPolicyLinkedToApiRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/policies?api-version={5}&format=rawxml";
21-
const string GetPolicyLinkedToApiOperationRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/operations/{5}/policies?api-version={6}&format=rawxml";
20+
const string GetPolicyLinkedToProductRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/products/{4}/policies/policy?api-version={5}&format=rawxml";
21+
const string GetPolicyLinkedToApiRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/policies/policy?api-version={5}&format=rawxml";
22+
const string GetPolicyLinkedToApiOperationRequest = "{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}/operations/{5}/policies/policy?api-version={6}&format=rawxml";
2223

2324
public PolicyClient(IHttpClientFactory httpClientFactory) : base(httpClientFactory)
2425
{
@@ -41,8 +42,7 @@ public async Task<PolicyTemplateResource> GetPolicyLinkedToProductAsync(string p
4142
string requestUrl = string.Format(GetPolicyLinkedToProductRequest,
4243
this.BaseUrl, azSubId, extractorParameters.ResourceGroup, extractorParameters.SourceApimName, productName, GlobalConstants.ApiVersion);
4344

44-
var policies = await this.GetPagedResponseAsync<PolicyTemplateResource>(azToken, requestUrl);
45-
return policies.FirstOrDefault();
45+
return await this.FetchResourcePolicyTemplateAsync(azToken, requestUrl);
4646
}
4747

4848
public async Task<PolicyTemplateResource> GetPolicyLinkedToApiAsync(string apiName, ExtractorParameters extractorParameters)
@@ -52,8 +52,7 @@ public async Task<PolicyTemplateResource> GetPolicyLinkedToApiAsync(string apiNa
5252
string requestUrl = string.Format(GetPolicyLinkedToApiRequest,
5353
this.BaseUrl, azSubId, extractorParameters.ResourceGroup, extractorParameters.SourceApimName, apiName, GlobalConstants.ApiVersion);
5454

55-
var policies = await this.GetPagedResponseAsync<PolicyTemplateResource>(azToken, requestUrl);
56-
return policies.FirstOrDefault();
55+
return await this.FetchResourcePolicyTemplateAsync(azToken, requestUrl);
5756
}
5857

5958
public async Task<PolicyTemplateResource> GetPolicyLinkedToApiOperationAsync(string apiName, string operationName, ExtractorParameters extractorParameters)
@@ -63,8 +62,25 @@ public async Task<PolicyTemplateResource> GetPolicyLinkedToApiOperationAsync(str
6362
string requestUrl = string.Format(GetPolicyLinkedToApiOperationRequest,
6463
this.BaseUrl, azSubId, extractorParameters.ResourceGroup, extractorParameters.SourceApimName, apiName, operationName, GlobalConstants.ApiVersion);
6564

66-
var policies = await this.GetPagedResponseAsync<PolicyTemplateResource>(azToken, requestUrl);
67-
return policies.FirstOrDefault();
65+
return await this.FetchResourcePolicyTemplateAsync(azToken, requestUrl);
66+
}
67+
68+
async Task<PolicyTemplateResource> FetchResourcePolicyTemplateAsync(string azToken, string requestUrl)
69+
{
70+
PolicyTemplateResource policy = null;
71+
try
72+
{
73+
policy = await this.GetResponseAsync<PolicyTemplateResource>(azToken, requestUrl);
74+
}
75+
catch (HttpRequestException ex)
76+
{
77+
// It is expected that entity will not have policy if it was not set after creation
78+
if (ex.StatusCode != HttpStatusCode.NotFound)
79+
{
80+
throw;
81+
}
82+
}
83+
return policy;
6884
}
6985
}
7086
}

tests/ArmTemplates.Tests/Extractor/Scenarios/ApiManagementServiceExtractorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public async Task GenerateApiManagementService_ProperlyParsesJsonResponse()
6363

6464
string fileLocation = Path.Combine(MockClientUtils.ApiClientJsonResponsesPath, "ApiManagementGetInstance_success_response.json");
6565
var expectedApiManagementService = await MockClientUtils.DeserializeFileContent<ApiManagementServiceResource>(fileLocation);
66-
var mockedApiManagementServiceClient = await MockApiManagementServiceClient.GetMockedHttpApiManagementServiceClient(fileLocation);
66+
var mockedApiManagementServiceClient = await MockApiManagementServiceClient.GetMockedHttpApiManagementServiceClient(new MockClientConfiguration(responseFileLocation: fileLocation));
6767
var mockedApiManagementServiceExtractor = new ApiManagementServiceExtractor(this.GetTestLogger<ApiManagementServiceExtractor>(), new TemplateBuilder(), mockedApiManagementServiceClient);
6868

6969
var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(

tests/ArmTemplates.Tests/Extractor/Scenarios/ApiOperationExtractorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public async Task GenerateApiOperationsResourcesAsync_ProperlyParsesResponse()
3030
apiName: "apiName");
3131
var extractorParameters = new ExtractorParameters(extractorConfig);
3232
var fileLocation = Path.Combine(MockClientUtils.ApiClientJsonResponsesPath, "ApiManagementListApiOperations_success_response.json");
33-
var mockedClient = await MockApiOperationClient.GetMockedHttpApiOperationClient(fileLocation);
33+
var mockedClient = await MockApiOperationClient.GetMockedHttpApiOperationClient(new MockClientConfiguration(responseFileLocation: fileLocation));
3434
var apiOperationExtractor = new ApiOperationExtractor(this.GetTestLogger<ApiOperationExtractor>(), mockedClient);
3535

3636
// act

tests/ArmTemplates.Tests/Extractor/Scenarios/ApiReleaseExtractorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public async Task GenerateAllCurrentApiReleaseTemplateAsync_ProperlyCreatesTempl
6464
var responseFileLocation = Path.Combine(MockClientUtils.ApiClientJsonResponsesPath, "ApiManagementListApis_success_response.json");
6565
var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateAllCurrentApiReleaseTemplateAsync_ProperlyCreatesTemplate));
6666

67-
var mockedApiClientAllCurrent = await MockApisClient.GetMockedHttpApiClient(responseFileLocation);
67+
var mockedApiClientAllCurrent = await MockApisClient.GetMockedHttpApiClient(new MockClientConfiguration(responseFileLocation: responseFileLocation));
6868

6969
var extractorConfig = this.GetDefaultExtractorConsoleAppConfiguration(
7070
apiName: string.Empty);

tests/ArmTemplates.Tests/Extractor/Scenarios/ApiSchemaExtractorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public async Task GenerateApiTemplates_ProperlyParsesTheInformation()
3232
var extractorConfig = this.GetDefaultExtractorConsoleAppConfiguration();
3333
var extractorParameters = new ExtractorParameters(extractorConfig);
3434

35-
var mockedApiSchemaClient = await MockApiSchemaClient.GetMockedHttpApiSchemaClient(responseFileLocation);
35+
var mockedApiSchemaClient = await MockApiSchemaClient.GetMockedHttpApiSchemaClient(new MockClientConfiguration(responseFileLocation: responseFileLocation));
3636
var mockedApiSchemaExtractor = new ApiSchemaExtractor(this.GetTestLogger<ApiSchemaExtractor>(), mockedApiSchemaClient);
3737

3838
// act

tests/ArmTemplates.Tests/Extractor/Scenarios/BackendExtractorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public async Task GenerateBackendTemplate_ProperlyParsesAndGeneratesTemplate()
9797
var responseFileLocation = Path.Combine(MockClientUtils.ApiClientJsonResponsesPath, "ApiManagementListBackends_success_response.json");
9898
var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateBackendTemplate_ProperlyParsesAndGeneratesTemplate));
9999

100-
var mockedClient = await MockBackendClient.GetMockedHttpApiClient(responseFileLocation);
100+
var mockedClient = await MockBackendClient.GetMockedHttpApiClient(new MockClientConfiguration(responseFileLocation: responseFileLocation));
101101

102102
var extractorConfig = this.GetDefaultExtractorConsoleAppConfiguration(
103103
apiName: string.Empty,

tests/ArmTemplates.Tests/Extractor/Scenarios/GroupExtractorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public async Task GenerateGroupsTemplates_ProperlyParsesResponse()
7676
var extractorConfig = this.GetDefaultExtractorConsoleAppConfiguration();
7777
var extractorParameters = new ExtractorParameters(extractorConfig);
7878
var fileLocation = Path.Combine(MockClientUtils.ApiClientJsonResponsesPath, "ApiManagementListGroups_success_response.json");
79-
var mockedGroupsClient = await MockGroupsClient.GetMockedHttpGroupClient(fileLocation);
79+
var mockedGroupsClient = await MockGroupsClient.GetMockedHttpGroupClient(new MockClientConfiguration(responseFileLocation: fileLocation));
8080
var groupExtractor = new GroupExtractor(this.GetTestLogger<GroupExtractor>(), new TemplateBuilder(), mockedGroupsClient);
8181

8282
var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(

tests/ArmTemplates.Tests/Extractor/Scenarios/OpenIdConnectProviderExtractorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public async Task GenerateOpenIdConnectProviderTemplates_ProperlyParsesResponse(
8181
var extractorConfig = this.GetDefaultExtractorConsoleAppConfiguration();
8282
var extractorParameters = new ExtractorParameters(extractorConfig);
8383
var fileLocation = Path.Combine(MockClientUtils.ApiClientJsonResponsesPath, "ApiManagementListOpenIdConnectProviders_success_response.json");
84-
var mockedOpenIdConnectProviderClient = await MockOpenIdConnectProviderClient.GetMockedHttpOpenIdConnectProviderClient(fileLocation);
84+
var mockedOpenIdConnectProviderClient = await MockOpenIdConnectProviderClient.GetMockedHttpOpenIdConnectProviderClient(new MockClientConfiguration(responseFileLocation: fileLocation));
8585
var openIdConnectExtractor = new OpenIdConnectProviderExtractor(this.GetTestLogger<OpenIdConnectProviderExtractor>(), new TemplateBuilder(), mockedOpenIdConnectProviderClient);
8686

8787
var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(

0 commit comments

Comments
 (0)