87b0c18fb3
QualityMixConformance (SqlServer + QuestDB): tag Q mixes Good/Uncertain/Bad regions across eight 10 s intervals (two all-Uncertain - Mantis 0006166 0%/0% - one through an Uncertain bound, plus Uncertain bounds from a sloped non-Good end and from a hold into an outage); tag QP has data starting and ending inside intervals. PercentGood/PercentBad are asserted against hand-derived Part 13 DurationGood/DurationBad, the oracle is checked against the same hand values, and Count/Average/TimeAverage(2)/Total(2)/Start/End/Delta/Interpolative are compared with the #796 oracle forward, reverse and truncated. Teeth: with SdkAggregateOracle.Run answering PercentGood from the baseline (Uncertain as Good), 8 tests fail per backend; all pass with the fixed oracle. Records a new SDK divergence: with an Uncertain first sample the baseline TimeAverage/Total integrate the pre-data span as a ramp from 0; ours covers only the data (Part 13) - pinned by hand.
84 lines
3.3 KiB
C#
84 lines
3.3 KiB
C#
using ZB.MOM.WW.OtOpcUa.Driver.Historian.Conformance;
|
|
using Xunit;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Driver.Historian.SqlServer.IntegrationTests;
|
|
|
|
// One concrete subclass per conformance class: the suite's tests run here against SQL Server.
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerRawReadConformance(SqlHistorianFixture fx) : RawReadConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerAtTimeConformance(SqlHistorianFixture fx) : AtTimeConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerProcessedConformance(SqlHistorianFixture fx) : ProcessedConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerQualityMixConformance(SqlHistorianFixture fx) : QualityMixConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerQualityContractConformance(SqlHistorianFixture fx) : QualityContractConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerLiveWriteConformance(SqlHistorianFixture fx) : LiveWriteConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerUpdateConformance(SqlHistorianFixture fx) : UpdateConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerTagNameConformance(SqlHistorianFixture fx) : TagNameConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerModifiedValueConformance(SqlHistorianFixture fx) : ModifiedValueConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerEventReadConformance(SqlHistorianFixture fx) : EventReadConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|
|
|
|
[Collection(SqlHistorianCollection.Name)]
|
|
public sealed class SqlServerBoundingValueConformance(SqlHistorianFixture fx) : BoundingValueConformance
|
|
{
|
|
/// <inheritdoc/>
|
|
protected override Task<IConformanceBackend> CreateBackendAsync() => SqlServerConformanceBackend.CreateAsync(fx);
|
|
}
|