Skip to content

Commit c498f53

Browse files
authored
[Azure.Core] Update Tests for ModelSerializer (Azure#38169)
1 parent 603364a commit c498f53

File tree

15 files changed

+275
-10
lines changed

15 files changed

+275
-10
lines changed

sdk/core/Azure.Core/tests/ModelSerialization/ModelWriterTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace Azure.Core.Tests.ModelSerialization
2222
public class ModelWriterTests
2323
{
2424
private const int _modelSize = 156000;
25-
private static readonly string _json = File.ReadAllText(TestData.GetLocation("ResourceProviderData.json"));
25+
private static readonly string _json = File.ReadAllText(TestData.GetLocation("ResourceProviderData/ResourceProviderData.json"));
2626
private static readonly ResourceProviderData _resourceProviderData = ModelSerializer.Deserialize<ResourceProviderData>(BinaryData.FromString(_json));
2727

2828
[Test]

sdk/core/Azure.Core/tests/common/Azure.Core.Tests.Common.csproj

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,16 @@
1818
</ItemGroup>
1919

2020
<ItemGroup>
21-
<None Update="TestData\AvailabilitySetData.json">
21+
<None Update="TestData\AvailabilitySetData\AvailabilitySetDataWithVMs.json">
22+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
23+
</None>
24+
<None Update="TestData\AvailabilitySetData\AvailabilitySetData.json">
25+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
26+
</None>
27+
<None Update="TestData\AvailabilitySetData\AvailabilitySetDataWithVMsWireFormat.json">
28+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
29+
</None>
30+
<None Update="TestData\AvailabilitySetData\AvailabilitySetDataWireFormat.json">
2231
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
2332
</None>
2433
<None Update="TestData\ModelXml.xml">
@@ -27,10 +36,16 @@
2736
<None Update="TestData\ModelXmlX.xml">
2837
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
2938
</None>
30-
<None Update="TestData\ResourceProviderData-Collapsed.json">
39+
<None Update="TestData\ResourceProviderData\ResourceProviderData-Collapsed.json">
40+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
41+
</None>
42+
<None Update="TestData\ResourceProviderData\ResourceProviderData.json">
43+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
44+
</None>
45+
<None Update="TestData\ModelX\ModelX.json">
3146
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
3247
</None>
33-
<None Update="TestData\ResourceProviderData.json">
48+
<None Update="TestData\ModelX\ModelXWireFormat.json">
3449
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
3550
</None>
3651
</ItemGroup>

sdk/core/Azure.Core/tests/common/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using System.Text.Json;
78
using Azure.Core.Serialization;
89

@@ -16,15 +17,21 @@ public ModelX()
1617
Kind = "X";
1718
}
1819

19-
internal ModelX(string kind, string name, int xProperty, Dictionary<string, BinaryData> rawData)
20+
internal ModelX(string kind, string name, int xProperty, int? nullProperty, IList<string> fields, IDictionary<string, string> keyValuePairs, Dictionary<string, BinaryData> rawData)
2021
: base(rawData)
2122
{
2223
Kind = kind;
2324
Name = name;
2425
XProperty = xProperty;
26+
NullProperty = nullProperty;
27+
Fields = fields;
28+
KeyValuePairs = keyValuePairs;
2529
}
2630

27-
public int XProperty { get; private set; }
31+
public int XProperty { get; }
32+
public IList<string> Fields { get; }
33+
public int? NullProperty = null;
34+
public IDictionary<string, string> KeyValuePairs { get; }
2835

2936
void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable<ModelX>)this).Serialize(writer, ModelSerializerOptions.DefaultWireOptions);
3037

