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

Commit f394e5c

Browse files
f-alizadaFarhad Alizada
andauthored
Align PolicyXMLBaseUrl/PolicyXMLSasToken behaviour across extractors (#705)
* Align PolicyXMLBaseUrl/PolicyXMLSasToken behaviour across extractors * Introduce Extractor parameters default method for tests * Introduce parametrized GetDefaultExtractorConsoleAppConfiguration method for tests Co-authored-by: Farhad Alizada <falizada@microsoft.com>
1 parent d6d4f02 commit f394e5c

File tree

6 files changed

+206
-38
lines changed

6 files changed

+206
-38
lines changed

src/ArmTemplates/Common/Templates/Builders/TemplateBuilder.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,25 +80,25 @@ public TemplateBuilder GenerateEmptyTemplate()
8080

8181
public TemplateBuilder AddPolicyProperties(ExtractorParameters extractorParameters)
8282
{
83-
if (extractorParameters.PolicyXMLBaseUrl != null && extractorParameters.PolicyXMLSasToken != null)
84-
{
85-
TemplateParameterProperties policyTemplateSasTokenParameterProperties = new TemplateParameterProperties()
86-
{
87-
Type = "string"
88-
};
89-
90-
this.template.Parameters.Add(ParameterNames.PolicyXMLSasToken, policyTemplateSasTokenParameterProperties);
91-
}
92-
9383
if (extractorParameters.PolicyXMLBaseUrl != null)
9484
{
9585
TemplateParameterProperties policyTemplateBaseUrlParameterProperties = new TemplateParameterProperties()
9686
{
9787
Type = "string"
9888
};
9989
this.template.Parameters.Add(ParameterNames.PolicyXMLBaseUrl, policyTemplateBaseUrlParameterProperties);
100-
}
10190

91+
92+
if (extractorParameters.PolicyXMLSasToken != null)
93+
{
94+
TemplateParameterProperties policyTemplateSasTokenParameterProperties = new TemplateParameterProperties()
95+
{
96+
Type = "string"
97+
};
98+
99+
this.template.Parameters.Add(ParameterNames.PolicyXMLSasToken, policyTemplateSasTokenParameterProperties);
100+
}
101+
}
102102
return this;
103103
}
104104

