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>
40 lines
1.3 KiB
C#
40 lines
1.3 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|