Skip to content

Commit

Permalink
Refactoring tests and deserialization code
Browse files Browse the repository at this point in the history
  • Loading branch information
Michelle Cone committed Mar 26, 2019
1 parent 568f03f commit aec91e6
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 61 deletions.
2 changes: 1 addition & 1 deletion docs/configuration/metrics/virtual-machine.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ All supported metrics are documented in the official [Azure Monitor documentatio
Example:
```yaml
name: demo_virtualmachine_percentage_cpu
description: "Average percentage cpu usage of our 'promitor-virtual-machine'"
description: "Average percentage cpu usage of our 'promitor-virtual-machine' virtual machine"
resourceType: VirtualMachine
virtualMachineName: promitor-virtual-machine
azureMetricConfiguration:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ namespace Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes
public class VirtualMachineMetricDefinition : MetricDefinition
{
public string VirtualMachineName { get; set; }
public override ResourceType ResourceType { get; set; } = ResourceType.VirtualMachine;
public override ResourceType ResourceType { get; } = ResourceType.VirtualMachine;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ internal override MetricDefinition Deserialize(YamlMappingNode metricNode)
var metricDefinition = base.DeserializeMetricDefinition<VirtualMachineMetricDefinition>(metricNode);
var virtualMachineName = metricNode.Children[new YamlScalarNode("virtualMachineName")];

metricDefinition.virtualMachineName = virtualMachineName?.ToString();
metricDefinition.VirtualMachineName = virtualMachineName?.ToString();

return metricDefinition;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ internal static GenericAzureMetricDeserializer GetDeserializerFor(Configuration.
case Configuration.Model.ResourceType.StorageQueue:
return new StorageQueueMetricDeserializer();
case Configuration.Model.ResourceType.VirtualMachine:
return new VirtualMachineMetric(node);
return new VirtualMachineMetricDeserializer();
}

throw new ArgumentOutOfRangeException($@"Resource Type {resource} not supported.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ public string Build()
var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName);
var metric = new VirtualMachineMetricDefinition
{
ResourceType = ResourceType.VirtualMachine,
Name = metricName,
Description = metricDescription,
VirtualMachineName = virtualMachineName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using Microsoft.Extensions.Logging.Abstractions;
using Promitor.Core.Scraping.Configuration.Model;
using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes;
using Promitor.Core.Scraping.Configuration.Serialization;
using Promitor.Core.Scraping.Configuration.Serialization.Core;
using Xunit;
using MetricDefinition = Promitor.Core.Scraping.Configuration.Model.Metrics.MetricDefinition;

Expand Down Expand Up @@ -44,8 +44,8 @@ public void YamlSerialization_SerializeAndDeserializeValidConfigForVirtualMachin
Assert.Single(deserializedConfiguration.Metrics);
var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault();
AssertMetricDefinition(deserializedMetricDefinition, virtualMachineMetricDefinition);
var deserializedServiceBusMetricDefinition = deserializedMetricDefinition as VirtualMachineMetricDefinition;
AssertVirtualMachineMetricDefinition(deserializedServiceBusMetricDefinition, virtualMachineMetricDefinition, deserializedMetricDefinition);
var deserializedVirtualMachineMetricDefinition = deserializedMetricDefinition as VirtualMachineMetricDefinition;
AssertVirtualMachineMetricDefinition(deserializedVirtualMachineMetricDefinition, virtualMachineMetricDefinition, deserializedMetricDefinition);
}

private static void AssertVirtualMachineMetricDefinition(VirtualMachineMetricDefinition deserializedVirtualMachineMetricDefinition, VirtualMachineMetricDefinition virtualMachineMetricDefinition, MetricDefinition deserializedMetricDefinition)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,75 +1,97 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using Bogus;
using Microsoft.Extensions.Logging.Abstractions;
using Promitor.Core.Scraping.Configuration.Model;
using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes;
using Promitor.Core.Scraping.Configuration.Serialization;
using Promitor.Scraper.Host.Validation.Steps;
using Promitor.Scraper.Tests.Unit.Builders;
using Promitor.Scraper.Tests.Unit.Stubs;
using Xunit;
using MetricDefinition = Promitor.Core.Scraping.Configuration.Model.Metrics.MetricDefinition;

namespace Promitor.Scraper.Tests.Unit.Serialization.MetricsDeclaration
namespace Promitor.Scraper.Tests.Unit.Validation.Metrics.ResourceTypes
{
[Category("Unit")]
public class MetricsDeclarationWithVirtualMachineYamlSerializationTests : YamlSerializationTests<VirtualMachineMetricDefinition>
public class VirtualMachineMetricsDeclarationValidationStepTests
{
[Fact]
public void YamlSerialization_SerializeAndDeserializeValidConfigForVirtualMachine_SucceedsWithIdenticalOutput()
public void VirtualMachineMetricsDeclaration_DeclarationWithoutAzureMetricName_Succeeds()
{
// Arrange
var azureMetadata = GenerateBogusAzureMetadata();
var virtualMachineMetricDefinition = GenerateBogusVirtualMachineMetricDefinition();
var metricDefaults = GenerateBogusMetricDefaults();
var scrapingConfiguration = new Core.Scraping.Configuration.Model.MetricsDeclaration
{
AzureMetadata = azureMetadata,
MetricDefaults = metricDefaults,
Metrics = new List<MetricDefinition>
{
virtualMachineMetricDefinition
}
};
var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance);
var rawDeclaration = MetricsDeclarationBuilder.WithMetadata()
.WithVirtualMachineMetric(azureMetricName: string.Empty)
.Build();
var metricsDeclarationProvider = new MetricsDeclarationProviderStub(rawDeclaration);

// Act
var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration);
var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration);
var scrapingScheduleValidationStep = new MetricsDeclarationValidationStep(metricsDeclarationProvider);
var validationResult = scrapingScheduleValidationStep.Run();

// Assert
Assert.NotNull(deserializedConfiguration);
AssertAzureMetadata(deserializedConfiguration, azureMetadata);
AssertMetricDefaults(deserializedConfiguration, metricDefaults);
Assert.NotNull(deserializedConfiguration.Metrics);
Assert.Single(deserializedConfiguration.Metrics);
var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault();
AssertMetricDefinition(deserializedMetricDefinition, virtualMachineMetricDefinition);
var deserializedServiceBusMetricDefinition = deserializedMetricDefinition as VirtualMachineMetricDefinition;
AssertVirtualMachineMetricDefinition(deserializedServiceBusMetricDefinition, virtualMachineMetricDefinition, deserializedMetricDefinition);
Assert.False(validationResult.IsSuccessful, "Validation is successful");
}

private static void AssertVirtualMachineMetricDefinition(VirtualMachineMetricDefinition deserializedVirtualMachineMetricDefinition, VirtualMachineMetricDefinition virtualMachineMetricDefinition, MetricDefinition deserializedMetricDefinition)
[Fact]
public void VirtualMachineMetricsDeclaration_DeclarationWithoutMetricDescription_Succeeded()
{
// Arrange
var rawDeclaration = MetricsDeclarationBuilder.WithMetadata()
.WithVirtualMachineMetric(metricDescription: string.Empty)
.Build();
var metricsDeclarationProvider = new MetricsDeclarationProviderStub(rawDeclaration);

// Act
var scrapingScheduleValidationStep = new MetricsDeclarationValidationStep(metricsDeclarationProvider);
var validationResult = scrapingScheduleValidationStep.Run();

// Assert
Assert.True(validationResult.IsSuccessful, "Validation was not successful");
}

[Fact]
public void VirtualMachineMetricsDeclaration_DeclarationWithoutMetricName_Fails()
{
// Arrange
var rawDeclaration = MetricsDeclarationBuilder.WithMetadata()
.WithVirtualMachineMetric(string.Empty)
.Build();
var metricsDeclarationProvider = new MetricsDeclarationProviderStub(rawDeclaration);

// Act
var scrapingScheduleValidationStep = new MetricsDeclarationValidationStep(metricsDeclarationProvider);
var validationResult = scrapingScheduleValidationStep.Run();

// Assert
Assert.False(validationResult.IsSuccessful, "Validation is successful");
}

[Fact]
public void VirtualMachineMetricsDeclaration_DeclarationWithoutVirtualMachineName_Fails()
{
Assert.NotNull(deserializedVirtualMachineMetricDefinition);
Assert.Equal(virtualMachineMetricDefinition.VirtualMachineName, deserializedVirtualMachineMetricDefinition.VirtualMachineName);
Assert.NotNull(deserializedMetricDefinition.AzureMetricConfiguration);
Assert.Equal(virtualMachineMetricDefinition.AzureMetricConfiguration.MetricName, deserializedMetricDefinition.AzureMetricConfiguration.MetricName);
Assert.NotNull(deserializedMetricDefinition.AzureMetricConfiguration.Aggregation);
Assert.Equal(virtualMachineMetricDefinition.AzureMetricConfiguration.Aggregation.Type, deserializedMetricDefinition.AzureMetricConfiguration.Aggregation.Type);
Assert.Equal(virtualMachineMetricDefinition.AzureMetricConfiguration.Aggregation.Interval, deserializedMetricDefinition.AzureMetricConfiguration.Aggregation.Interval);
// Arrange
var rawDeclaration = MetricsDeclarationBuilder.WithMetadata()
.WithVirtualMachineMetric(virtualMachineName: string.Empty)
.Build();
var metricsDeclarationProvider = new MetricsDeclarationProviderStub(rawDeclaration);

// Act
var scrapingScheduleValidationStep = new MetricsDeclarationValidationStep(metricsDeclarationProvider);
var validationResult = scrapingScheduleValidationStep.Run();

// Assert
Assert.False(validationResult.IsSuccessful, "Validation is successful");
}
private VirtualMachineMetricDefinition GenerateBogusVirtualMachineMetricDefinition()

[Fact]
public void VirtualMachineMetricsDeclaration_ValidDeclaration_Succeeds()
{
var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration();
var bogusGenerator = new Faker<VirtualMachineMetricDefinition>()
.StrictMode(ensureRulesForAllProperties: true)
.RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Name.FirstName())
.RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6))
.RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.VirtualMachine)
.RuleFor(metricDefinition => metricDefinition.VirtualMachineName, faker => faker.Name.LastName())
.RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration);
// Arrange
var rawMetricsDeclaration = MetricsDeclarationBuilder.WithMetadata()
.WithVirtualMachineMetric()
.Build();
var metricsDeclarationProvider = new MetricsDeclarationProviderStub(rawMetricsDeclaration);

return bogusGenerator.Generate();
// Act
var scrapingScheduleValidationStep = new MetricsDeclarationValidationStep(metricsDeclarationProvider);
var validationResult = scrapingScheduleValidationStep.Run();

// Assert
Assert.True(validationResult.IsSuccessful, "Validation was not successful");
}
}
}

0 comments on commit aec91e6

Please sign in to comment.