diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/ResourceIdentity.Serialization.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/ResourceIdentity.Serialization.cs new file mode 100644 index 000000000000..a5620cb3832f --- /dev/null +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/ResourceIdentity.Serialization.cs @@ -0,0 +1,156 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; +using Azure.Core; + +namespace Azure.ResourceManager.Core +{ + [JsonConverter(typeof(ResourceIdentityConverter))] + public partial class ResourceIdentity : IUtf8JsonSerializable + { + private const string SystemAssigned = "SystemAssigned"; + private const string UserAssigned = "UserAssigned"; + private const string SystemAndUserAssigned = "SystemAssigned, UserAssigned"; + + /// + /// Converts an object into a . + /// + /// Utf8JsonWriter object to which the output is going to be written. + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) + { + if (writer == null) + throw new ArgumentNullException(nameof(writer)); + + writer.WriteStartObject(); + writer.WritePropertyName("identity"); + + if (!Optional.IsDefined(SystemAssignedIdentity) && UserAssignedIdentities.Count == 0) + { + writer.WriteStringValue("null"); + writer.WriteEndObject(); + writer.Flush(); + return; + } + + writer.WriteStartObject(); + if (Optional.IsDefined(SystemAssignedIdentity) && Optional.IsCollectionDefined(UserAssignedIdentities) && UserAssignedIdentities.Count != 0) + { + writer.WriteObjectValue(SystemAssignedIdentity); + writer.WritePropertyName("type"); + writer.WriteStringValue(SystemAndUserAssigned); + writer.WritePropertyName("userAssignedIdentities"); + writer.WriteStartObject(); + foreach (var keyValuePair in UserAssignedIdentities) + { + writer.WritePropertyName(keyValuePair.Key); + writer.WriteObjectValue(keyValuePair.Value); + } + + writer.WriteEndObject(); + } + else if (Optional.IsDefined(SystemAssignedIdentity)) + { + writer.WriteObjectValue(SystemAssignedIdentity); + writer.WritePropertyName("type"); + writer.WriteStringValue(SystemAssigned); + } + else if (Optional.IsCollectionDefined(UserAssignedIdentities) && UserAssignedIdentities.Count != 0) + { + writer.WritePropertyName("type"); + writer.WriteStringValue(UserAssigned); + writer.WritePropertyName("userAssignedIdentities"); + writer.WriteStartObject(); + foreach (var keyValuePair in UserAssignedIdentities) + { + writer.WritePropertyName(keyValuePair.Key); + writer.WriteObjectValue(keyValuePair.Value); + } + + writer.WriteEndObject(); + } + + writer.WriteEndObject(); + writer.WriteEndObject(); + writer.Flush(); + } + + /// + /// Converts a into an object. + /// + /// A containing an . + /// New Identity object with JSON values. + internal static ResourceIdentity DeserializeResourceIdentity(JsonElement element) + { + if (element.ValueKind == JsonValueKind.Undefined) + { + throw new ArgumentException("JsonElement cannot be undefined ", nameof(element)); + } + + Optional systemAssignedIdentity = default; + IDictionary userAssignedIdentities = new Dictionary(); + string type = string.Empty; + foreach (var property in element.EnumerateObject()) + { + if (property.NameEquals("userAssignedIdentities")) + { + if (property.Value.ValueKind == JsonValueKind.Null) + { + userAssignedIdentities = null; + continue; + } + + string resourceId = string.Empty; + foreach (var keyValuePair in property.Value.EnumerateObject()) + { + resourceId = keyValuePair.Name; + var userAssignedIdentity = UserAssignedIdentity.DeserializeUserAssignedIdentity(keyValuePair.Value); + userAssignedIdentities.Add(new ResourceGroupResourceIdentifier(resourceId), userAssignedIdentity); + } + + continue; + } + + if (property.NameEquals("type")) + { + if (property.Value.ValueKind == JsonValueKind.Null) + { + throw new InvalidOperationException("The type property had a JsonValueKind equal to Null"); + } + + type = property.Value.GetString(); + } + + if (type.Equals(SystemAssigned)) + { + systemAssignedIdentity = SystemAssignedIdentity.DeserializeSystemAssignedIdentity(element); + continue; + } + + if (type.Equals(SystemAndUserAssigned)) + { + systemAssignedIdentity = SystemAssignedIdentity.DeserializeSystemAssignedIdentity(element); + continue; + } + } + + return new ResourceIdentity(systemAssignedIdentity, userAssignedIdentities); + } + + internal partial class ResourceIdentityConverter : JsonConverter + { + public override void Write(Utf8JsonWriter writer, ResourceIdentity resourceIdentity, JsonSerializerOptions options) + { + writer.WriteObjectValue(resourceIdentity); + } + public override ResourceIdentity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + using var document = JsonDocument.ParseValue(ref reader); + return DeserializeResourceIdentity(document.RootElement); + } + } + } +} diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/ResourceIdentity.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/ResourceIdentity.cs new file mode 100644 index 000000000000..80283d0fdf31 --- /dev/null +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/ResourceIdentity.cs @@ -0,0 +1,121 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using Azure.Core; + +namespace Azure.ResourceManager.Core +{ + /// + /// Represents a managed identity + /// + [PropertyReferenceType(new Type[] { typeof(ResourceIdentityType) })] + public partial class ResourceIdentity : IEquatable + { + /// + /// Initializes a new instance of the class. + /// + [InitializationConstructor] + public ResourceIdentity() + : this(null, false) + { + } // not system or user + + /// + /// Initializes a new instance of the class. + /// + /// Dictionary with a key and a object value. + /// Flag for using or not. + public ResourceIdentity(Dictionary user, bool useSystemAssigned) + { + // check for combination of user and system on the impact to type value + SystemAssignedIdentity = useSystemAssigned ? new SystemAssignedIdentity() : null; + UserAssignedIdentities = new Dictionary(); + if (user != null) + { + foreach (KeyValuePair id in user) + { + UserAssignedIdentities.Add(id.Key, id.Value); + } + } + } + + /// + /// Initializes a new instance of the class. + /// + /// The to use. + /// Dictionary with a key and a object value. + [SerializationConstructor] + internal ResourceIdentity(SystemAssignedIdentity systemAssigned, IDictionary user) + { + // TODO: remove this constructor later + SystemAssignedIdentity = systemAssigned; + if (user == null) + { + UserAssignedIdentities = new Dictionary(); + } + else + { + UserAssignedIdentities = user; + } + } + + /// + /// Gets the SystemAssignedIdentity. + /// + public SystemAssignedIdentity SystemAssignedIdentity { get; private set; } + + /// + /// Gets a dictionary of the User Assigned Identities. + /// + public IDictionary UserAssignedIdentities { get; private set; } + + /// + /// Detects if this Identity is equals to another Identity instance. + /// + /// Identity object to compare. + /// True if they are equal, otherwise False. + public bool Equals(ResourceIdentity other) + { + if (ReferenceEquals(other, null)) + return false; + + if (UserAssignedIdentities.Count == other.UserAssignedIdentities.Count) + { + foreach (var identity in UserAssignedIdentities) + { + UserAssignedIdentity value; + if (other.UserAssignedIdentities.TryGetValue(identity.Key, out value)) + { + if (!UserAssignedIdentity.Equals(identity.Value, value)) + { + return false; + } + } + else + { + return false; + } + } + } + + return SystemAssignedIdentity.Equals(SystemAssignedIdentity, other.SystemAssignedIdentity); + } + + /// + public override bool Equals(object obj) + { + if (ReferenceEquals(this, obj)) + return true; + + return Equals(obj as ResourceIdentity); + } + + /// + public override int GetHashCode() + { + return HashCodeBuilder.Combine(SystemAssignedIdentity, UserAssignedIdentities); + } + } +} diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/SystemAssignedIdentity.Serialization.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/SystemAssignedIdentity.Serialization.cs new file mode 100644 index 000000000000..718ee0bc1483 --- /dev/null +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/SystemAssignedIdentity.Serialization.cs @@ -0,0 +1,82 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Text.Json; +using Azure.Core; + +namespace Azure.ResourceManager.Core +{ + public partial class SystemAssignedIdentity : IUtf8JsonSerializable + { + /// + /// Converts an object into a . + /// + /// Utf8JsonWriter object to which the output is going to be written. + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) + { + if (writer == null) + throw new ArgumentNullException(nameof(writer)); + + writer.WritePropertyName("principalId"); + if (!Optional.IsDefined(PrincipalId)) + { + writer.WriteStringValue("null"); + } + else + { + writer.WriteStringValue(PrincipalId.ToString()); + } + + writer.WritePropertyName("tenantId"); + if (!Optional.IsDefined(TenantId)) + { + writer.WriteStringValue("null"); + } + else + { + writer.WriteStringValue(TenantId.ToString()); + } + + writer.Flush(); + } + + /// + /// Converts a into an object. + /// + /// A containing an identity. + /// New object with JSON values. + internal static SystemAssignedIdentity DeserializeSystemAssignedIdentity(JsonElement element) + { + if (element.ValueKind == JsonValueKind.Undefined) + { + throw new ArgumentException("JsonElement cannot be undefined ", nameof(element)); + } + + Guid principalId = default; + Guid tenantId = default; + foreach (var property in element.EnumerateObject()) + { + if (property.NameEquals("principalId")) + { + if (property.Value.ValueKind != JsonValueKind.Null) + principalId = Guid.Parse(property.Value.GetString()); + } + + if (property.NameEquals("tenantId")) + { + if (property.Value.ValueKind != JsonValueKind.Null) + tenantId = Guid.Parse(property.Value.GetString()); + } + } + + if (principalId == default(Guid) && tenantId == default(Guid)) + return null; + + if (principalId == default(Guid) || tenantId == default(Guid)) + throw new InvalidOperationException("Either TenantId or PrincipalId were null"); + + return new SystemAssignedIdentity(tenantId, principalId); + } + } +} diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/SystemAssignedIdentity.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/SystemAssignedIdentity.cs similarity index 52% rename from sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/SystemAssignedIdentity.cs rename to sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/SystemAssignedIdentity.cs index 3225c3034759..0753ad6f099f 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/SystemAssignedIdentity.cs +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/SystemAssignedIdentity.cs @@ -1,16 +1,15 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System; +using Azure.Core; + namespace Azure.ResourceManager.Core { - using System; - using System.Text.Json; - using Azure.Core; - /// /// A class representing an Identity assigned by the system. /// - public sealed class SystemAssignedIdentity : IEquatable + public sealed partial class SystemAssignedIdentity : IEquatable { /// /// Initializes a new instance of the class with Null properties. @@ -40,80 +39,6 @@ public SystemAssignedIdentity(Guid tenantId, Guid principalId) /// public Guid? PrincipalId { get; private set; } - /// - /// Converts a into an object. - /// - /// A containing an identity. - /// New object with JSON values. - internal static SystemAssignedIdentity Deserialize(JsonElement element) - { - if (element.ValueKind == JsonValueKind.Undefined) - { - throw new ArgumentException("JsonElement cannot be undefined ", nameof(element)); - } - - Guid principalId = default; - Guid tenantId = default; - foreach (var property in element.EnumerateObject()) - { - if (property.NameEquals("principalId")) - { - if (property.Value.ValueKind != JsonValueKind.Null) - principalId = Guid.Parse(property.Value.GetString()); - } - - if (property.NameEquals("tenantId")) - { - if (property.Value.ValueKind != JsonValueKind.Null) - tenantId = Guid.Parse(property.Value.GetString()); - } - } - - if (principalId == default(Guid) && tenantId == default(Guid)) - return null; - - if (principalId == default(Guid) || tenantId == default(Guid)) - throw new InvalidOperationException("Either TenantId or PrincipalId were null"); - - return new SystemAssignedIdentity(tenantId, principalId); - } - - /// - /// Converts an object into a . - /// - /// Utf8JsonWriter object to which the output is going to be written. - /// object to be converted. - internal static void Serialize(Utf8JsonWriter writer, SystemAssignedIdentity systemAssignedIdentity) - { - if (systemAssignedIdentity == null) - throw new ArgumentNullException(nameof(systemAssignedIdentity)); - - if (writer == null) - throw new ArgumentNullException(nameof(writer)); - - writer.WritePropertyName("principalId"); - if (!Optional.IsDefined(systemAssignedIdentity.PrincipalId)) - { - writer.WriteStringValue("null"); - } - else - { - writer.WriteStringValue(systemAssignedIdentity.PrincipalId.ToString()); - } - - writer.WritePropertyName("tenantId"); - if (!Optional.IsDefined(systemAssignedIdentity.TenantId)) - { - writer.WriteStringValue("null"); - } - else - { - writer.WriteStringValue(systemAssignedIdentity.TenantId.ToString()); - } - - writer.Flush(); - } - /// /// Compares two objects to determine if they are equal. /// diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/UserAssignedIdentity.Serialization.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/UserAssignedIdentity.Serialization.cs new file mode 100644 index 000000000000..e961fcce0dea --- /dev/null +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/UserAssignedIdentity.Serialization.cs @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Text.Json; +using Azure.Core; + +namespace Azure.ResourceManager.Core +{ + /// + /// A class representing an Identity assigned by the user. + /// + public partial class UserAssignedIdentity : IUtf8JsonSerializable + { + /// + /// Converts an object into a . + /// + /// Utf8JsonWriter object to which the output is going to be written. + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) + { + if (writer == null) + throw new ArgumentNullException(nameof(writer)); + + writer.WriteStartObject(); + + writer.WritePropertyName("clientId"); + writer.WriteStringValue(ClientId.ToString()); + + writer.WritePropertyName("principalId"); + writer.WriteStringValue(PrincipalId.ToString()); + + writer.WriteEndObject(); + writer.Flush(); + } + + /// + /// Converts a into an object. + /// + /// A containing an identity. + /// New object with JSON values. + internal static UserAssignedIdentity DeserializeUserAssignedIdentity(JsonElement element) + { + if (element.ValueKind == JsonValueKind.Undefined) + { + throw new ArgumentException("JsonElement is undefined " + nameof(element)); + } + + Guid principalId = default; + Guid clientId = default; + foreach (var property in element.EnumerateObject()) + { + if (property.NameEquals("principalId")) + { + if (property.Value.ValueKind != JsonValueKind.Null) + principalId = Guid.Parse(property.Value.GetString()); + } + + if (property.NameEquals("clientId")) + { + if (property.Value.ValueKind != JsonValueKind.Null) + clientId = Guid.Parse(property.Value.GetString()); + } + } + + if (principalId == default(Guid) && clientId == default(Guid)) + return null; + + if (principalId == default(Guid) || clientId == default(Guid)) + throw new InvalidOperationException("Either ClientId or PrincipalId were null"); + + return new UserAssignedIdentity(clientId, principalId); + } + } +} diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/UserAssignedIdentity.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/UserAssignedIdentity.cs similarity index 53% rename from sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/UserAssignedIdentity.cs rename to sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/UserAssignedIdentity.cs index dffee4dae14e..47d224c456c4 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/UserAssignedIdentity.cs +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Generated/Models/UserAssignedIdentity.cs @@ -1,16 +1,15 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System; +using Azure.Core; + namespace Azure.ResourceManager.Core { - using System; - using System.Text.Json; - using Azure.Core; - /// /// A class representing an Identity assigned by the user. /// - public sealed class UserAssignedIdentity : IEquatable + public sealed partial class UserAssignedIdentity : IEquatable { /// /// Initializes a new instance of the class. @@ -33,69 +32,6 @@ public UserAssignedIdentity(Guid clientId, Guid principalId) /// public Guid PrincipalId { get; } - /// - /// Converts a into an object. - /// - /// A containing an identity. - /// New object with JSON values. - internal static UserAssignedIdentity Deserialize(JsonElement element) - { - if (element.ValueKind == JsonValueKind.Undefined) - { - throw new ArgumentException("JsonElement is undefined " + nameof(element)); - } - - Guid principalId = default; - Guid clientId = default; - foreach (var property in element.EnumerateObject()) - { - if (property.NameEquals("principalId")) - { - if (property.Value.ValueKind != JsonValueKind.Null) - principalId = Guid.Parse(property.Value.GetString()); - } - - if (property.NameEquals("clientId")) - { - if (property.Value.ValueKind != JsonValueKind.Null) - clientId = Guid.Parse(property.Value.GetString()); - } - } - - if (principalId == default(Guid) && clientId == default(Guid)) - return null; - - if (principalId == default(Guid) || clientId == default(Guid)) - throw new InvalidOperationException("Either ClientId or PrincipalId were null"); - - return new UserAssignedIdentity(clientId, principalId); - } - - /// - /// Converts an object into a . - /// - /// Utf8JsonWriter object to which the output is going to be written. - /// object to be converted. - internal static void Serialize(Utf8JsonWriter writer, UserAssignedIdentity userAssignedIdentity) - { - if (userAssignedIdentity == null) - throw new ArgumentNullException(nameof(userAssignedIdentity)); - - if (writer == null) - throw new ArgumentNullException(nameof(writer)); - - writer.WriteStartObject(); - - writer.WritePropertyName("clientId"); - writer.WriteStringValue(userAssignedIdentity.ClientId.ToString()); - - writer.WritePropertyName("principalId"); - writer.WriteStringValue(userAssignedIdentity.PrincipalId.ToString()); - - writer.WriteEndObject(); - writer.Flush(); - } - /// /// Compares two objects to determine if they are equal. /// diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/ResourceIdentity.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/ResourceIdentity.cs deleted file mode 100644 index 80e42071c83e..000000000000 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Resources/ResourceIdentity.cs +++ /dev/null @@ -1,256 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Azure.Core; -using System; -using System.Collections.Generic; -using System.Text.Json; - -namespace Azure.ResourceManager.Core -{ - /// - /// Represents a managed identity - /// - [PropertyReferenceType(new Type[] { typeof(ResourceIdentityType) })] - public class ResourceIdentity : IEquatable - { - private const string SystemAssigned = "SystemAssigned"; - private const string UserAssigned = "UserAssigned"; - private const string SystemAndUserAssigned = "SystemAssigned, UserAssigned"; - - /// - /// Initializes a new instance of the class. - /// - [InitializationConstructor] - public ResourceIdentity() - : this(null, false) - { - } // not system or user - - /// - /// Initializes a new instance of the class. - /// - /// Dictionary with a key and a object value. - /// Flag for using or not. - [SerializationConstructor] - public ResourceIdentity(Dictionary user, bool useSystemAssigned) - { - // check for combination of user and system on the impact to type value - SystemAssignedIdentity = useSystemAssigned ? new SystemAssignedIdentity() : null; - UserAssignedIdentities = new Dictionary(); - if (user != null) - { - foreach (KeyValuePair id in user) - { - UserAssignedIdentities.Add(id.Key, id.Value); - } - } - } - - /// - /// Initializes a new instance of the class. - /// - /// The to use. - /// Dictionary with a key and a object value. - public ResourceIdentity(SystemAssignedIdentity systemAssigned, IDictionary user) - { - // TODO: remove this constructor later - SystemAssignedIdentity = systemAssigned; - if (user == null) - { - UserAssignedIdentities = new Dictionary(); - } - else - { - UserAssignedIdentities = user; - } - } - - /// - /// Gets the SystemAssignedIdentity. - /// - public SystemAssignedIdentity SystemAssignedIdentity { get; private set; } - - /// - /// Gets a dictionary of the User Assigned Identities. - /// - public IDictionary UserAssignedIdentities { get; private set; } - - /// - /// Converts a into an object. - /// - /// A containing an . - /// New Identity object with JSON values. -#pragma warning disable AZC0014 // Avoid using banned types in public API - public static ResourceIdentity DeserializeResourceIdentity(JsonElement element) -#pragma warning restore AZC0014 // Avoid using banned types in public API - { - if (element.ValueKind == JsonValueKind.Undefined) - { - throw new ArgumentException("JsonElement cannot be undefined ", nameof(element)); - } - - Optional systemAssignedIdentity = default; - IDictionary userAssignedIdentities = new Dictionary(); - string type = string.Empty; - foreach (var property in element.EnumerateObject()) - { - if (property.NameEquals("userAssignedIdentities")) - { - if (property.Value.ValueKind == JsonValueKind.Null) - { - userAssignedIdentities = null; - continue; - } - - string resourceId = string.Empty; - foreach (var keyValuePair in property.Value.EnumerateObject()) - { - resourceId = keyValuePair.Name; - var userAssignedIdentity = UserAssignedIdentity.Deserialize(keyValuePair.Value); - userAssignedIdentities.Add(new ResourceGroupResourceIdentifier(resourceId), userAssignedIdentity); - } - - continue; - } - - if (property.NameEquals("type")) - { - if (property.Value.ValueKind == JsonValueKind.Null) - { - throw new InvalidOperationException("The type property had a JsonValueKind equal to Null"); - } - - type = property.Value.GetString(); - } - - if (type.Equals(SystemAssigned)) - { - systemAssignedIdentity = SystemAssignedIdentity.Deserialize(element); - continue; - } - - if (type.Equals(SystemAndUserAssigned)) - { - systemAssignedIdentity = SystemAssignedIdentity.Deserialize(element); - continue; - } - } - - return new ResourceIdentity(systemAssignedIdentity, userAssignedIdentities); - } - - /// - /// Converts an object into a . - /// - /// Utf8JsonWriter object to which the output is going to be written. - /// Identity object to be converted. - internal static void Serialize(Utf8JsonWriter writer, ResourceIdentity identity) - { - if (writer == null) - throw new ArgumentNullException(nameof(writer)); - - if (identity == null) - throw new ArgumentNullException(nameof(identity)); - - writer.WriteStartObject(); - writer.WritePropertyName("identity"); - - if (identity.SystemAssignedIdentity == null && identity.UserAssignedIdentities.Count == 0) - { - writer.WriteStringValue("null"); - writer.WriteEndObject(); - writer.Flush(); - return; - } - - writer.WriteStartObject(); - if (identity.SystemAssignedIdentity != null && identity.UserAssignedIdentities.Count != 0) - { - SystemAssignedIdentity.Serialize(writer, identity.SystemAssignedIdentity); - writer.WritePropertyName("kind"); - writer.WriteStringValue(SystemAndUserAssigned); - writer.WritePropertyName("userAssignedIdentities"); - writer.WriteStartObject(); - foreach (var keyValuePair in identity.UserAssignedIdentities) - { - writer.WritePropertyName(keyValuePair.Key); - UserAssignedIdentity.Serialize(writer, keyValuePair.Value); - } - - writer.WriteEndObject(); - } - else if (identity.SystemAssignedIdentity != null) - { - SystemAssignedIdentity.Serialize(writer, identity.SystemAssignedIdentity); - writer.WritePropertyName("kind"); - writer.WriteStringValue(SystemAssigned); - } - else if (identity.UserAssignedIdentities.Count != 0) - { - writer.WritePropertyName("kind"); - writer.WriteStringValue(UserAssigned); - writer.WritePropertyName("userAssignedIdentities"); - writer.WriteStartObject(); - foreach (var keyValuePair in identity.UserAssignedIdentities) - { - writer.WritePropertyName(keyValuePair.Key); - UserAssignedIdentity.Serialize(writer, keyValuePair.Value); - } - - writer.WriteEndObject(); - } - - writer.WriteEndObject(); - writer.WriteEndObject(); - writer.Flush(); - } - - /// - /// Detects if this Identity is equals to another Identity instance. - /// - /// Identity object to compare. - /// True if they are equal, otherwise False. - public bool Equals(ResourceIdentity other) - { - if (ReferenceEquals(other, null)) - return false; - - if (UserAssignedIdentities.Count == other.UserAssignedIdentities.Count) - { - foreach (var identity in UserAssignedIdentities) - { - UserAssignedIdentity value; - if (other.UserAssignedIdentities.TryGetValue(identity.Key, out value)) - { - if (!UserAssignedIdentity.Equals(identity.Value, value)) - { - return false; - } - } - else - { - return false; - } - } - } - - return SystemAssignedIdentity.Equals(SystemAssignedIdentity, other.SystemAssignedIdentity); - } - - /// - public override bool Equals(object obj) - { - if (ReferenceEquals(this, obj)) - return true; - - return Equals(obj as ResourceIdentity); - } - - /// - public override int GetHashCode() - { - return HashCodeBuilder.Combine(SystemAssignedIdentity, UserAssignedIdentities); - } - } -} diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/IdentityTests.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/IdentityTests.cs index 88419932480c..18c8bad29929 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/IdentityTests.cs +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/IdentityTests.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Text.Json; +using Azure.Core; using NUnit.Framework; namespace Azure.ResourceManager.Core.Tests @@ -21,10 +22,10 @@ public void CheckNoParamConstructor() Assert.IsNull(identity.SystemAssignedIdentity); } - [TestCase ("/subscriptions/6b085460-5f00-477e-ba44-1035046e9101/resourceGroups/tester/providers/Microsoft.Web/sites/autotest", false)] - [TestCase ("", true)] - [TestCase (" ", true)] - [TestCase (null, true)] + [TestCase("/subscriptions/6b085460-5f00-477e-ba44-1035046e9101/resourceGroups/tester/providers/Microsoft.Web/sites/autotest", false)] + [TestCase("", true)] + [TestCase(" ", true)] + [TestCase(null, true)] public void CheckUserTrueConstructor(string resourceID, bool invalidParameter) { var dict1 = new Dictionary(); @@ -49,7 +50,7 @@ public void CheckUserTrueConstructor(string resourceID, bool invalidParameter) } } - [TestCase ("/subscriptions/6b085460-5f00-477e-ba44-1035046e9101/resourceGroups/tester/providers/Microsoft.Web/sites/autotest", false)] + [TestCase("/subscriptions/6b085460-5f00-477e-ba44-1035046e9101/resourceGroups/tester/providers/Microsoft.Web/sites/autotest", false)] [TestCase("", true)] [TestCase(" ", true)] [TestCase(null, true)] @@ -57,7 +58,7 @@ public void CheckUserFalseConstructor(string resourceID, bool invalidParameter) { var dict1 = new Dictionary(); - if(invalidParameter) + if (invalidParameter) { if (resourceID is null) Assert.Throws(() => { dict1[resourceID] = new UserAssignedIdentity(Guid.Empty, Guid.Empty); }); @@ -75,7 +76,7 @@ public void CheckUserFalseConstructor(string resourceID, bool invalidParameter) Assert.IsNotNull(identity.SystemAssignedIdentity); Assert.IsTrue(identity.SystemAssignedIdentity.TenantId.Equals(Guid.Empty)); Assert.IsTrue(identity.SystemAssignedIdentity.PrincipalId.Equals(Guid.Empty)); - } + } } [TestCase] @@ -258,7 +259,7 @@ public void TestDeserializerValidSystemAssigned() ResourceIdentity back = ResourceIdentity.DeserializeResourceIdentity(identityJsonProperty.Value); Assert.IsTrue("22fddec1-8b9f-49dc-bd72-ddaf8f215577".Equals(back.SystemAssignedIdentity.PrincipalId.ToString())); Assert.IsTrue("72f988bf-86f1-41af-91ab-2d7cd011db47".Equals(back.SystemAssignedIdentity.TenantId.ToString())); - Assert.IsTrue(back.UserAssignedIdentities.Count == 0); + Assert.IsTrue(back.UserAssignedIdentities.Count == 0); } [TestCase] @@ -285,22 +286,12 @@ public void TestSerializerValidSystemAndUser() string user = "{\"clientId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"principalId\":\"de29bab1-49e1-4705-819b-4dfddceaaa98\"}"; string expected = "{\"identity\":{" + system + "," + - "\"kind\":\"SystemAssigned, UserAssigned\"," + + "\"type\":\"SystemAssigned, UserAssigned\"," + "\"userAssignedIdentities\":" + "{" + "\"/subscriptions/6b085460-5f21-477e-ba44-1035046e9101/resourceGroups/nbhatia_test/providers/Microsoft.Web/sites/autoreport\":" + user + "}}}"; - string actual = ""; - using (Stream stream = new MemoryStream()) - { - using (StreamReader streamReader = new StreamReader(stream)) - { - var writer = new Utf8JsonWriter(stream); - ResourceIdentity.Serialize(writer, identity); - stream.Seek(0, SeekOrigin.Begin); - actual = streamReader.ReadToEnd(); - } - } - Assert.AreEqual(expected, actual); + + JsonAsserts.AssertSerialization(expected, identity); } [TestCase] @@ -318,24 +309,14 @@ public void TestSerializerValidSystemAndMultUser() string user2 = "{\"clientId\":\"72f988bf-86f1-41af-91ab-2d7cd011cb47\",\"principalId\":\"de29bab1-49e1-4705-819b-4dfddcebaa98\"}"; string expected = "{\"identity\":{" + system + "," + - "\"kind\":\"SystemAssigned, UserAssigned\"," + + "\"type\":\"SystemAssigned, UserAssigned\"," + "\"userAssignedIdentities\":" + "{" + "\"/subscriptions/6b085460-5f21-477e-ba44-1035046e9101/resourceGroups/nbhatia_test/providers/Microsoft.Web/sites/autoreport1\":" + user + "," + "\"/subscriptions/6b085460-5f21-477e-ba44-1035046e9101/resourceGroups/nbhatia_test/providers/Microsoft.Web/sites/autoreport2\":" + user2 + "}}}"; - string actual = ""; - using (Stream stream = new MemoryStream()) - { - using (StreamReader streamReader = new StreamReader(stream)) - { - var writer = new Utf8JsonWriter(stream); - ResourceIdentity.Serialize(writer, identity); - stream.Seek(0, SeekOrigin.Begin); - actual = streamReader.ReadToEnd(); - } - } - Assert.AreEqual(expected, actual); + + JsonAsserts.AssertSerialization(expected, identity); } [TestCase] @@ -346,19 +327,9 @@ public void TestSerializerValidSystemOnly() string system = "\"principalId\":\"de29bab1-49e1-4705-819b-4dfddceaaa98\",\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\""; string expected = "{\"identity\":{" + system + "," + - "\"kind\":\"SystemAssigned\"}}"; - string actual = ""; - using (Stream stream = new MemoryStream()) - { - using (StreamReader streamReader = new StreamReader(stream)) - { - var writer = new Utf8JsonWriter(stream); - ResourceIdentity.Serialize(writer, identity); - stream.Seek(0, SeekOrigin.Begin); - actual = streamReader.ReadToEnd(); - } - } - Assert.AreEqual(expected, actual); + "\"type\":\"SystemAssigned\"}}"; + + JsonAsserts.AssertSerialization(expected, identity); } [TestCase] @@ -372,22 +343,12 @@ public void TestSerializerValidUserEmptySystem() string user = "{\"clientId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"principalId\":\"de29bab1-49e1-4705-819b-4dfddceaaa98\"}"; string expected = "{\"identity\":{" + system + "," + - "\"kind\":\"SystemAssigned, UserAssigned\"," + + "\"type\":\"SystemAssigned, UserAssigned\"," + "\"userAssignedIdentities\":" + "{" + "\"/subscriptions/6b085460-5f21-477e-ba44-1035046e9101/resourceGroups/nbhatia_test/providers/Microsoft.Web/sites/autoreport\":" + user + "}}}"; - string actual = ""; - using (Stream stream = new MemoryStream()) - { - using (StreamReader streamReader = new StreamReader(stream)) - { - var writer = new Utf8JsonWriter(stream); - ResourceIdentity.Serialize(writer, identity); - stream.Seek(0, SeekOrigin.Begin); - actual = streamReader.ReadToEnd(); - } - } - Assert.AreEqual(expected, actual); + + JsonAsserts.AssertSerialization(expected, identity); } [TestCase] @@ -399,22 +360,12 @@ public void TestSerializerValidUserNullSystem() ResourceIdentity identity = new ResourceIdentity(dict1, false); string user = "{\"clientId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"principalId\":\"de29bab1-49e1-4705-819b-4dfddceaaa98\"}"; string expected = "{\"identity\":{" + - "\"kind\":\"UserAssigned\"," + + "\"type\":\"UserAssigned\"," + "\"userAssignedIdentities\":" + "{" + "\"/subscriptions/6b085460-5f21-477e-ba44-1035046e9101/resourceGroups/nbhatia_test/providers/Microsoft.Web/sites/autoreport\":" + user + "}}}"; - string actual = ""; - using (Stream stream = new MemoryStream()) - { - using (StreamReader streamReader = new StreamReader(stream)) - { - var writer = new Utf8JsonWriter(stream); - ResourceIdentity.Serialize(writer, identity); - stream.Seek(0, SeekOrigin.Begin); - actual = streamReader.ReadToEnd(); - } - } - Assert.AreEqual(expected, actual); + + JsonAsserts.AssertSerialization(expected, identity); } [TestCase] @@ -422,39 +373,25 @@ public void TestSerializerValidIdentityNull() { ResourceIdentity identity = new ResourceIdentity(); string expected = "{\"identity\":\"null\"}"; - string actual = ""; - using (Stream stream = new MemoryStream()) - { - using (StreamReader streamReader = new StreamReader(stream)) - { - var writer = new Utf8JsonWriter(stream); - ResourceIdentity.Serialize(writer, identity); - stream.Seek(0, SeekOrigin.Begin); - actual = streamReader.ReadToEnd(); - } - } - Assert.AreEqual(expected, actual); + JsonAsserts.AssertSerialization(expected, identity); } [TestCase] public void TestSerializerInvalidNullWriter() { ResourceIdentity identity = new ResourceIdentity(); - using (Stream stream = new MemoryStream()) - { - Assert.Throws(delegate { ResourceIdentity.Serialize(null, identity); }); - } + var serializable = identity as IUtf8JsonSerializable; + Assert.Throws(delegate + { serializable.Write(null); }); } [TestCase] public void TestSerializerInvalidNullIdentity() { ResourceIdentity identity = null; - using (Stream stream = new MemoryStream()) - { - var writer = new Utf8JsonWriter(stream); - Assert.Throws(delegate { ResourceIdentity.Serialize(writer, identity); }); - } + Assert.Throws(delegate + { JsonAsserts.AssertSerializes(identity); }); } + } } diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/JsonAsserts.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/JsonAsserts.cs new file mode 100644 index 000000000000..82ec2d9ed082 --- /dev/null +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/JsonAsserts.cs @@ -0,0 +1,37 @@ +using System.IO; +using System.Text; +using System.Text.Json; +using Azure.Core; +using NUnit.Framework; + +namespace Azure.ResourceManager.Core.Tests +{ + internal static class JsonAsserts + { + public static void AssertSerialization(string expected, IUtf8JsonSerializable serializable) + { + using var memoryStream = new MemoryStream(); + + using (var writer = new Utf8JsonWriter(memoryStream)) + { + serializable.Write(writer); + } + + var text = Encoding.UTF8.GetString(memoryStream.ToArray()); + + Assert.AreEqual(expected, text); + } + + public static JsonElement AssertSerializes(IUtf8JsonSerializable serializable) + { + using var memoryStream = new MemoryStream(); + + using (var writer = new Utf8JsonWriter(memoryStream)) + { + serializable.Write(writer); + } + + return JsonDocument.Parse(memoryStream.ToArray()).RootElement; + } + } +} diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/PropertyReferenceTypeTests.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/PropertyReferenceTypeTests.cs index e78c36d909b7..d098ca8f02de 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/PropertyReferenceTypeTests.cs +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/PropertyReferenceTypeTests.cs @@ -32,7 +32,7 @@ public void ValidateSerializationConstructor() var serializationCtor = refType.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(c => HasAttribute(c.GetCustomAttributes(false), SerializationConstructor)).FirstOrDefault(); Assert.IsNotNull(serializationCtor); - Assert.IsTrue(serializationCtor.IsPublic, $"Serialization ctor for {refType.Name} should not be public"); + Assert.IsFalse(serializationCtor.IsPublic, $"Serialization ctor for {refType.Name} should not be public"); } } diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/SystemAssignedIdentityTests.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/SystemAssignedIdentityTests.cs index 15eac57eb477..5e7df2cf9914 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/SystemAssignedIdentityTests.cs +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/SystemAssignedIdentityTests.cs @@ -1,4 +1,5 @@ -using Azure.Core.TestFramework; +using Azure.Core; +using Azure.Core.TestFramework; using NUnit.Framework; using System; using System.IO; @@ -81,7 +82,7 @@ public void EqualsMethodTrue(string tenantId1, string principalId1, string tenan [TestCase(null, null, "72f988bf-86f1-41af-91ab-2d7cd011db47", "de29bab1-49e1-4705-819b-4dfddceaaa98")] [TestCase("72f988bf-86f1-41af-91ab-2d7cd011db47", "de29bab1-49e1-4705-819b-4dfddceaaa98", null, null)] - [TestCase("72f988bf-86f1-41af-91ab-2d7cd011db47", "de29bab1-49e1-4705-819b-4dfddceaaa98", "72f988bf-86f1-41af-91ab-2d7cd011db44", "de29bab1-49e1-4705-819b-4dfddceaaa94")] + [TestCase("72f988bf-86f1-41af-91ab-2d7cd011db47", "de29bab1-49e1-4705-819b-4dfddceaaa98", "72f988bf-86f1-41af-91ab-2d7cd011db44", "de29bab1-49e1-4705-819b-4dfddceaaa94")] [TestCase("72f988bf-86f1-41af-91ab-2d7cd011db47", "de29bab1-49e1-4705-819b-4dfddceaaa93", "72f988bf-86f1-41af-91ab-2d7cd011db47", "de29bab1-49e1-4705-819b-4dfddceaaa91")] [TestCase("72f988bf-86f1-41af-91ab-2d7cd011db49", "de29bab1-49e1-4705-819b-4dfddceaaa91", "72f988bf-86f1-41af-91ab-2d7cd011db47", "de29bab1-49e1-4705-819b-4dfddceaaa91")] public void EqualsMethodFalse(string tenantId1, string principalId1, string tenantId2, string principalId2) @@ -123,7 +124,7 @@ public void EqualsMethodOneIdentityNull() SystemAssignedIdentity identity1 = new SystemAssignedIdentity(); SystemAssignedIdentity identity2 = null; Assert.IsFalse(identity1.Equals(identity2)); - } + } [TestCase] public void CompareToMethodBothIdentitiesEmpty() @@ -158,14 +159,14 @@ private static string GetFileText(string filename) public void TestDeserializerDefaultJson() { JsonElement invalid = default(JsonElement); - Assert.Throws(delegate { SystemAssignedIdentity.Deserialize(invalid); }); + Assert.Throws(delegate { SystemAssignedIdentity.DeserializeSystemAssignedIdentity(invalid); }); } [TestCase] public void TestDeserializerValid() { var identityJsonProperty = DeserializerHelper("SystemAssignedValid.json"); - SystemAssignedIdentity back = SystemAssignedIdentity.Deserialize(identityJsonProperty.Value); + SystemAssignedIdentity back = SystemAssignedIdentity.DeserializeSystemAssignedIdentity(identityJsonProperty.Value); Assert.IsTrue("de29bab1-49e1-4705-819b-4dfddceaaa98".Equals(back.PrincipalId.ToString())); Assert.IsTrue("72f988bf-86f1-41af-91ab-2d7cd011db47".Equals(back.TenantId.ToString())); } @@ -177,7 +178,7 @@ public void TestDeserializerValidExtraField() JsonDocument document = JsonDocument.Parse(json); JsonElement rootElement = document.RootElement; var identityJsonProperty = rootElement.EnumerateObject().ElementAt(1); - SystemAssignedIdentity back = SystemAssignedIdentity.Deserialize(identityJsonProperty.Value); + SystemAssignedIdentity back = SystemAssignedIdentity.DeserializeSystemAssignedIdentity(identityJsonProperty.Value); Assert.IsTrue("de29bab1-49e1-4705-819b-4dfddceaaa98".Equals(back.PrincipalId.ToString())); Assert.IsTrue("72f988bf-86f1-41af-91ab-2d7cd011db47".Equals(back.TenantId.ToString())); } @@ -186,7 +187,7 @@ public void TestDeserializerValidExtraField() public void TestDeserializerBothValuesNull() { var identityJsonProperty = DeserializerHelper("SystemAssignedBothValuesNull.json"); - var back = SystemAssignedIdentity.Deserialize(identityJsonProperty.Value); + var back = SystemAssignedIdentity.DeserializeSystemAssignedIdentity(identityJsonProperty.Value); Assert.IsNull(back); } @@ -194,35 +195,35 @@ public void TestDeserializerBothValuesNull() public void TestDeserializerBothEmptyString() { var identityJsonProperty = DeserializerHelper("SystemAssignedBothEmptyString.json"); - Assert.Throws(delegate { SystemAssignedIdentity.Deserialize(identityJsonProperty.Value); }); + Assert.Throws(delegate { SystemAssignedIdentity.DeserializeSystemAssignedIdentity(identityJsonProperty.Value); }); } [TestCase] public void TestDeserializerOneEmptyString() { var identityJsonProperty = DeserializerHelper("SystemAssignedOneEmptyString.json"); - Assert.Throws(delegate { SystemAssignedIdentity.Deserialize(identityJsonProperty.Value); }); + Assert.Throws(delegate { SystemAssignedIdentity.DeserializeSystemAssignedIdentity(identityJsonProperty.Value); }); } [TestCase] public void TestDeserializerTenantIdValueNull() { var identityJsonProperty = DeserializerHelper("SystemAssignedOneValueNull.json"); - Assert.Throws(delegate { SystemAssignedIdentity.Deserialize(identityJsonProperty.Value); }); + Assert.Throws(delegate { SystemAssignedIdentity.DeserializeSystemAssignedIdentity(identityJsonProperty.Value); }); } [TestCase] public void TestDeserializerPrincipalIdValueNull() { var identityJsonProperty = DeserializerHelper("SystemAssignedOneOtherValueNull.json"); - Assert.Throws(delegate { SystemAssignedIdentity.Deserialize(identityJsonProperty.Value); }); + Assert.Throws(delegate { SystemAssignedIdentity.DeserializeSystemAssignedIdentity(identityJsonProperty.Value); }); } [TestCase] public void TestDeserializerTenantIdInvalid() { var identityJsonProperty = DeserializerHelper("SystemAssignedInvalid.json"); - Assert.Throws(delegate { SystemAssignedIdentity.Deserialize(identityJsonProperty.Value); }); + Assert.Throws(delegate { SystemAssignedIdentity.DeserializeSystemAssignedIdentity(identityJsonProperty.Value); }); } [TestCase] @@ -236,7 +237,8 @@ public void TestSerializerValidIdentity() { var writer = new Utf8JsonWriter(stream); writer.WriteStartObject(); - SystemAssignedIdentity.Serialize(writer, systemAssignedIdentity); + var serializable = systemAssignedIdentity as IUtf8JsonSerializable; + serializable.Write(writer); writer.WriteEndObject(); writer.Flush(); stream.Seek(0, SeekOrigin.Begin); @@ -258,7 +260,8 @@ public void TestSerializerEmptyIdentity() { var writer = new Utf8JsonWriter(stream); writer.WriteStartObject(); - SystemAssignedIdentity.Serialize(writer, systemAssignedIdentity); + var serializable = systemAssignedIdentity as IUtf8JsonSerializable; + serializable.Write(writer); writer.WriteEndObject(); writer.Flush(); stream.Seek(0, SeekOrigin.Begin); @@ -273,22 +276,15 @@ public void TestSerializerEmptyIdentity() public void TestSerializerNullIdentity() { SystemAssignedIdentity systemAssignedIdentity = null; - using (Stream stream = new MemoryStream()) - { - var writer = new Utf8JsonWriter(stream); - writer.WriteStartObject(); - Assert.Throws(delegate { SystemAssignedIdentity.Serialize(writer, systemAssignedIdentity); }); - } + Assert.Throws(delegate { JsonAsserts.AssertSerializes(systemAssignedIdentity); }); } [TestCase] public void TestSerializerNullWriter() { SystemAssignedIdentity systemAssignedIdentity = new SystemAssignedIdentity(); - using (Stream stream = new MemoryStream()) - { - Assert.Throws(delegate { SystemAssignedIdentity.Serialize(null, systemAssignedIdentity); }); - } + var serializable = systemAssignedIdentity as IUtf8JsonSerializable; + Assert.Throws(delegate { serializable.Write(null); }); } [TestCase] diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/UserAssignedIdentityTests.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/UserAssignedIdentityTests.cs index dfe7e5b17503..981269939a90 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/UserAssignedIdentityTests.cs +++ b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/UserAssignedIdentityTests.cs @@ -1,7 +1,9 @@ -using NUnit.Framework; +using Azure.Core; +using NUnit.Framework; using System; using System.IO; using System.Linq; +using System.Text; using System.Text.Json; namespace Azure.ResourceManager.Core.Tests @@ -24,7 +26,7 @@ public void CompareTo(int answer, string clientId1, string principalId1, string { UserAssignedIdentity identity1 = new UserAssignedIdentity(new Guid(clientId1), new Guid(principalId1)); UserAssignedIdentity identity2 = new UserAssignedIdentity(new Guid(clientId2), new Guid(principalId2)); - + Assert.AreEqual(answer, identity1.CompareTo(identity2)); Assert.AreEqual(answer * -1, identity2.CompareTo(identity1)); } @@ -68,7 +70,7 @@ public JsonElement DeserializerHelper(string filename) var json = GetFileText(filename); JsonDocument document = JsonDocument.Parse(json); JsonElement rootElement = document.RootElement; - var properties = rootElement.EnumerateObject().First().Value; + var properties = rootElement.EnumerateObject().First().Value; foreach (var property in properties.EnumerateObject()) { if (property.NameEquals("userAssignedIdentities")) @@ -91,14 +93,15 @@ private static string GetFileText(string filename) public void TestDeserializerDefaultJson() { JsonElement invalid = default(JsonElement); - Assert.Throws(delegate { UserAssignedIdentity.Deserialize(invalid); }); + Assert.Throws(delegate + { UserAssignedIdentity.DeserializeUserAssignedIdentity(invalid); }); } [TestCase] public void TestDeserializerValid() { var identityJsonProperty = DeserializerHelper("UserAssignedValid.json"); - UserAssignedIdentity back = UserAssignedIdentity.Deserialize(identityJsonProperty); + UserAssignedIdentity back = UserAssignedIdentity.DeserializeUserAssignedIdentity(identityJsonProperty); Assert.IsTrue("3beb288c-c3f9-4300-896f-02fbf175b6be".Equals(back.ClientId.ToString())); Assert.IsTrue("d0416856-d6cf-466d-8d64-ddc8d7782096".Equals(back.PrincipalId.ToString())); } @@ -107,7 +110,7 @@ public void TestDeserializerValid() public void TestDeserializerValidExtraField() { var identityJsonProperty = DeserializerHelper("UserAssignedExtraField.json"); - UserAssignedIdentity back = UserAssignedIdentity.Deserialize(identityJsonProperty); + UserAssignedIdentity back = UserAssignedIdentity.DeserializeUserAssignedIdentity(identityJsonProperty); Assert.IsTrue("3beb288c-c3f9-4300-896f-02fbf175b6be".Equals(back.ClientId.ToString())); Assert.IsTrue("d0416856-d6cf-466d-8d64-ddc8d7782096".Equals(back.PrincipalId.ToString())); } @@ -116,7 +119,7 @@ public void TestDeserializerValidExtraField() public void TestDeserializerBothValuesNull() { var identityJsonProperty = DeserializerHelper("UserAssignedBothValuesNull.json"); - var back = UserAssignedIdentity.Deserialize(identityJsonProperty); + var back = UserAssignedIdentity.DeserializeUserAssignedIdentity(identityJsonProperty); Assert.IsNull(back); } @@ -124,35 +127,40 @@ public void TestDeserializerBothValuesNull() public void TestDeserializerBothEmptyString() { var identityJsonProperty = DeserializerHelper("UserAssignedBothEmptyString.json"); - Assert.Throws(delegate { UserAssignedIdentity.Deserialize(identityJsonProperty); }); + Assert.Throws(delegate + { UserAssignedIdentity.DeserializeUserAssignedIdentity(identityJsonProperty); }); } [TestCase] public void TestDeserializerOneEmptyString() { var identityJsonProperty = DeserializerHelper("UserAssignedOneEmptyString.json"); - Assert.Throws(delegate { UserAssignedIdentity.Deserialize(identityJsonProperty); }); + Assert.Throws(delegate + { UserAssignedIdentity.DeserializeUserAssignedIdentity(identityJsonProperty); }); } [TestCase] public void TestDeserializerClientIdValueNull() { var identityJsonProperty = DeserializerHelper("UserAssignedOneValueNull.json"); - Assert.Throws(delegate { UserAssignedIdentity.Deserialize(identityJsonProperty); }); + Assert.Throws(delegate + { UserAssignedIdentity.DeserializeUserAssignedIdentity(identityJsonProperty); }); } [TestCase] public void TestDeserializerPrincipalIdValueNull() { var identityJsonProperty = DeserializerHelper("UserAssignedOneOtherValueNull.json"); - Assert.Throws(delegate { UserAssignedIdentity.Deserialize(identityJsonProperty); }); + Assert.Throws(delegate + { UserAssignedIdentity.DeserializeUserAssignedIdentity(identityJsonProperty); }); } [TestCase] public void TestDeserializerClientIdInvalid() { var identityJsonProperty = DeserializerHelper("UserAssignedInvalid.json"); - Assert.Throws(delegate { UserAssignedIdentity.Deserialize(identityJsonProperty); }); + Assert.Throws(delegate + { UserAssignedIdentity.DeserializeUserAssignedIdentity(identityJsonProperty); }); } [TestCase] @@ -167,7 +175,8 @@ public void TestDeserializerInvalidMultipleIdentities() { foreach (var keyValuePair in property.Value.EnumerateObject()) { - Assert.Throws(delegate { UserAssignedIdentity.Deserialize(keyValuePair.Value); }); + Assert.Throws(delegate + { UserAssignedIdentity.DeserializeUserAssignedIdentity(keyValuePair.Value); }); } } } @@ -187,7 +196,7 @@ public void TestDeserializerValidMultipleIdentities() { foreach (var keyValuePair in property.Value.EnumerateObject()) { - identities[count] = UserAssignedIdentity.Deserialize(keyValuePair.Value); + identities[count] = UserAssignedIdentity.DeserializeUserAssignedIdentity(keyValuePair.Value); count++; } } @@ -202,40 +211,26 @@ public void TestDeserializerValidMultipleIdentities() public void TestSerializerValidIdentity() { UserAssignedIdentity userAssignedIdentity = new UserAssignedIdentity(new Guid("72f988bf-86f1-41af-91ab-2d7cd011db47"), new Guid("de29bab1-49e1-4705-819b-4dfddceaaa98")); - string actual = ""; - using (Stream stream = new MemoryStream()) - { - using (StreamReader streamReader = new StreamReader(stream)) - { - var writer = new Utf8JsonWriter(stream); - UserAssignedIdentity.Serialize(writer, userAssignedIdentity); - stream.Seek(0, SeekOrigin.Begin); - actual = streamReader.ReadToEnd(); - } - } string expected = "{\"clientId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"principalId\":\"de29bab1-49e1-4705-819b-4dfddceaaa98\"}"; - Assert.AreEqual(expected, actual); + + JsonAsserts.AssertSerialization(expected, userAssignedIdentity); } [TestCase] public void TestSerializerNullIdentity() { UserAssignedIdentity userAssignedIdentity = null; - using (Stream stream = new MemoryStream()) - { - var writer = new Utf8JsonWriter(stream); - Assert.Throws(delegate { UserAssignedIdentity.Serialize(writer, userAssignedIdentity); }); - } + Assert.Throws(delegate + { JsonAsserts.AssertSerializes(userAssignedIdentity); }); } [TestCase] public void TestSerializerNullWriter() { UserAssignedIdentity userAssignedIdentity = new UserAssignedIdentity(new Guid("72f988bf-86f1-41af-91ab-2d7cd011db47"), new Guid("de29bab1-49e1-4705-819b-4dfddceaaa98")); - using (Stream stream = new MemoryStream()) - { - Assert.Throws(delegate { UserAssignedIdentity.Serialize(null, userAssignedIdentity); }); - } + var serializable = userAssignedIdentity as IUtf8JsonSerializable; + Assert.Throws(delegate + { serializable.Write(null); }); } [TestCase] @@ -243,25 +238,22 @@ public void TestSerializerArray() { UserAssignedIdentity userAssignedIdentity1 = new UserAssignedIdentity(new Guid("3beb288c-c3f9-4300-896f-02fbf175b6be"), new Guid("d0416856-d6cf-466d-8d64-ddc8d7782096")); UserAssignedIdentity userAssignedIdentity2 = new UserAssignedIdentity(new Guid("fbb39377-ff46-4a82-8c47-42d573180482"), new Guid("6d63ce43-c3ac-4b03-933d-4bc31eae50b2")); - string actual = ""; UserAssignedIdentity[] identities = { userAssignedIdentity1, userAssignedIdentity2 }; - using (Stream stream = new MemoryStream()) + using var memoryStream = new MemoryStream(); + foreach (var identity in identities) { - using (StreamReader streamReader = new StreamReader(stream)) + var serializable = identity as IUtf8JsonSerializable; + using (var writer = new Utf8JsonWriter(memoryStream)) { - foreach (var identity in identities) - { - var writer = new Utf8JsonWriter(stream); - UserAssignedIdentity.Serialize(writer, identity); - stream.Seek(0, SeekOrigin.Begin); - actual = streamReader.ReadToEnd(); - } + serializable.Write(writer); } } string expected = "{\"clientId\":\"3beb288c-c3f9-4300-896f-02fbf175b6be\"," + "\"principalId\":\"d0416856-d6cf-466d-8d64-ddc8d7782096\"}" + "{\"clientId\":\"fbb39377-ff46-4a82-8c47-42d573180482\"," + "\"principalId\":\"6d63ce43-c3ac-4b03-933d-4bc31eae50b2\"}"; + + var actual = Encoding.UTF8.GetString(memoryStream.ToArray()); Assert.AreEqual(expected, actual); }