Skip to content

Commit b305793

Browse files
#284 - fixed deserialization error for languageVersion set to 2.0
1 parent 9c19904 commit b305793

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
namespace ACE_Tests.Reworked.KeyVault;
2+
3+
public class KeyVaultWithUdfTests
4+
{
5+
[Test]
6+
public void KeyVault_Udf_WhenThereIsAzureKeyVaultUsagePattern1_ItShouldBeInferredForCalculation()
7+
{
8+
var outputFilename = $"ace_test_{DateTime.Now.Ticks}";
9+
var exitCode = Program.Main([
10+
"templates/reworked/key-vault/kv-with-udf.bicep",
11+
"cf70b558-b930-45e4-9048-ebcefb926adf",
12+
"arm-estimator-tests-rg",
13+
"--generate-json-output",
14+
"--json-output-filename",
15+
outputFilename,
16+
"--debug",
17+
"--mocked-retail-api-response-path",
18+
"mocked-responses/retail-api/key-vault/usage-patterns.json"
19+
]);
20+
21+
Assert.That(exitCode, Is.EqualTo(0));
22+
23+
var outputFile = File.ReadAllText($"{outputFilename}.json");
24+
var output = JsonSerializer.Deserialize<EstimationOutput>(outputFile, Shared.JsonSerializerOptions);
25+
26+
Assert.That(output, Is.Not.Null);
27+
Assert.Multiple(() =>
28+
{
29+
Assert.That(output.TotalCost.OriginalValue, Is.EqualTo(1104.80d));
30+
Assert.That(output.TotalResourceCount, Is.EqualTo(1));
31+
});
32+
}
33+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
param parSuffix string = utcNow('yyyyMMddhhmmss')
2+
param parLocation string = resourceGroup().location
3+
param parTenantId string = tenant().tenantId
4+
5+
metadata aceUsagePatterns = {
6+
Microsoft_KeyVault_vaults_Operations: '100000'
7+
Microsoft_KeyVault_vaults_Advanced_Key_Operations: '100000'
8+
Microsoft_KeyVault_vaults_Secret_Renewal: '100'
9+
Microsoft_KeyVault_vaults_Automated_Key_Rotation: '1000'
10+
Microsoft_KeyVault_vaults_Certificate_Renewal_Requests: '10'
11+
}
12+
13+
func sayHelloString(name string) string => 'Hi ${name}!'
14+
15+
resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = {
16+
#disable-next-line use-stable-resource-identifiers
17+
name: 'kv${parSuffix}'
18+
location: parLocation
19+
properties: {
20+
sku: {
21+
family: 'A'
22+
name: 'standard'
23+
}
24+
tenantId: parTenantId
25+
}
26+
}
27+
28+
output greetingArray array = map(['Evie', 'Casper'], name => sayHelloString(name))

ace/Template/TemplateSchema.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ internal class TemplateSchema
1010
public MetadataSchema? Metadata { get; set; }
1111

1212
[JsonPropertyName("resources")]
13+
[JsonConverter(typeof(Language20ResourceSchemaConverter))]
1314
public SpecialCaseResourceSchema[]? SpecialCaseResources { get; set; }
1415
}
1516

@@ -75,4 +76,30 @@ public override void Write(Utf8JsonWriter writer, SpecialCaseResourcePropertiesS
7576
{
7677
throw new NotImplementedException();
7778
}
79+
}
80+
81+
internal class Language20ResourceSchemaConverter : JsonConverter<SpecialCaseResourceSchema[]?>
82+
{
83+
public override SpecialCaseResourceSchema[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
84+
{
85+
if(reader.TokenType == JsonTokenType.Null) return null;
86+
if (reader.TokenType == JsonTokenType.StartArray)
87+
{
88+
var value = JsonSerializer.Deserialize<SpecialCaseResourceSchema[]>(ref reader, options);
89+
return value;
90+
}
91+
92+
if(reader.TokenType == JsonTokenType.StartObject)
93+
{
94+
var value = JsonSerializer.Deserialize<IDictionary<string, SpecialCaseResourceSchema>>(ref reader, options);
95+
return value!.Select(r => r.Value).ToArray();
96+
}
97+
98+
return null;
99+
}
100+
101+
public override void Write(Utf8JsonWriter writer, SpecialCaseResourceSchema[]? value, JsonSerializerOptions options)
102+
{
103+
throw new NotImplementedException();
104+
}
78105
}

0 commit comments

Comments
 (0)