-
-
Notifications
You must be signed in to change notification settings - Fork 92
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactoring tests and deserialization code
- Loading branch information
Michelle Cone
committed
Mar 26, 2019
1 parent
44cc083
commit de9fabf
Showing
7 changed files
with
82 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
128 changes: 75 additions & 53 deletions
128
.../Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); | ||
} | ||
} | ||
} |