src/ArmTemplates/Extractor/EntityExtractors/MasterTemplateExtractor.cs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,14 @@ public Template<MasterTemplateResources> GenerateLinkedMasterTemplate(
127127

128128
var productDeployment = CreateLinkedMasterTemplateResource(ProductsTemplate, productsUri, dependsOnNamedValues);
129129

130-
if (!string.IsNullOrEmpty(extractorParameters.PolicyXMLBaseUrl))
130+
if (extractorParameters.PolicyXMLBaseUrl is not null)
131131
{
132132
productDeployment.Properties.Parameters.Add(ParameterNames.PolicyXMLBaseUrl, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLBaseUrl}')]" });
133-
}
134133

135-
if (!string.IsNullOrEmpty(extractorParameters.PolicyXMLSasToken))
136-
{
137-
productDeployment.Properties.Parameters.Add(ParameterNames.PolicyXMLSasToken, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLSasToken}')]" });
134+
if (extractorParameters.PolicyXMLSasToken is not null)
135+
{
136+
productDeployment.Properties.Parameters.Add(ParameterNames.PolicyXMLSasToken, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLSasToken}')]" });
137+
}
138138
}
139139

140140
masterResources.DeploymentResources.Add(productDeployment);
@@ -248,14 +248,16 @@ public Template<MasterTemplateResources> GenerateLinkedMasterTemplate(
248248
static MasterTemplateResource CreateLinkedMasterTemplateResourceForApiTemplate(string name, string uriLink, string[] dependsOn, ExtractorParameters extractorParameters)
249249
{
250250
MasterTemplateResource masterResourceTemplate = CreateLinkedMasterTemplateResource(name, uriLink, dependsOn);
251-
if (extractorParameters.PolicyXMLBaseUrl != null)
251+
if (extractorParameters.PolicyXMLBaseUrl is not null)
252252
{
253253
masterResourceTemplate.Properties.Parameters.Add(ParameterNames.PolicyXMLBaseUrl, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLBaseUrl}')]" });
254+
255+
if (extractorParameters.PolicyXMLSasToken is not null)
256+
{
257+
masterResourceTemplate.Properties.Parameters.Add(ParameterNames.PolicyXMLSasToken, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLSasToken}')]" });
258+
}
254259
}
255-
if (extractorParameters.PolicyXMLSasToken != null)
256-
{
257-
masterResourceTemplate.Properties.Parameters.Add(ParameterNames.PolicyXMLSasToken, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLSasToken}')]" });
258-
}
260+
259261
if (extractorParameters.ParameterizeServiceUrl)
260262
{
261263
masterResourceTemplate.Properties.Parameters.Add(ParameterNames.ServiceUrl, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.ServiceUrl}')]" });
@@ -285,14 +287,16 @@ static MasterTemplateResource CreateLinkedMasterTemplateResourceWithPolicyToken(
285287
{
286288
MasterTemplateResource masterResourceTemplate = CreateLinkedMasterTemplateResource(name, uriLink, dependsOn);
287289

288-
if (extractorParameters.PolicyXMLBaseUrl != null)
290+
if (extractorParameters.PolicyXMLBaseUrl is not null)
289291
{
290292
masterResourceTemplate.Properties.Parameters.Add(ParameterNames.PolicyXMLBaseUrl, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLBaseUrl}')]" });
293+
294+
if (extractorParameters.PolicyXMLSasToken is not null)
295+
{
296+
masterResourceTemplate.Properties.Parameters.Add(ParameterNames.PolicyXMLSasToken, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLSasToken}')]" });
297+
}
291298
}
292-
if (extractorParameters.PolicyXMLSasToken != null)
293-
{
294-
masterResourceTemplate.Properties.Parameters.Add(ParameterNames.PolicyXMLSasToken, new TemplateParameterProperties() { Value = $"[parameters('{ParameterNames.PolicyXMLSasToken}')]" });
295-
}
299+
296300
return masterResourceTemplate;
297301
}
298302

@@ -363,13 +367,13 @@ Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParameters(E
363367
new TemplateParameterProperties(metadataDescription: "Query string for the URL of the repository", type: "string"));
364368
}
365369

366-
if (!string.IsNullOrEmpty(extractorParameters.PolicyXMLBaseUrl))
370+
if (extractorParameters.PolicyXMLBaseUrl is not null)
367371
{
368372
parameters.Add(
369373
ParameterNames.PolicyXMLBaseUrl,
370374
new TemplateParameterProperties(metadataDescription: "Base URL of the repository that contains the generated policy files", type: "string"));
371375

372-
if (!string.IsNullOrEmpty(extractorParameters.PolicyXMLSasToken))
376+
if (extractorParameters.PolicyXMLSasToken is not null)
373377
{
374378
parameters.Add(
375379
ParameterNames.PolicyXMLSasToken,

src/ArmTemplates/Extractor/EntityExtractors/ParametersExtractor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,14 @@ void AddLinkedUrlParameters()
7777

7878
void AddPolicyParameters()
7979
{
80-
if (string.IsNullOrEmpty(extractorParameters.PolicyXMLBaseUrl))
80+
if (extractorParameters.PolicyXMLBaseUrl is null)
8181
{
8282
return;
8383
}
8484

8585
parameters.Add(ParameterNames.PolicyXMLBaseUrl, new() { Value = extractorParameters.PolicyXMLBaseUrl });
8686

87-
if (!string.IsNullOrEmpty(extractorParameters.PolicyXMLSasToken))
87+
if (extractorParameters.PolicyXMLSasToken is not null)
8888
{
8989
parameters.Add(ParameterNames.PolicyXMLSasToken, new() { Value = extractorParameters.PolicyXMLSasToken });
9090
}

tests/ArmTemplates.Tests/Extractor/Abstractions/ExtractorMockerTestsBase.cs

Lines changed: 71 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Tests.Extractor.
1010
{
1111
public abstract class ExtractorMockerTestsBase : TestsBase
1212
{
13-
protected const string MockSourceApimName = "dmkorolev-APIM-test";
14-
protected const string MockDestinationApimName = "test-destination-apim-name";
15-
protected const string MockResourceGroup = "dmkorolev-test";
13+
protected const string MockSourceApimName = "source-apim-name";
14+
protected const string MockDestinationApimName = "destination-apim-name";
15+
protected const string MockResourceGroup = "resource-group";
1616
protected const string MockFileFolder = "test-file-folder";
1717
protected const string MockApiName = "echo-api";
1818
protected const string MockMultipleApis = " test-multiple-api-1, test-multiple-api-2 ";
@@ -43,8 +43,11 @@ protected ExtractorConsoleAppConfiguration GetMockedExtractorConsoleAppConfigura
4343
string multipleApiNames = MockMultipleApis,
4444
bool includeAllRevisions = MockIncludeAllRevisions,
4545
bool toParameterizeApiLoggerId = MockParameterizeApiLoggerId,
46-
bool toNotIncludeNamedValue = MockNotIncludeNamedValue)
46+
bool toNotIncludeNamedValue = MockNotIncludeNamedValue,
47+
string policyXmlBaseUrl = MockPolicyXMLBaseUrl,
48+
string policyXmlSasToken = MockPolicyXMLSasToken)
4749
{
50+
4851
return new ExtractorConsoleAppConfiguration
4952
{
5053
SourceApimName = MockSourceApimName,
@@ -56,8 +59,8 @@ protected ExtractorConsoleAppConfiguration GetMockedExtractorConsoleAppConfigura
5659
LinkedTemplatesBaseUrl = MockLinkedTemplatesBaseUrl,
5760
LinkedTemplatesSasToken = MockLinkedTemplatesSasToken,
5861
LinkedTemplatesUrlQueryString = MockLinkedTemplatesUrlQueryString,
59-
PolicyXMLBaseUrl = MockPolicyXMLBaseUrl,
60-
PolicyXMLSasToken = MockPolicyXMLSasToken,
62+
PolicyXMLBaseUrl = policyXmlBaseUrl,
63+
PolicyXMLSasToken = policyXmlSasToken,
6164
SplitAPIs = splitApis.ToString(),
6265
ApiVersionSetName = apiVersionSetName,
6366
IncludeAllRevisions = includeAllRevisions.ToString(),
@@ -74,6 +77,67 @@ protected ExtractorConsoleAppConfiguration GetMockedExtractorConsoleAppConfigura
7477
ParamBackend = MockParameterizeBackendSettings.ToString(),
7578
ExtractGateways = MockExtractGateways.ToString()
7679
};
77-
}
80+
}
81+
82+
protected ExtractorConsoleAppConfiguration GetDefaultExtractorConsoleAppConfiguration(
83+
string sourceApimName = MockSourceApimName,
84+
string destinationApimName = MockDestinationApimName,
85+
string resourceGroup = MockResourceGroup,
86+
string fileFolder = MockFileFolder,
87+
string apiName = MockApiName,
88+
string multipleAPIs = null,
89+
string linkedTemplatesBaseUrl = null,
90+
string linkedTemplatesSasToken = null,
91+
string linkedTemplatesUrlQueryString = null,
92+
string policyXmlBaseUrl = null,
93+
string policyXmlSasToken = null,
94+
string splitAPIs = null,
95+
string apiVersionSetName = null,
96+
string includeAllRevisions = null,
97+
string baseFileName = null,
98+
ServiceUrlProperty[] serviceUrlParameters = null,
99+
string paramServiceUrl = null,
100+
string paramNamedValue = null,
101+
string paramApiLoggerId = null,
102+
string paramLogResourceId = null,
103+
string serviceBaseUrl = null,
104+
string notIncludeNamedValue = null,
105+
string paramNamedValuesKeyVaultSecrets = null,
106+
int? operationBatchSize = null,
107+
string paramBackend = null,
108+
string extractGateways = null
109+
)
110+
{
111+
112+
return new ExtractorConsoleAppConfiguration
113+
{
114+
SourceApimName = sourceApimName,
115+
DestinationApimName = destinationApimName,
116+
ResourceGroup = resourceGroup,
117+
FileFolder = fileFolder,
118+
ApiName = apiName,
119+
MultipleAPIs = multipleAPIs,
120+
LinkedTemplatesBaseUrl = linkedTemplatesBaseUrl,
121+
LinkedTemplatesSasToken = linkedTemplatesSasToken,
122+
LinkedTemplatesUrlQueryString = linkedTemplatesUrlQueryString,
123+
PolicyXMLBaseUrl = policyXmlBaseUrl,
124+
PolicyXMLSasToken = policyXmlSasToken,
125+
SplitAPIs = splitAPIs,
126+
ApiVersionSetName = apiVersionSetName,
127+
IncludeAllRevisions = includeAllRevisions,
128+
BaseFileName = baseFileName,
129+
ServiceUrlParameters = serviceUrlParameters,
130+
ParamServiceUrl = paramServiceUrl,
131+
ParamNamedValue = paramNamedValue,
132+
ParamApiLoggerId = paramApiLoggerId,
133+
ParamLogResourceId = paramLogResourceId,
134+
ServiceBaseUrl = serviceBaseUrl,
135+
NotIncludeNamedValue = notIncludeNamedValue,
136+
ParamNamedValuesKeyVaultSecrets = paramNamedValuesKeyVaultSecrets,
137+
OperationBatchSize = operationBatchSize,
138+
ParamBackend = paramBackend,
139+
ExtractGateways = extractGateways
140+
};
141+
}
78142
}
79143
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ public async Task GenerateMasterTemplates_ProperlyLaysTheInformation()
3939
splitApis: false,
4040
apiVersionSetName: string.Empty,
4141
multipleApiNames: string.Empty,
42-
includeAllRevisions: false);
42+
includeAllRevisions: false,
43+
policyXmlBaseUrl: string.Empty,
44+
policyXmlSasToken: string.Empty);
4345
var extractorParameters = new ExtractorParameters(extractorConfig);
4446

4547
var masterTemplateExtractor = new MasterTemplateExtractor(
@@ -100,6 +102,8 @@ public async Task GenerateMasterTemplates_ProperlyLaysTheInformation()
100102
masterTemplate.Parameters.Should().ContainKey(ParameterNames.LoggerResourceId);
101103
masterTemplate.Parameters.Should().ContainKey(ParameterNames.NamedValueKeyVaultSecrets);
102104
masterTemplate.Parameters.Should().ContainKey(ParameterNames.BackendSettings);
105+
masterTemplate.Parameters.Should().ContainKey(ParameterNames.PolicyXMLBaseUrl);
106+
masterTemplate.Parameters.Should().ContainKey(ParameterNames.PolicyXMLBaseUrl);
103107

104108
masterTemplate.TypedResources.DeploymentResources.Should().HaveCount(2);
105109
masterTemplate.Resources.Should().HaveCount(2);
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// --------------------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
// Licensed under the MIT License.
4+
// --------------------------------------------------------------------------
5+
6+
using System.IO;
7+
using System.Threading.Tasks;
8+
using FluentAssertions;
9+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Commands.Executors;
10+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Constants;
11+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common.Templates.Builders;
12+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.EntityExtractors;
13+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extractor.Models;
14+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Tests.Extractor.Abstractions;
15+
using Xunit;
16+
17+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Tests.Extractor.Scenarios
18+
{
19+
[Trait("Category", "Parameters Extraction")]
20+
public class ParametersExtractorTests : ExtractorMockerWithOutputTestsBase
21+
{
22+
public ParametersExtractorTests() : base("parameters-tests")
23+
{
24+
}
25+
26+
ExtractorExecutor GetExtractorInstance(ExtractorParameters extractorParameters)
27+
{
28+
var parametersExtractor = new ParametersExtractor(new TemplateBuilder(), null);
29+
30+
var loggerExtractor = new LoggerExtractor(
31+
this.GetTestLogger<LoggerExtractor>(),
32+
new TemplateBuilder(),
33+
null,
34+
null);
35+
36+
var extractorExecutor = ExtractorExecutor.BuildExtractorExecutor(
37+
this.GetTestLogger<ExtractorExecutor>(),
38+
parametersExtractor: parametersExtractor,
39+
loggerExtractor: loggerExtractor);
40+
41+
extractorExecutor.SetExtractorParameters(extractorParameters);
42+
43+
return extractorExecutor;
44+
}
45+
46+
[Fact]
47+
public async Task GenerateParametersTemplates_ProperlyLaysTheInformation()
48+
{
49+
// arrange
50+
var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateParametersTemplates_ProperlyLaysTheInformation));
51+
52+
var extractorConfig = this.GetDefaultExtractorConsoleAppConfiguration(
53+
policyXmlBaseUrl: string.Empty,
54+
policyXmlSasToken: string.Empty
55+
);
56+
var extractorParameters = new ExtractorParameters(extractorConfig);
57+
58+
var extractorExecutor = this.GetExtractorInstance(extractorParameters);
59+
60+
// act
61+
var parametersTemplate = await extractorExecutor.GenerateParametersTemplateAsync(null, null, null, null, currentTestDirectory);
62+
63+
File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.Parameters)).Should().BeTrue();
64+
65+
parametersTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
66+
parametersTemplate.Parameters.Should().ContainKey(ParameterNames.PolicyXMLBaseUrl);
67+
parametersTemplate.Parameters.Should().ContainKey(ParameterNames.PolicyXMLSasToken);
68+
69+
}
70+
71+
[Fact]
72+
public async Task GenerateParametersTemplates_ProperlyLaysTheInformation_PolicyExcluded()
73+
{
74+
// arrange
75+
var currentTestDirectory = Path.Combine(this.OutputDirectory, nameof(GenerateParametersTemplates_ProperlyLaysTheInformation_PolicyExcluded));
76+
77+
var extractorConfig = this.GetDefaultExtractorConsoleAppConfiguration(
78+
policyXmlBaseUrl: null,
79+
policyXmlSasToken: null
80+
);
81+
var extractorParameters = new ExtractorParameters(extractorConfig);
82+
83+
84+
var extractorExecutor = this.GetExtractorInstance(extractorParameters);
85+
86+
// act
87+
var parametersTemplate = await extractorExecutor.GenerateParametersTemplateAsync(null, null, null, null, currentTestDirectory);
88+
89+
File.Exists(Path.Combine(currentTestDirectory, extractorParameters.FileNames.Parameters)).Should().BeTrue();
90+
91+
parametersTemplate.Parameters.Should().ContainKey(ParameterNames.ApimServiceName);
92+
parametersTemplate.Parameters.Should().NotContainKey(ParameterNames.PolicyXMLBaseUrl);
93+
parametersTemplate.Parameters.Should().NotContainKey(ParameterNames.PolicyXMLSasToken);
94+
}
95+
}
96+
}

0 commit comments

Comments
 (0)