/// <summary>
 /// Initializes client properties.
 /// </summary>
 private void Initialize()
 {
     Operations                    = new Operations(this);
     AvailabilitySets              = new AvailabilitySetsOperations(this);
     ProximityPlacementGroups      = new ProximityPlacementGroupsOperations(this);
     DedicatedHostGroups           = new DedicatedHostGroupsOperations(this);
     DedicatedHosts                = new DedicatedHostsOperations(this);
     SshPublicKeys                 = new SshPublicKeysOperations(this);
     VirtualMachineExtensionImages = new VirtualMachineExtensionImagesOperations(this);
     VirtualMachineExtensions      = new VirtualMachineExtensionsOperations(this);
     VirtualMachineImages          = new VirtualMachineImagesOperations(this);
     VirtualMachineImagesEdgeZone  = new VirtualMachineImagesEdgeZoneOperations(this);
     Usage                                 = new UsageOperations(this);
     VirtualMachines                       = new VirtualMachinesOperations(this);
     VirtualMachineScaleSets               = new VirtualMachineScaleSetsOperations(this);
     VirtualMachineSizes                   = new VirtualMachineSizesOperations(this);
     Images                                = new ImagesOperations(this);
     RestorePointCollections               = new RestorePointCollectionsOperations(this);
     RestorePoints                         = new RestorePointsOperations(this);
     VirtualMachineScaleSetExtensions      = new VirtualMachineScaleSetExtensionsOperations(this);
     VirtualMachineScaleSetRollingUpgrades = new VirtualMachineScaleSetRollingUpgradesOperations(this);
     VirtualMachineScaleSetVMExtensions    = new VirtualMachineScaleSetVMExtensionsOperations(this);
     VirtualMachineScaleSetVMs             = new VirtualMachineScaleSetVMsOperations(this);
     LogAnalytics                          = new LogAnalyticsOperations(this);
     VirtualMachineRunCommands             = new VirtualMachineRunCommandsOperations(this);
     VirtualMachineScaleSetVMRunCommands   = new VirtualMachineScaleSetVMRunCommandsOperations(this);
     ResourceSkus                          = new ResourceSkusOperations(this);
     Disks                                 = new DisksOperations(this);
     Snapshots                             = new SnapshotsOperations(this);
     DiskEncryptionSets                    = new DiskEncryptionSetsOperations(this);
     DiskAccesses                          = new DiskAccessesOperations(this);
     DiskRestorePoint                      = new DiskRestorePointOperations(this);
     Galleries                             = new GalleriesOperations(this);
     GalleryImages                         = new GalleryImagesOperations(this);
     GalleryImageVersions                  = new GalleryImageVersionsOperations(this);
     GalleryApplications                   = new GalleryApplicationsOperations(this);
     GalleryApplicationVersions            = new GalleryApplicationVersionsOperations(this);
     GallerySharingProfile                 = new GallerySharingProfileOperations(this);
     SharedGalleries                       = new SharedGalleriesOperations(this);
     SharedGalleryImages                   = new SharedGalleryImagesOperations(this);
     SharedGalleryImageVersions            = new SharedGalleryImageVersionsOperations(this);
     CloudServiceRoleInstances             = new CloudServiceRoleInstancesOperations(this);
     CloudServiceRoles                     = new CloudServiceRolesOperations(this);
     CloudServices                         = new CloudServicesOperations(this);
     CloudServicesUpdateDomain             = new CloudServicesUpdateDomainOperations(this);
     CloudServiceOperatingSystems          = new CloudServiceOperatingSystemsOperations(this);
     BaseUri                               = new System.Uri("https://management.azure.com");
     AcceptLanguage                        = "en-US";
     LongRunningOperationRetryTimeout      = 30;
     GenerateClientRequestId               = true;
     SerializationSettings                 = new JsonSerializerSettings
     {
         Formatting            = Newtonsoft.Json.Formatting.Indented,
         DateFormatHandling    = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
         DateTimeZoneHandling  = Newtonsoft.Json.DateTimeZoneHandling.Utc,
         NullValueHandling     = Newtonsoft.Json.NullValueHandling.Ignore,
         ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize,
         ContractResolver      = new ReadOnlyJsonContractResolver(),
         Converters            = new List <JsonConverter>
         {
             new Iso8601TimeSpanConverter()
         }
     };
     SerializationSettings.Converters.Add(new TransformationJsonConverter());
     DeserializationSettings = new JsonSerializerSettings
     {
         DateFormatHandling    = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
         DateTimeZoneHandling  = Newtonsoft.Json.DateTimeZoneHandling.Utc,
         NullValueHandling     = Newtonsoft.Json.NullValueHandling.Ignore,
         ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize,
         ContractResolver      = new ReadOnlyJsonContractResolver(),
         Converters            = new List <JsonConverter>
         {
             new Iso8601TimeSpanConverter()
         }
     };
     CustomInitialize();
     DeserializationSettings.Converters.Add(new TransformationJsonConverter());
     DeserializationSettings.Converters.Add(new CloudErrorJsonConverter());
 }
        public async Task TestDedicatedHostOperations()
        {
            EnsureClientsInitialized(LocationEastUs2UpperCase.ToLower());

            string baseRGName = Recording.GenerateAssetName(TestPrefix);
            string rgName     = baseRGName + "DH";
            string dhgName    = "DHG-1";
            string dhName     = "DH-1";
            // Create a dedicated host group, then get the dedicated host group and validate that they match
            DedicatedHostGroup createdDHG = await CreateDedicatedHostGroup(rgName, dhgName);

            DedicatedHostGroup returnedDHG = await DedicatedHostGroupsOperations.GetAsync(rgName, dhgName);

            ValidateDedicatedHostGroup(createdDHG, returnedDHG);

            // Update existing dedicated host group
            DedicatedHostGroupUpdate updateDHGInput = new DedicatedHostGroupUpdate()
            {
                Tags = { { "testKey", "testValue" } }
            };

            createdDHG.Tags.InitializeFrom(updateDHGInput.Tags);
            updateDHGInput.PlatformFaultDomainCount = returnedDHG.PlatformFaultDomainCount; // There is a bug in PATCH.  PlatformFaultDomainCount is a required property now.
            returnedDHG = await DedicatedHostGroupsOperations.UpdateAsync(rgName, dhgName, updateDHGInput);

            ValidateDedicatedHostGroup(createdDHG, returnedDHG);

            //List DedicatedHostGroups by subscription and by resourceGroup
            var listDHGsResponse    = DedicatedHostGroupsOperations.ListByResourceGroupAsync(rgName);
            var listDHGsResponseRes = await listDHGsResponse.ToEnumerableAsync();

            Assert.IsTrue(listDHGsResponseRes.Count() == 1);
            //Assert.Single(listDHGsResponse);
            ValidateDedicatedHostGroup(createdDHG, listDHGsResponseRes.First());
            listDHGsResponse    = DedicatedHostGroupsOperations.ListBySubscriptionAsync();
            listDHGsResponseRes = await listDHGsResponse.ToEnumerableAsync();

            //There might be multiple dedicated host groups in the subscription, we only care about the one that we created.
            returnedDHG = listDHGsResponseRes.First(dhg => dhg.Id == createdDHG.Id);
            Assert.NotNull(returnedDHG);
            ValidateDedicatedHostGroup(createdDHG, returnedDHG);

            //Create DedicatedHost within the DedicatedHostGroup and validate
            var createdDH = await CreateDedicatedHost(rgName, dhgName, dhName);

            var returnedDH = await DedicatedHostsOperations.GetAsync(rgName, dhgName, dhName);

            ValidateDedicatedHost(createdDH, returnedDH);

            //List DedicatedHosts
            var listDHsResponse    = DedicatedHostsOperations.ListByHostGroupAsync(rgName, dhgName);
            var listDHsResponseRes = await listDHsResponse.ToEnumerableAsync();

            Assert.IsTrue(listDHsResponseRes.Count() == 1);
            ValidateDedicatedHost(createdDH, listDHsResponseRes.First());

            //Delete DedicatedHosts and DedicatedHostGroups
            await WaitForCompletionAsync(await DedicatedHostsOperations.StartDeleteAsync(rgName, dhgName, dhName));

            await DedicatedHostGroupsOperations.DeleteAsync(rgName, dhgName);

            WaitMinutes(1);
        }