@@ -63,6 +70,38 @@ private void Serialize(Utf8JsonWriter writer, ModelSerializerOptions options)
6370
writer.WritePropertyName("name"u8);
6471
writer.WriteStringValue(Name);
6572
}
73+
if (Optional.IsCollectionDefined(Fields))
74+
{
75+
writer.WritePropertyName("fields"u8);
76+
writer.WriteStartArray();
77+
foreach (string field in Fields)
78+
{
79+
writer.WriteStringValue(field);
80+
}
81+
writer.WriteEndArray();
82+
}
83+
if (Optional.IsDefined(NullProperty))
84+
{
85+
writer.WritePropertyName("nullProperty"u8);
86+
writer.WriteNumberValue(NullProperty.Value);
87+
}
88+
if (Optional.IsCollectionDefined(KeyValuePairs))
89+
{
90+
writer.WritePropertyName("keyValuePairs"u8);
91+
writer.WriteStartObject();
92+
foreach (var item in KeyValuePairs)
93+
{
94+
writer.WritePropertyName(item.Key);
95+
if (item.Value == null)
96+
{
97+
writer.WriteNullValue();
98+
continue;
99+
}
100+
writer.WriteObjectValue(item.Value);
101+
}
102+
writer.WriteEndObject();
103+
}
104+
66105
if (options.Format == ModelSerializerFormat.Json)
67106
{
68107
writer.WritePropertyName("xProperty"u8);
@@ -86,7 +125,11 @@ internal static ModelX DeserializeModelX(JsonElement element, ModelSerializerOpt
86125
string kind = default;
87126
Optional<string> name = default;
88127
int xProperty = default;
128+
Optional<int> nullProperty = default;
129+
Optional<IList<string>> fields = default;
130+
Optional<IDictionary<string, string>> keyValuePairs = default;
89131
Dictionary<string, BinaryData> rawData = new Dictionary<string, BinaryData>();
132+
90133
foreach (var property in element.EnumerateObject())
91134
{
92135
if (property.NameEquals("kind"u8))
@@ -99,6 +142,30 @@ internal static ModelX DeserializeModelX(JsonElement element, ModelSerializerOpt
99142
name = property.Value.GetString();
100143
continue;
101144
}
145+
if (property.NameEquals("fields"u8))
146+
{
147+
fields = property.Value.EnumerateArray().Select(element => element.GetString()).ToList();
148+
continue;
149+
}
150+
if (property.NameEquals("nullProperty"u8))
151+
{
152+
if (property.Value.ValueKind == JsonValueKind.Null)
153+
{
154+
continue;
155+
}
156+
nullProperty = property.Value.GetInt32();
157+
continue;
158+
}
159+
if (property.NameEquals("keyValuePairs"u8))
160+
{
161+
Dictionary<string, string> dictionary = new Dictionary<string, string>();
162+
foreach (var property0 in property.Value.EnumerateObject())
163+
{
164+
dictionary.Add(property0.Name, property0.Value.GetString());
165+
}
166+
keyValuePairs = dictionary;
167+
continue;
168+
}
102169
if (property.NameEquals("xProperty"u8))
103170
{
104171
xProperty = property.Value.GetInt32();
@@ -110,7 +177,7 @@ internal static ModelX DeserializeModelX(JsonElement element, ModelSerializerOpt
110177
rawData.Add(property.Name, BinaryData.FromString(property.Value.GetRawText()));
111178
}
112179
}
113-
return new ModelX(kind, name, xProperty, rawData);
180+
return new ModelX(kind, name, xProperty, Optional.ToNullable(nullProperty), Optional.ToList(fields), Optional.ToDictionary(keyValuePairs), rawData);
114181
}
115182

116183
ModelX IModelSerializable<ModelX>.Deserialize(BinaryData data, ModelSerializerOptions options)

sdk/core/Azure.Core/tests/common/TestData/AvailabilitySetData.json renamed to sdk/core/Azure.Core/tests/common/TestData/AvailabilitySetData/AvailabilitySetData.json

File renamed without changes.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": "testAS-3375",
3+
"id": "/subscriptions/e37510d7-33b6-4676-886f-ee75bcc01871/resourceGroups/testRG-6497/providers/Microsoft.Compute/availabilitySets/testAS-3375",
4+
"type": "Microsoft.Compute/availabilitySets",
5+
"location": "eastus",
6+
"tags": {
7+
"key": "value"
8+
},
9+
"properties": {
10+
"platformUpdateDomainCount": 5,
11+
"platformFaultDomainCount": 3
12+
},
13+
"sku": {
14+
"name": "Classic"
15+
},
16+
"extraSku": "extraSku",
17+
"extraRoot": "extraRoot"
18+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "testAS-3375",
3+
"id": "/subscriptions/e37510d7-33b6-4676-886f-ee75bcc01871/resourceGroups/testRG-6497/providers/Microsoft.Compute/availabilitySets/testAS-3375",
4+
"type": "Microsoft.Compute/availabilitySets",
5+
"location": "eastus",
6+
"tags": {
7+
"key": "value"
8+
},
9+
"properties": {
10+
"platformUpdateDomainCount": 5,
11+
"platformFaultDomainCount": 3,
12+
"virtualMachines": [
13+
{
14+
"id": "/subscriptions/e37510d7-33b6-4676-886f-ee75bcc01871/resourceGroups/testRG-6497/providers/Microsoft.Compute/availabilitySets/testAS1"
15+
},
16+
{
17+
"id": "/subscriptions/e37510d7-33b6-4676-886f-ee75bcc01871/resourceGroups/testRG-6497/providers/Microsoft.Compute/availabilitySets/testAS2"
18+
}
19+
]
20+
},
21+
"sku": {
22+
"name": "Classic"
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "testAS-3375",
3+
"id": "/subscriptions/e37510d7-33b6-4676-886f-ee75bcc01871/resourceGroups/testRG-6497/providers/Microsoft.Compute/availabilitySets/testAS-3375",
4+
"type": "Microsoft.Compute/availabilitySets",
5+
"location": "eastus",
6+
"tags": {
7+
"key": "value"
8+
},
9+
"properties": {
10+
"platformUpdateDomainCount": 5,
11+
"platformFaultDomainCount": 3,
12+
"virtualMachines": [
13+
{
14+
"id": "/subscriptions/e37510d7-33b6-4676-886f-ee75bcc01871/resourceGroups/testRG-6497/providers/Microsoft.Compute/availabilitySets/testAS1"
15+
},
16+
{
17+
"id": "/subscriptions/e37510d7-33b6-4676-886f-ee75bcc01871/resourceGroups/testRG-6497/providers/Microsoft.Compute/availabilitySets/testAS2"
18+
}
19+
]
20+
},
21+
"sku": {
22+
"name": "Classic"
23+
}
24+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"kind": "X",
3+
"name": "xmodel",
4+
"xProperty": 100,
5+
"fields": [
6+
"testField"
7+
],
8+
"nullProperty": null,
9+
"keyValuePairs": {
10+
"color": "red"
11+
},
12+
"extra": "stuff"
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"kind": "X",
3+
"name": "xmodel",
4+
"xProperty": 100,
5+
"fields": [
6+
"testField"
7+
],
8+
"nullProperty": null,
9+
"keyValuePairs": {
10+
"color": "red"
11+
},
12+
"extra": "stuff"
13+
}

sdk/core/Azure.Core/tests/common/TestData/ResourceProviderData-Collapsed.json renamed to sdk/core/Azure.Core/tests/common/TestData/ResourceProviderData/ResourceProviderData-Collapsed.json

File renamed without changes.

0 commit comments

Comments
 (0)