Extract historian into a runtime-loaded plugin so hosts without the Wonderware SDK can run with Historian.Enabled=false
The aahClientManaged SDK is now isolated in ZB.MOM.WW.LmxOpcUa.Historian.Aveva and loaded via HistorianPluginLoader from a Historian/ subfolder only when enabled, removing the SDK from Host's compile-time and deploy-time surface. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using ArchestrA;
|
||||
using ZB.MOM.WW.LmxOpcUa.Historian.Aveva;
|
||||
using ZB.MOM.WW.LmxOpcUa.Host.Configuration;
|
||||
|
||||
namespace ZB.MOM.WW.LmxOpcUa.Historian.Aveva.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// Fake Historian connection factory for tests. Controls whether connections
|
||||
/// succeed, fail, or timeout without requiring the real Historian SDK runtime.
|
||||
/// </summary>
|
||||
internal sealed class FakeHistorianConnectionFactory : IHistorianConnectionFactory
|
||||
{
|
||||
public Exception? ConnectException { get; set; }
|
||||
|
||||
public int ConnectCallCount { get; private set; }
|
||||
|
||||
public Action<int>? OnConnect { get; set; }
|
||||
|
||||
public HistorianAccess CreateAndConnect(HistorianConfiguration config, HistorianConnectionType type)
|
||||
{
|
||||
ConnectCallCount++;
|
||||
|
||||
if (OnConnect != null)
|
||||
{
|
||||
OnConnect(ConnectCallCount);
|
||||
}
|
||||
else if (ConnectException != null)
|
||||
{
|
||||
throw ConnectException;
|
||||
}
|
||||
|
||||
// Return a HistorianAccess that is not actually connected.
|
||||
// ReadRawAsync etc. will fail when they try to use it, which exercises
|
||||
// the HandleConnectionError → reconnect path.
|
||||
return new HistorianAccess();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user