Skip to content

Commit

Permalink
Reworked metric storage to allow metrics with alias only (no name). F…
Browse files Browse the repository at this point in the history
…ixes #37.
  • Loading branch information
SeppPenner committed Mar 20, 2024
1 parent eb26c6e commit 301d443
Show file tree
Hide file tree
Showing 19 changed files with 811 additions and 145 deletions.
7 changes: 0 additions & 7 deletions src/SparkplugNet.Examples/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ public sealed class Program
/// <summary>
/// The main method.
/// </summary>
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
public static async Task Main()
{
try
Expand All @@ -103,7 +102,6 @@ public static async Task Main()
/// <summary>
/// Runs a version A simulation.
/// </summary>
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
private static async Task RunVersionA()
{
await RunVersionAApplication();
Expand All @@ -113,7 +111,6 @@ private static async Task RunVersionA()
/// <summary>
/// Runs a version B simulation.
/// </summary>
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
private static async Task RunVersionB()
{
await RunVersionBApplication();
Expand All @@ -123,7 +120,6 @@ private static async Task RunVersionB()
/// <summary>
/// Runs the version A application.
/// </summary>
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
private static async Task RunVersionAApplication()
{
var applicationOptions = new SparkplugApplicationOptions(
Expand Down Expand Up @@ -190,7 +186,6 @@ private static async Task RunVersionAApplication()
/// <summary>
/// Runs the version A node.
/// </summary>
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
private static async Task RunVersionANode()
{
var nodeOptions = new SparkplugNodeOptions(
Expand Down Expand Up @@ -263,7 +258,6 @@ private static async Task RunVersionANode()
/// <summary>
/// Runs the version B application.
/// </summary>
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
private static async Task RunVersionBApplication()
{
var applicationOptions = new SparkplugApplicationOptions(
Expand Down Expand Up @@ -330,7 +324,6 @@ private static async Task RunVersionBApplication()
/// <summary>
/// Runs the version B node.
/// </summary>
/// <returns>A <see cref="Task"/> representing any asynchronous operation.</returns>
private static async Task RunVersionBNode()
{
var nodeOptions = new SparkplugNodeOptions(
Expand Down
3 changes: 3 additions & 0 deletions src/SparkplugNet.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

global using SparkplugNet.Core;
global using SparkplugNet.Core.Enumerations;
global using SparkplugNet.Core.Exceptions;
global using SparkplugNet.Core.Messages;

global using SparkplugNet.Tests.Helpers;
Expand All @@ -17,4 +18,6 @@

global using VersionAData = SparkplugNet.VersionA.Data;
global using VersionBData = SparkplugNet.VersionB.Data;
global using VersionAMain = SparkplugNet.VersionA;
global using VersionBMain = SparkplugNet.VersionB;
#pragma warning restore IDE0065 // Die using-Anweisung wurde falsch platziert.
286 changes: 286 additions & 0 deletions src/SparkplugNet.Tests/MetricStorage/KnownMetricStorageFilterTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,286 @@
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="KnownMetricStorageFilterTests.cs" company="Hämmer Electronics">
// The project is licensed under the MIT license.
// </copyright>
// <summary>
// A test class for the known metric storage (The filter function).
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace SparkplugNet.Tests.MetricStorage;

/// <summary>
/// A test class for the known metric storage (The filter function).
/// </summary>
[TestClass]
public sealed class KnownMetricStorageFilterTests
{
/// <summary>
/// Tests the version A metric storage with a valid metric.
/// </summary>
[TestMethod]
public void TestFilterVersionAValidMetric()
{
IEnumerable<VersionAData.KuraMetric> metrics =
[
new("TestMetric1", VersionAData.DataType.Double, 123.45)
];

IEnumerable<VersionAData.KuraMetric> filterMetrics =
[
new("TestMetric1", VersionAData.DataType.Double, 128.56)
];

var node = new VersionAMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
Assert.IsNotNull(node);
Assert.IsTrue(node.KnownMetrics.Count() == 1);

// Test filter function.
var filteredMetrics = node.KnownMetricsStorage.FilterMetrics(filterMetrics, SparkplugMessageType.NodeData);
Assert.IsTrue(filteredMetrics.Count() == 1);
}

/// <summary>
/// Tests the version A metric storage with an invalid metric (No valid name).
/// </summary>
[TestMethod]
public void TestFilterVersionAInvalidMetricNoName()
{
IEnumerable<VersionAData.KuraMetric> metrics =
[
new("TestMetric1", VersionAData.DataType.Double, 123.45)
];

IEnumerable<VersionAData.KuraMetric> filterMetrics =
[
new(string.Empty, VersionAData.DataType.Double, 128.56)
];

var node = new VersionAMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
Assert.IsNotNull(node);
Assert.IsTrue(node.KnownMetrics.Count() == 1);

// Test filter function.
var filteredMetrics = node.KnownMetricsStorage.FilterMetrics(filterMetrics, SparkplugMessageType.NodeData);
Assert.IsTrue(!filteredMetrics.Any());
}

/// <summary>
/// Tests the version A metric storage with an invalid metric (Unknown metric name).
/// </summary>
[TestMethod]
public void TestFilterVersionAInvalidMetricUnknownMetricName()
{
IEnumerable<VersionAData.KuraMetric> metrics =
[
new("TestMetric1", VersionAData.DataType.Double, 123.45)
];

IEnumerable<VersionAData.KuraMetric> filterMetrics =
[
new("TestMetric2", VersionAData.DataType.Double, 128.56)
];

var node = new VersionAMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
Assert.IsNotNull(node);
Assert.IsTrue(node.KnownMetrics.Count() == 1);

// Test filter function.
var filteredMetrics = node.KnownMetricsStorage.FilterMetrics(filterMetrics, SparkplugMessageType.NodeData);
Assert.IsTrue(!filteredMetrics.Any());
}

/// <summary>
/// Tests the version A metric storage with an invalid metric (wrong device type).
/// </summary>
[TestMethod]
public void TestFilterVersionAInvalidMetricWrongDeviceType()
{
IEnumerable<VersionAData.KuraMetric> metrics =
[
new("TestMetric1", VersionAData.DataType.Double, 123.45)
];

IEnumerable<VersionAData.KuraMetric> filterMetrics =
[
new("TestMetric1", VersionAData.DataType.Float, 128.56)
];

var node = new VersionAMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
Assert.IsNotNull(node);
Assert.IsTrue(node.KnownMetrics.Count() == 1);

// Test filter function.
var filteredMetrics = node.KnownMetricsStorage.FilterMetrics(filterMetrics, SparkplugMessageType.NodeData);
Assert.IsTrue(!filteredMetrics.Any());
}

/// <summary>
/// Tests the version B metric storage with a valid metric (Alias only).
/// </summary>
[TestMethod]
public void TestFilterVersionBValidAliasOnly()
{
var metric = new VersionBData.Metric(string.Empty, VersionBData.DataType.Double, 123.45)
{
Alias = 1
};
IEnumerable<VersionBData.Metric> metrics =
[
metric
];

var filterMetric = new VersionBData.Metric(string.Empty, VersionBData.DataType.Double, 128.56)
{
Alias = 1
};
IEnumerable<VersionBData.Metric> filterMetrics =
[
filterMetric
];

var node = new VersionBMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
Assert.IsNotNull(node);
Assert.IsTrue(node.KnownMetrics.Count() == 1);

// Test filter function.
var filteredMetrics = node.KnownMetricsStorage.FilterMetrics(filterMetrics, SparkplugMessageType.NodeData);
Assert.IsTrue(filteredMetrics.Count() == 1);
}

/// <summary>
/// Tests the version B metric storage with a valid metric (Name only).
/// </summary>
[TestMethod]
public void TestFilterVersionBValidNameOnly()
{
IEnumerable<VersionBData.Metric> metrics =
[
new("TestMetric1", VersionBData.DataType.Double, 123.45)
];

IEnumerable<VersionBData.Metric> filterMetrics =
[
new("TestMetric1", VersionBData.DataType.Double, 128.56)
];

var node = new VersionBMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
Assert.IsNotNull(node);
Assert.IsTrue(node.KnownMetrics.Count() == 1);

// Test filter function.
var filteredMetrics = node.KnownMetricsStorage.FilterMetrics(filterMetrics, SparkplugMessageType.NodeData);
Assert.IsTrue(filteredMetrics.Count() == 1);
}

/// <summary>
/// Tests the version B metric storage with a valid metric (Alias and name).
/// </summary>
[TestMethod]
public void TestFilterVersionBValidAliasAndName()
{
var metric = new VersionBData.Metric("TestMetric1", VersionBData.DataType.Double, 123.45)
{
Alias = 1
};
IEnumerable<VersionBData.Metric> metrics =
[
metric
];

var filterMetric = new VersionBData.Metric("TestMetric1", VersionBData.DataType.Double, 128.56)
{
Alias = 1
};
IEnumerable<VersionBData.Metric> filterMetrics =
[
filterMetric
];

var node = new VersionBMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
Assert.IsNotNull(node);
Assert.IsTrue(node.KnownMetrics.Count() == 1);

// Test filter function.
var filteredMetrics = node.KnownMetricsStorage.FilterMetrics(filterMetrics, SparkplugMessageType.NodeData);
Assert.IsTrue(filteredMetrics.Count() == 1);
}






///// <summary>
///// Tests the version B metric storage with a valid metric (Name only).
///// </summary>
//[TestMethod]
//public void TestFilterVersionBValidMetricNameOnly()
//{
// IEnumerable<VersionBData.Metric> metrics =
// [
// new("TestMetric1", VersionBData.DataType.Double, 123.45)
// ];

// var node = new VersionBMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
// Assert.IsNotNull(node);
// Assert.IsTrue(node.KnownMetrics.Count() == 1);
//}

///// <summary>
///// Tests the version B metric storage with a valid metric (Alias only).
///// </summary>
//[TestMethod]
//public void TestFilterVersionBValidMetricAliasOnly()
//{
// var metric = new VersionBData.Metric(string.Empty, VersionBData.DataType.Double, 123.45)
// {
// Alias = 1
// };

// IEnumerable<VersionBData.Metric> metrics =
// [
// metric
// ];

// var node = new VersionBMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
// Assert.IsNotNull(node);
// Assert.IsTrue(node.KnownMetrics.Count() == 1);
//}

///// <summary>
///// Tests the version B metric storage with a valid metric (Name and alias).
///// </summary>
//[TestMethod]
//public void TestFilterVersionBValidMetricNameAndAlias()
//{
// var metric = new VersionBData.Metric("TestMetric1", VersionBData.DataType.Double, 123.45)
// {
// Alias = 1
// };

// IEnumerable<VersionBData.Metric> metrics =
// [
// metric
// ];

// var node = new VersionBMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
// Assert.IsNotNull(node);
// Assert.IsTrue(node.KnownMetrics.Count() == 1);
//}

///// <summary>
///// Tests the version B metric storage with an invalid metric.
///// </summary>
//[TestMethod]
//[ExpectedException(typeof(InvalidMetricException))]
//public void TestFilterVersionBInvalidMetric()
//{
// IEnumerable<VersionBData.Metric> metrics =
// [
// new(string.Empty, VersionBData.DataType.Double, 123.45)
// ];

// _ = new VersionBMain.SparkplugNode(metrics, SparkplugSpecificationVersion.Version30);
//}
}

0 comments on commit 301d443

Please sign in to comment.