fix(integrationtests): repair GatewayAlarmMonitor ctor build break; LDAP bind + docs (IntegrationTests-026..029)
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Security.Claims;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.Options;
|
||||
using ZB.MOM.WW.Auth.Abstractions.Ldap;
|
||||
@@ -137,26 +138,35 @@ public sealed class DashboardLdapLiveTests
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds the shared library <see cref="LibraryLdapOptions"/> from the gateway's
|
||||
/// default LDAP settings so the live tests exercise the same seeded directory the
|
||||
/// gateway connects to (localhost:3893, plaintext, with AllowInsecure for dev).
|
||||
/// Builds the shared library <see cref="LibraryLdapOptions"/> by binding the real
|
||||
/// <c>MxGateway:Ldap</c> configuration section the same way production does in
|
||||
/// <c>AddZbLdapAuth(configuration, "MxGateway:Ldap")</c>, rather than hand-copying the
|
||||
/// gateway shadow <c>LdapOptions</c> defaults field by field (IntegrationTests-028).
|
||||
/// Binding the section directly onto the shared type means the live tests exercise the
|
||||
/// exact option-binding path production uses, pick up every shared field (including
|
||||
/// <see cref="LibraryLdapOptions.ConnectionTimeoutMs"/>, which governs the
|
||||
/// unreachable-server test's timing) at whatever value the operator configured, and
|
||||
/// cannot silently drop a field added to the shared type. The gateway's
|
||||
/// <c>appsettings.json</c> seeds the dev directory connection (localhost:3893,
|
||||
/// plaintext, AllowInsecure).
|
||||
/// </summary>
|
||||
private static LibraryLdapOptions LibraryOptions()
|
||||
{
|
||||
ZB.MOM.WW.MxGateway.Server.Configuration.LdapOptions gateway = new();
|
||||
return new LibraryLdapOptions
|
||||
{
|
||||
Enabled = gateway.Enabled,
|
||||
Server = gateway.Server,
|
||||
Port = gateway.Port,
|
||||
Transport = gateway.Transport,
|
||||
AllowInsecure = gateway.AllowInsecure,
|
||||
SearchBase = gateway.SearchBase,
|
||||
ServiceAccountDn = gateway.ServiceAccountDn,
|
||||
ServiceAccountPassword = gateway.ServiceAccountPassword,
|
||||
UserNameAttribute = gateway.UserNameAttribute,
|
||||
DisplayNameAttribute = gateway.DisplayNameAttribute,
|
||||
GroupAttribute = gateway.GroupAttribute,
|
||||
};
|
||||
string repositoryRoot = IntegrationTestEnvironment.ResolveRepositoryRoot(AppContext.BaseDirectory);
|
||||
string appSettingsPath = Path.Combine(
|
||||
repositoryRoot,
|
||||
"src",
|
||||
"ZB.MOM.WW.MxGateway.Server",
|
||||
"appsettings.json");
|
||||
|
||||
IConfiguration configuration = new ConfigurationBuilder()
|
||||
.AddJsonFile(appSettingsPath, optional: false)
|
||||
.Build();
|
||||
|
||||
// Same section production binds in AddZbLdapAuth(configuration, "MxGateway:Ldap").
|
||||
// Get<T> returns null only when the section is absent; appsettings.json always
|
||||
// carries it, so fall back to shared defaults defensively rather than throw.
|
||||
return configuration.GetSection("MxGateway:Ldap").Get<LibraryLdapOptions>()
|
||||
?? new LibraryLdapOptions();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
using ZB.MOM.WW.MxGateway.Contracts.Proto;
|
||||
using ZB.MOM.WW.MxGateway.Server.Alarms;
|
||||
using ZB.MOM.WW.MxGateway.Server.Configuration;
|
||||
|
||||
namespace ZB.MOM.WW.MxGateway.IntegrationTests.TestSupport;
|
||||
|
||||
/// <summary>
|
||||
/// No-op <see cref="IAlarmWatchListResolver"/> for integration tests that
|
||||
/// construct a <see cref="GatewayAlarmMonitor"/> only to satisfy the
|
||||
/// <see cref="ZB.MOM.WW.MxGateway.Server.Grpc.MxAccessGatewayService"/>
|
||||
/// constructor. The live MXAccess smoke tests never exercise the alarm
|
||||
/// monitor, so the resolver always yields an empty watch-list rather than
|
||||
/// touching the Galaxy Repository the production
|
||||
/// <see cref="AlarmWatchListResolver"/> requires. Singleton because the type
|
||||
/// holds no state — every consumer can share <see cref="Instance"/>.
|
||||
/// </summary>
|
||||
public sealed class EmptyAlarmWatchListResolver : IAlarmWatchListResolver
|
||||
{
|
||||
/// <summary>Shared no-op instance.</summary>
|
||||
public static readonly EmptyAlarmWatchListResolver Instance = new();
|
||||
|
||||
private static readonly IReadOnlyList<AlarmSubtagTarget> Empty = [];
|
||||
|
||||
private EmptyAlarmWatchListResolver()
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task<IReadOnlyList<AlarmSubtagTarget>> ResolveAsync(
|
||||
AlarmsOptions options,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
return Task.FromResult(Empty);
|
||||
}
|
||||
}
|
||||
@@ -1097,6 +1097,8 @@ public sealed class WorkerLiveMxAccessSmokeTests(ITestOutputHelper output)
|
||||
_loggerFactory.CreateLogger<MxAccessGatewayService>(),
|
||||
new ZB.MOM.WW.MxGateway.Server.Alarms.GatewayAlarmMonitor(
|
||||
sessionManager,
|
||||
EmptyAlarmWatchListResolver.Instance,
|
||||
_metrics,
|
||||
options,
|
||||
_loggerFactory.CreateLogger<ZB.MOM.WW.MxGateway.Server.Alarms.GatewayAlarmMonitor>()));
|
||||
}
|
||||
|
||||
@@ -12,6 +12,22 @@
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<!--
|
||||
DashboardLdapLiveTests directly references the shared LDAP provider's public
|
||||
types (LdapAuthService / LdapOptions), so declare direct dependencies rather
|
||||
than rely on the transitive flow through the Server ProjectReference
|
||||
(IntegrationTests-027). Versions match the Server's pinned 0.1.2. The
|
||||
configuration packages back the production-fidelity MxGateway:Ldap binding the
|
||||
live-test fixture uses in place of the old field-by-field hand-copy
|
||||
(IntegrationTests-028).
|
||||
-->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ZB.MOM.WW.Auth.Abstractions" Version="0.1.2" />
|
||||
<PackageReference Include="ZB.MOM.WW.Auth.Ldap" Version="0.1.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.7" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.7" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
Reference in New Issue
Block a user