feat: data-sourced attributes start with uncertain quality before first DCL value
Attributes bound to data connections now initialize with "Uncertain" quality, distinguishing "never received a value" from "known good" or "connection lost." Quality is tracked per attribute and included in GetAttributeResponse.
This commit is contained in:
@@ -222,4 +222,61 @@ public class InstanceActorTests : TestKit, IDisposable
|
||||
var response = ExpectMsg<GetAttributeResponse>();
|
||||
Assert.Equal("98.6", response.Value?.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InstanceActor_DataSourcedAttribute_StartsWithUncertainQuality()
|
||||
{
|
||||
var config = new FlattenedConfiguration
|
||||
{
|
||||
InstanceUniqueName = "Pump1",
|
||||
Attributes =
|
||||
[
|
||||
new ResolvedAttribute
|
||||
{
|
||||
CanonicalName = "Temperature",
|
||||
Value = "0",
|
||||
DataType = "Double",
|
||||
DataSourceReference = "/Motor/Temperature",
|
||||
BoundDataConnectionName = "OpcServer1"
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
var actor = CreateInstanceActor("Pump1", config);
|
||||
|
||||
actor.Tell(new GetAttributeRequest(
|
||||
"corr-quality-1", "Pump1", "Temperature", DateTimeOffset.UtcNow));
|
||||
|
||||
var response = ExpectMsg<GetAttributeResponse>();
|
||||
Assert.True(response.Found);
|
||||
Assert.Equal("Uncertain", response.Quality);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InstanceActor_StaticAttribute_StartsWithGoodQuality()
|
||||
{
|
||||
var config = new FlattenedConfiguration
|
||||
{
|
||||
InstanceUniqueName = "Pump1",
|
||||
Attributes =
|
||||
[
|
||||
new ResolvedAttribute
|
||||
{
|
||||
CanonicalName = "Label",
|
||||
Value = "Main Pump",
|
||||
DataType = "String"
|
||||
// No DataSourceReference — static attribute
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
var actor = CreateInstanceActor("Pump1", config);
|
||||
|
||||
actor.Tell(new GetAttributeRequest(
|
||||
"corr-quality-2", "Pump1", "Label", DateTimeOffset.UtcNow));
|
||||
|
||||
var response = ExpectMsg<GetAttributeResponse>();
|
||||
Assert.True(response.Found);
|
||||
Assert.Equal("Good", response.Quality);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user