public void GetMetricsCommandParametersProcessing()
        {
            // Testting defaults and required parameters
            cmdlet.ResourceId = Utilities.ResourceUri;
            cmdlet.TimeGrain  = TimeSpan.FromMinutes(1);

            cmdlet.ExecuteCmdlet();
            Assert.True(filter != null && filter.Contains("timeGrain eq duration'PT1M'") && filter.Contains(" and startTime eq ") && filter.Contains(" and endTime eq "));
            Assert.Equal(Utilities.ResourceUri, resourceId);

            cmdlet.TimeGrain = TimeSpan.FromMinutes(5);

            cmdlet.ExecuteCmdlet();
            Assert.True(filter != null && filter.Contains("timeGrain eq duration'PT5M'") && filter.Contains(" and startTime eq ") && filter.Contains(" and endTime eq "));
            Assert.Equal(Utilities.ResourceUri, resourceId);

            var endDate = DateTime.Now.AddMinutes(-1);

            cmdlet.TimeGrain = TimeSpan.FromMinutes(5);
            cmdlet.EndTime   = endDate;

            var startTime = endDate.Subtract(GetAzureRmMetricCommand.DefaultTimeRange).ToString("O");
            var endTime   = endDate.ToString("O");
            var expected  = "timeGrain eq duration'PT5M' and startTime eq " + startTime + " and endTime eq " + endTime;

            // Remove the value assigned in the last execution
            cmdlet.StartTime = default(DateTime);

            cmdlet.ExecuteCmdlet();
            Assert.Equal(expected, filter);
            Assert.Equal(Utilities.ResourceUri, resourceId);

            cmdlet.StartTime = endDate.Subtract(GetAzureRmMetricCommand.DefaultTimeRange).Subtract(GetAzureRmMetricCommand.DefaultTimeRange);
            startTime        = cmdlet.StartTime.ToString("O");
            expected         = "timeGrain eq duration'PT5M' and startTime eq " + startTime + " and endTime eq " + endTime;

            cmdlet.ExecuteCmdlet();
            Assert.Equal(expected, filter);
            Assert.Equal(Utilities.ResourceUri, resourceId);

            // Testing with optional parameters
            cmdlet.MetricNames = new[] { "n1", "n2" };
            expected           = "(name.value eq 'n1' or name.value eq 'n2') and " + expected;

            cmdlet.ExecuteCmdlet();
            Assert.Equal(expected, filter);
            Assert.Equal(Utilities.ResourceUri, resourceId);
        }
        public void GetMetricsCommandParametersProcessing()
        {
            // Testting defaults and required parameters
            cmdlet.ResourceId = Utilities.ResourceUri;

            cmdlet.ExecuteCmdlet();
            Assert.True(filter != null && filter.Filter == null);
            Assert.Equal(Utilities.ResourceUri, resourceId);

            cmdlet.MetricNames = new[] { "n1", "n2" };
            cmdlet.ExecuteCmdlet();
            Assert.True(filter != null);
            Assert.True(filter.Filter.Contains("(name.value eq 'n1' or name.value eq 'n2')"));
            Assert.Equal(Utilities.ResourceUri, resourceId);

            cmdlet.AggregationType = AggregationType.Total;
            cmdlet.ExecuteCmdlet();
            Assert.True(filter != null);
            Assert.True(filter.Filter.Contains("aggregationType eq 'Total'"));
            Assert.True(filter.Filter.Contains("(name.value eq 'n1' or name.value eq 'n2')"));
            Assert.Equal(Utilities.ResourceUri, resourceId);

            var endDate = DateTime.UtcNow.AddMinutes(-1);

            cmdlet.AggregationType = AggregationType.Average;
            cmdlet.EndTime         = endDate;

            // Remove the value assigned in the last execution
            cmdlet.StartTime = default(DateTime);

            cmdlet.ExecuteCmdlet();
            Assert.True(filter != null);
            Assert.True(filter.Filter.Contains("aggregationType eq 'Average'"));
            Assert.True(filter.Filter.Contains("(name.value eq 'n1' or name.value eq 'n2')"));
            Assert.True(filter.Filter.Contains("startTime eq " + endDate.Subtract(GetAzureRmMetricCommand.DefaultTimeRange).ToString("O")));
            Assert.True(filter.Filter.Contains("endTime eq " + endDate.ToString("O")));
            Assert.Equal(Utilities.ResourceUri, resourceId);

            cmdlet.StartTime = endDate.Subtract(GetAzureRmMetricCommand.DefaultTimeRange).Subtract(GetAzureRmMetricCommand.DefaultTimeRange);

            cmdlet.ExecuteCmdlet();
            Assert.True(filter != null);
            Assert.True(filter.Filter.Contains("aggregationType eq 'Average'"));
            Assert.True(filter.Filter.Contains("(name.value eq 'n1' or name.value eq 'n2')"));
            Assert.True(filter.Filter.Contains("startTime eq " + endDate.Subtract(GetAzureRmMetricCommand.DefaultTimeRange).Subtract(GetAzureRmMetricCommand.DefaultTimeRange).ToString("O")));
            Assert.True(filter.Filter.Contains("endTime eq " + endDate.ToString("O")));
            Assert.Equal(Utilities.ResourceUri, resourceId);

            cmdlet.AggregationType = AggregationType.Maximum;
            cmdlet.TimeGrain       = TimeSpan.FromMinutes(5);
            cmdlet.ExecuteCmdlet();
            Assert.True(filter != null);
            Assert.True(filter.Filter.Contains("aggregationType eq 'Maximum'"));
            Assert.True(filter.Filter.Contains("(name.value eq 'n1' or name.value eq 'n2')"));
            Assert.True(filter.Filter.Contains("startTime eq " + endDate.Subtract(GetAzureRmMetricCommand.DefaultTimeRange).Subtract(GetAzureRmMetricCommand.DefaultTimeRange).ToString("O")));
            Assert.True(filter.Filter.Contains("endTime eq " + endDate.ToString("O")));
            Assert.True(filter.Filter.Contains("timeGrain eq duration'" + XmlConvert.ToString(cmdlet.TimeGrain) + "'"));
            Assert.Equal(Utilities.ResourceUri, resourceId);
        }
        public void GetMetricsCommandParametersProcessing()
        {
            // Testting defaults and required parameters
            cmdlet.ResourceId = Utilities.ResourceUri;

            cmdlet.ExecuteCmdlet();
            Assert.Equal(Utilities.ResourceUri, resourceId);

            // Testing with optional parameters
            cmdlet.MetricName = new[] { "n1", "n2" };
            cmdlet.ExecuteCmdlet();
            string expectedMetricNames = string.Join(",", cmdlet.MetricName);

            Assert.Equal(Utilities.ResourceUri, resourceId);
            Assert.Equal(expectedMetricNames, metricnames);

            cmdlet.AggregationType = AggregationType.Total;
            cmdlet.ExecuteCmdlet();
            Assert.Equal(Utilities.ResourceUri, resourceId);
            Assert.Equal(expectedMetricNames, metricnames);
            Assert.Equal(AggregationType.Total.ToString(), aggregationType);

            var endDate = DateTime.UtcNow.AddMinutes(-1);

            cmdlet.AggregationType = AggregationType.Average;
            cmdlet.EndTime         = endDate;

            // Remove the value assigned in the last execution
            cmdlet.StartTime = default(DateTime);

            cmdlet.ExecuteCmdlet();
            string expectedTimespan = string.Concat(endDate.Subtract(GetAzureRmMetricCommand.DefaultTimeRange).ToUniversalTime().ToString("O"), "/", endDate.ToUniversalTime().ToString("O"));

            Assert.Equal(Utilities.ResourceUri, resourceId);
            Assert.Equal(expectedMetricNames, metricnames);
            Assert.Equal(AggregationType.Average.ToString(), aggregationType);
            Assert.Equal(expectedTimespan, timeSpan);


            cmdlet.StartTime = endDate.Subtract(GetAzureRmMetricCommand.DefaultTimeRange).Subtract(GetAzureRmMetricCommand.DefaultTimeRange);

            cmdlet.ExecuteCmdlet();
            expectedTimespan = string.Concat(cmdlet.StartTime.ToUniversalTime().ToString("O"), "/", cmdlet.EndTime.ToUniversalTime().ToString("O"));
            Assert.Equal(Utilities.ResourceUri, resourceId);
            Assert.Equal(expectedMetricNames, metricnames);
            Assert.Equal(AggregationType.Average.ToString(), aggregationType);
            Assert.Equal(expectedTimespan, timeSpan);

            cmdlet.AggregationType = AggregationType.Maximum;
            cmdlet.TimeGrain       = TimeSpan.FromMinutes(5);
            cmdlet.ExecuteCmdlet();
            Assert.Equal(Utilities.ResourceUri, resourceId);
            Assert.Equal(expectedMetricNames, metricnames);
            Assert.Equal(AggregationType.Maximum.ToString(), aggregationType);
            Assert.Equal(expectedTimespan, timeSpan);
            Assert.Equal(TimeSpan.FromMinutes(5), metricQueryInterval.Value);

            cmdlet.MetricNamespace = Utilities.MetricNamespace;
            cmdlet.Top             = 5;
            cmdlet.OrderBy         = "asc";
            cmdlet.ResultType      = ResultType.Metadata;
            Assert.Equal(Utilities.ResourceUri, resourceId);
            Assert.Equal(expectedMetricNames, metricnames);
            Assert.Equal(AggregationType.Maximum.ToString(), aggregationType);
            Assert.Equal(expectedTimespan, timeSpan);
            Assert.Equal(TimeSpan.FromMinutes(5), metricQueryInterval.Value);
        }