public async Task WhenCallingGetResourceMetricDefinitionsHappyFlow()
        {
            string resourceUri = "/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_NAME";

            var expectedDefinitions = GetMetricDefinitionsList();
            var azureResponse       = new AzureOperationResponse <IEnumerable <Microsoft.Azure.Management.Monitor.Fluent.Models.MetricDefinition> >()
            {
                Body      = expectedDefinitions,
                Request   = new HttpRequestMessage(),
                RequestId = "RequestId",
                Response  = new HttpResponseMessage()
            };

            this.metricDefinitionsOperationsMock.Setup(metric => metric.ListWithHttpMessagesAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>())).ReturnsAsync(azureResponse);

            this.monitorManagementClientMock.SetupGet(monitorClient => monitorClient.MetricDefinitions).Returns(this.metricDefinitionsOperationsMock.Object);
            IMetricClient metricClient = new MetricClient(this.tracerMock.Object, this.monitorManagementClientMock.Object);

            List <MetricDefinition> definitions = (await metricClient.GetResourceMetricDefinitionsAsync(resourceUri, default(CancellationToken))).ToList();

            // Validate that right Uri was used
            this.metricDefinitionsOperationsMock.Verify(metric => metric.ListWithHttpMessagesAsync(resourceUri, null, null, CancellationToken.None));
            Assert.AreEqual(definitions.Count, 2, "2 definitions are expected");
        }
        public async Task WhenCallingGetResourceMetricDefinitionsHappyFlow()
        {
            string resourceUri = "/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.Storage/storageAccounts/STORAGE_NAME";

            var expectedDefinitions = GetMetricDefinitionsList();
            var azureResponse       = new AzureOperationResponse <IEnumerable <Microsoft.Azure.Management.Monitor.Fluent.Models.MetricDefinition> >()
            {
                Body      = expectedDefinitions,
                Request   = new HttpRequestMessage(),
                RequestId = "RequestId",
                Response  = new HttpResponseMessage()
            };

            this.metricDefinitionsOperationsMock.Setup(metric => metric.ListWithHttpMessagesAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>())).ReturnsAsync(azureResponse);

            this.monitorManagementClientMock.SetupGet(monitorClient => monitorClient.MetricDefinitions).Returns(this.metricDefinitionsOperationsMock.Object);
            IMetricClient metricClient = new MetricClient(this.tracerMock.Object, this.resourceIdentifier.SubscriptionId, this.monitorManagementClientMock.Object);

            List <MetricDefinition> definitions = (await metricClient.GetResourceMetricDefinitionsAsync(resourceUri, default(CancellationToken))).ToList();

            // Validate that right Uri was used
            this.metricDefinitionsOperationsMock.Verify(metric => metric.ListWithHttpMessagesAsync(resourceUri, null, null, CancellationToken.None));
            Assert.AreEqual(definitions.Count, 2, "2 definitions are expected");

            // Validate first metric was converted successfully
            Assert.AreEqual(expectedDefinitions.Count, definitions.Count, "Definition count isn't correct");
            for (int i = 0; i < expectedDefinitions.Count; i++)
            {
                Assert.AreEqual(expectedDefinitions[i].Name.Value, definitions[i].Name, "Metric name isn't correct");
                Assert.IsTrue(expectedDefinitions[i].MetricAvailabilities.Select(x => Tuple.Create(x.Retention, x.TimeGrain)).SequenceEqual(definitions[i].Availabilities), "Metric availabilities aren't correct");
                Assert.IsTrue(expectedDefinitions[i].Dimensions.Select(x => x.Value).SequenceEqual(definitions[i].Dimensions), "Metric dimensions aren't correct");
                Assert.AreEqual(expectedDefinitions[i].IsDimensionRequired, definitions[i].IsDimensionRequired, "Metric is dimension required isn't correct");
                Assert.AreEqual(expectedDefinitions[i].PrimaryAggregationType?.ToString(), definitions[i].PrimaryAggregationType?.ToString(), "Metric primary aggregation type isn't correct");
                Assert.AreEqual(expectedDefinitions[i].Unit?.ToString(), definitions[i].Unit, "Metric unit isn't correct");
            }
        }