namespace ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests;
///
/// Crosses every ab_server compose profile with both AbCip transports so each integration
/// test runs once on libplctag and once on the native managed stack. The native run must be green
/// wherever the libplctag run is.
///
///
/// Every AbCip compose profile binds host :44818, so only one can run at a time. When
/// AB_SERVER_COMPOSE_PROFILE is set, keeps only that profile, so the
/// rows match the running container instead of driving, say, Micro800 semantics at a ControlLogix.
/// Unset, only the default ControlLogix profile is crossed: ab_server does not self-identify its
/// --plc mode, so crossing every family at whichever container holds :44818 failed the
/// non-matching rows instead of skipping them. Set AB_SERVER_COMPOSE_PROFILE to the running
/// profile (compactlogix / micro800 / guardlogix) to select another family.
///
public static class TransportMatrix
{
/// Both transports, for tests that are not parameterised by profile.
public static IReadOnlyList AllTransports { get; } =
[AbCipTransport.Libplctag, AbCipTransport.Native];
/// Gets (profile, transport) rows for every selected profile × both transports.
public static IEnumerable